嵌入式-第3章 HCS12 Instruction Set教材_第1頁(yè)
嵌入式-第3章 HCS12 Instruction Set教材_第2頁(yè)
嵌入式-第3章 HCS12 Instruction Set教材_第3頁(yè)
嵌入式-第3章 HCS12 Instruction Set教材_第4頁(yè)
嵌入式-第3章 HCS12 Instruction Set教材_第5頁(yè)
已閱讀5頁(yè),還剩42頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

HCS12指令系統(tǒng)章節(jié)介紹

教學(xué)內(nèi)容本章介紹HCS12的指令集

教學(xué)目標(biāo)了解HCS12CPU的程序模型了解HCS12CPU的尋址方式理解HCS12CPU的指令集可以編寫簡(jiǎn)單的匯編程序一、匯編指令格式 匯編程序以行為單位,每行一條指令,結(jié)尾必須是回車符。 每行最多有5部份,即:

[標(biāo)號(hào)]操作碼[操作數(shù)1],[操作數(shù)2][;注釋]二、HCS12程序模型7A07B015 D 015 X 015 Y 015 SP 015 PC 05PPAGE*0SXHINZCV8位累加器A和B16位累加器D(A:B)變址寄存器X變址寄存器Y堆棧指針SP程序計(jì)數(shù)器PC條件碼寄存器CCR07條件碼寄存器其中S、X、I為屏蔽位;H、N、Z、V、C為算術(shù)位。SXHINZVC進(jìn)位/借位標(biāo)志溢出標(biāo)志為0標(biāo)志為負(fù)標(biāo)志中斷屏蔽位半進(jìn)位標(biāo)志非屏蔽中斷允許位停止運(yùn)行模式禁止位三、HCS12的尋址方式HCS12的尋址方式隱含尋址(INHERENT)

CLRB立即尋址(IMMEDIATE)

LDAA#$12擴(kuò)展尋址(EXTENDED)

LDAA$4000直接尋址(DIRECT)

LDAA$50相對(duì)尋址(RELATIVE)

BNELOOP變址尋址(INDEXED)

LDAB$10,XHCS12的尋址方式新的尋址方式LDAA-$10,X

X、Y、SP、PC加上5位有符號(hào)常數(shù)偏移量形成操作數(shù)地址LDAA-$50,X

X、Y、SP、PC加上9位有符號(hào)常數(shù)偏移量形成操作數(shù)地址LDAA-$500,X

X、Y、SP、PC加上16位常數(shù)偏移量(兩擴(kuò)展字節(jié)中)為操作數(shù)地址JMP[D,X]

指向操作數(shù)的指針的地址由X、Y、SP、PC加上累加器D所確定。HCS12的尋址方式一覽表序號(hào)尋址模式源程序格式縮寫說明備注一隱含尋址INSTINH無(wú)操作數(shù)或操作數(shù)在寄存器中操作數(shù)部分空白二立即尋址INST#opr8i/#opr16iIMM操作數(shù)存放在指令中,根據(jù)上下文確定8位還是16位操作數(shù)帶#號(hào)三直接尋址INSTopr8aDIR操作數(shù)本身就是地址的低8位,僅適用于地址范圍0000~00FF操作數(shù)為直接地址,不帶#號(hào)擴(kuò)展尋址INSTop16aEXT操作數(shù)本身是16位地址四相對(duì)尋址INSTrel8/rel16REL當(dāng)前PC加上位于指令中的8位或者16位偏移量作為操作數(shù)實(shí)際地址由匯編程序生成HCS12的尋址方式一覽表序號(hào)尋址模式源程序格式縮寫說明備注五減后變址尋址INSToprx3,﹣xysIDX先將X、Y、SP減去一個(gè)指定的值(1~8),然后作為操作數(shù)地址寄存器內(nèi)容即為操作數(shù)的地址,同時(shí)還可以調(diào)整寄存器指向下一個(gè)元素,不包括PC寄存器增后變址尋址INSToprx3,+xysIDX先將X、Y、SP增加一個(gè)指定的值(1~8),然后作為操作數(shù)地址后減變址尋址INSToprx3,xys﹣IDX先將X、Y、SP作為操作數(shù)地址,然后減去一個(gè)指定的值(1~8)后增變址尋址INSToprx3,xys+IDX先將X、Y、SP作為操作數(shù)地址,然后增加一個(gè)指定的值(1~8)HCS12的尋址方式一覽表序號(hào)尋址模式源程序格式縮寫說明備注六5位變址尋址INSToprx5,xyspIDXX、Y、SP、PC加上5位有符號(hào)常數(shù)偏移量形成操作數(shù)地址變址寄存器的內(nèi)容加上一個(gè)常數(shù)或另一個(gè)寄存器內(nèi)容即為操作數(shù)地址,包括PC寄存器9位變址尋址INSToprx9,xyspIDX1X、Y、SP、PC加上9位有符號(hào)常數(shù)偏移量形成操作數(shù)地址16位變址尋址INSToprx16,xyspIDX2X、Y、SP、PC加上16位有符號(hào)常數(shù)偏移量形成操作數(shù)地址累加器變址尋址INSTabd,xysp

IDXX、Y、SP、PC加上8位(A、B)或16位(D)量形成操作數(shù)地址HCS12的尋址方式一覽表序號(hào)尋址模式源程序格式縮寫說明備注七間接常變址尋址INST[oprx16,xysp][D,IDX]指向操作數(shù)的指針的地址由X、Y、SP、PC加上16位常數(shù)偏移量確定指針尋址、到內(nèi)存中找操作數(shù)地址間接D變址尋址INST[D,xysp][IDX2]指向操作數(shù)的指針的地址由X、Y、SP、PC加上累加器D所確定四、指令系統(tǒng)

數(shù)據(jù)處理類指令(DataHandling)

算術(shù)運(yùn)算類指令(Arithmetic)

邏輯指令(Logic)

數(shù)據(jù)測(cè)試類指令(DataTest)

分支跳轉(zhuǎn)類指令(Branch) 跳轉(zhuǎn)和子程序調(diào)用類(Jump&SubroutineCalls)小結(jié)

HCS12程序設(shè)計(jì)模型

HCS12尋址模式

HCS12指令系統(tǒng)數(shù)據(jù)處理類指令—寄存器加載指令助記符功能操作LDAALoadA(M)→ALDABLoadB(M)→BLDDLoadD(M:M+1)→(A:B)LDSLoadSP(M:M+1)→SPH:SPLLDXLoadindexregisterX(M:M+1)→XH:XLLDYLoadindexregisterY(M:M+1)→YH:YLLEASLoadeffectiveaddressintoSPEffectiveaddress→SPLEAXLoadeffectiveaddressintoXEffectiveaddress→XLEAYLoadeffectiveaddressintoYEffectiveaddress→Y數(shù)據(jù)處理類指令—寄存器存儲(chǔ)指令助記符功能操作STAAStoreA(A)→MSTABStoreB(B)→MSTDStoreD(A)→M,(B)→M+1STSStoreSP(SPH:SPL)

M:M+1STXStoreX(XH:XL)→M:M+1STYStoreY(YH:YL)→M:M+1數(shù)據(jù)處理類指令—寄存器傳送指令助記符功能操作TABTransferAtoB(A)→BTAPTransferAtoCCR(A)→CCRTBATransferBtoA(B)→ATFRTransferRtoR(A,B,CCR,D,X,Y,orSP)

A,B,CCR,D,X,Y,orSPTPATransferCCRtoA(CCR)→ATSXTransferSPtoX(SP)→XTSYTransferSPtoY(SP)→YTXSTransferXtoSP(X)→SPTYSTransferYtoSP(Y)→SP數(shù)據(jù)處理類指令—寄存器交換指令助記符功能操作EXGExchangeregistertoregister(A,B,CCR,D,X,Y,orSP)

←→

(A,B,CCR,D,X,Y,orSP)

XGDXExchangeDwithX(D)←→(X)XGDYExchangeDwithY(D)←→(Y)數(shù)據(jù)處理類指令—內(nèi)存數(shù)據(jù)傳送指令助記符功能操作MOVBMovebyte(8-bit)(M1)

M2MOVWMoveword(16-bit)(M:M+11)→M:M+12

MOVB #$359,Y

;將立即數(shù)#$35送到(Y+9)單元,不影響標(biāo)志位MOVW #$1234$1100

;將立即數(shù)#$12、#$34分別送到($1100)、($1101)單元MOVB $1000$2000

;將($1000)單元內(nèi)容送到($2000)單元MOVB $10005,SP

;將($1000)單元內(nèi)容送到(SP+5)單元MOVB 3,X2,Y

;將(X+3)單元內(nèi)容送到(Y+2)單元數(shù)據(jù)處理類指令—堆棧操作指令助記符功能操作PSHAPUSHA(SP)-1→SP;(A)→M(SP)PSHBPUSHB(SP)-1→SP;(B)→M(SP)PSHCPUSHCCR(SP)-1→SP;(CCR)→M(SP)PSHDPUSHD(SP)-2→SP;(A:B)→M(SP):M(SP+1)PSHXPUSHX(SP)-2→SP;(X)→M(SP):M(SP+1)PSHYPUSHY(SP)-2→SP;(Y)→M(SP):M(SP+1)PULAPULLAM(SP)→A;(SP)+1→SPPULBPULLBM(SP)→B;(SP)+1→SPPULCPULLCCRM(SP)→CCR;(SP)+1→SPPULDPULLD(M(SP):M(SP+1))→A:B;(SP)+2→SPPULXPULLX(M(SP):M(SP+1))→X;(SP)+2→SPPULYPULLY(M(SP):M(SP+1))→Y;(SP)+2→SP數(shù)據(jù)處理類指令—堆棧操作指令數(shù)據(jù)處理類指令—加1指令助記符功能操作INCIncrementmemory(M)+$01→MINCAIncrementA(A)+$01→AINCBIncrementB(B)+$01→BINSIncrementSP(SP)+$01→SPINXIncrementX(X)+$01→XINYIncrementY(Y)+$01→Y數(shù)據(jù)處理類指令—減1指令助記符功能操作DECDecrementmemory(M)-

$01→MDECADecrementA(A)-

$01→ADECBDecrementB(B)-

$01→BDESDecrementSP(SP)-

$01→SPDEXDecrementX(X)-

$01→XDEYDecrementY(Y)-

$01→Y數(shù)據(jù)處理類指令—取反、求補(bǔ)助記符功能操作COMOne’scomplementmemory$FF-

(M)→MCOMAOne’scomplementA$FF-

(A)→ACOMBOne’scomplementB$FF-

(B)→BNEGTwo’scomplementmemory$00-

(M)→MNEGATwo’scomplementA$00-

(A)→ANEGBTwo’scomplementB$00-

(B)→B數(shù)據(jù)處理類指令—求補(bǔ)、取反求A的絕對(duì)值:FD_ABS:CMPA#$00;檢驗(yàn)A是否為正數(shù)BGEA_PLUS;是正數(shù),跳轉(zhuǎn)NEGA;是負(fù)數(shù),求其相反數(shù)A_PLUS:TAB;得到A的絕對(duì)值并放在B中將減法運(yùn)算轉(zhuǎn)換為加法運(yùn)算:M_2_P:NEGA;$00-

A→A,這兩行程序求$64-A的值A(chǔ)DDA#$64;$00-

A+$64=$64

A數(shù)據(jù)處理類指令—清0、位操作助記符功能操作CLRClearmemory$00→MCLRAClearA$00→ACLRBClearB$00→BBCLRClearbitsinmemory(M)·(mm)→MBSETSetbitsinmemory(M)+

(mm)→M數(shù)據(jù)處理類指令—最大/最小值助記符功能操作EMINDMINoftwounsigned16-bitvaluesresulttoaccumulatorMIN((D),(M:M+1))→DEMINMMINoftwounsigned16-bitvaluesresulttomemoryMIN((D),(M:M+1))→M:M+1MINAMINoftwounsigned8-bitvaluesresulttoaccumulatorMIN((A),(M))→AMINMMINoftwounsigned8-bitvaluesresulttomemoryMIN((A),(M))→MEMAXDMAXoftwounsigned16-bitvaluesresulttoaccumulatorMAX((D),(M:M+1))→DEMAXMMAXoftwounsigned16-bitvaluesresulttomemoryMAX((D),(M:M+1))→M:M+1MAXAMAXoftwounsigned8-bitvaluesresulttoaccumulatorMAX((A),(M))→AMAXMMAXoftwounsigned8-bitvaluesresulttomemoryMAX((A),(M))→M數(shù)據(jù)處理類指令—循環(huán)移位助記符功能操作ROLRotateleftmemorythroughcarryROLARotateleftAthroughcarryROLBRotateleftBthroughcarryRORRotaterightmemorythroughcarryRORARotaterightAthroughcarryRORBRotaterightBthroughcarry數(shù)據(jù)處理類指令—算術(shù)移位助記符功能操作ASLArithmeticshiftleftmemoryASLAArithmeticshiftleftAASLBArithmeticshiftleftBASLDArithmeticshiftleftDASRArithmeticshiftrightmemoryASRAArithmeticshiftrightAASRBArithmeticshiftrightB數(shù)據(jù)處理類指令—邏輯移位助記符功能操作LSLLogicshiftleftmemoryLSLALogicshiftleftALSLBLogicshiftleftBLSLDLogicshiftleftDLSRLogicshiftrightmemoryLSRALogicshiftright

ALSLRBLogicshiftright

BLSRDLogicshiftright

D算數(shù)運(yùn)算類指令—加法指令助記符功能操作ABAAddBtoA(A)+(B)→AABXAddBtoX(B)+(X)→XABYAddBtoY(B)+(Y)→YADCAAddwithcarrytoA(A)+(M)+C→AADCBAddwithcarrytoB(B)+(M)+C→BADDAAddwithoutcarrytoA(A)+(M)→AADDBAddwithoutcarrytoB(B)+(M)→BADDDAddtoD(A:B)+(M:M+1)→A:BDAADecimaladjustA(A)10算數(shù)運(yùn)算類指令—加法指令

在$0800~$0803和$1000~$1003內(nèi)存單元各存放著一個(gè)長(zhǎng)整型數(shù),求它們的和并放在$2000~$2003單元。注意高位字節(jié)在低地址單元。

解:

LDD $0802 ;取得被加數(shù)的低位字到累加器D ADD $1002 ;與加數(shù)的低位字相加,結(jié)果放在D STD $2002 ;結(jié)果低位字保存到目標(biāo)地址單元

LDD $0800 ;取得被加數(shù)的高位字到D

;(A存放高位字節(jié),B存放低位字節(jié))

ADCB $1001 ;高位字中的低位字節(jié)與加數(shù)對(duì)應(yīng)位相加,結(jié)果放B ADCA $1000 ;高位字中的高位字節(jié)與加數(shù)對(duì)應(yīng)位相加,結(jié)果放A STD $2000 ;結(jié)果D(A、B)保存到目標(biāo)地址單元算數(shù)運(yùn)算類指令—減法指令助記符功能操作SBASubtractBfromA(A)-(B)→ASBCASubtractwithborrowfromA(A)-(M)-C→ASBCBSubtractwithborrowfromB(B)-(M)-C→BSUBASubtractmemoryfromA(A)-(M)→ASUBBSubtractmemoryfromB(B)-(M)→BSUBDSubtractmemoryfromD(A:B)(D)-(M:M+1)→D算數(shù)運(yùn)算類指令—減法指令

在$0800~$0803和$1000~$1003內(nèi)存單元各存放著一個(gè)長(zhǎng)整型數(shù),求它們的差并放在$2000~$2003單元。注意高位字節(jié)在低地址單元。

解:

LDD $0802 ;取得被減數(shù)的低位字到累加器D SBD $1002 ;與減數(shù)的低位字相減,差放在D中,注意可能產(chǎn)生錯(cuò)位

STD $2002 ;差的低位字保存到目標(biāo)地址單元

LDD $0800 ;取得被減數(shù)的高位字到D

;(A存放高位字節(jié),B存放低位字節(jié))

SBCB $1001 ;高位字中的低位字節(jié)與減數(shù)對(duì)應(yīng)位相減,結(jié)果放B SBCA $1000 ;高位字中的高位字節(jié)與減數(shù)對(duì)應(yīng)為相減,結(jié)果放A STD $2000 ;結(jié)果D(A、B)保存到目標(biāo)地址單元算數(shù)運(yùn)算類指令—乘法指令助記符功能操作MUL8by8multiply(unsigned)(A)×(B)→A:BEMUL16by16multiply(unsigned)(D)×(Y)→Y:DEMULS16by16multiply(signed)(D)×(Y)→Y:D算數(shù)運(yùn)算類指令—除法指令助記符功能操作EDIV32by16divide(unsigned)(Y:D)÷(X)→Y余數(shù)→DEDIVS32by16divide(signed)(Y:D)÷(X)→Y余數(shù)→DFDIV16by16fractionaldivide(D)÷(X)→X余數(shù)→DIDIV16by16integerdivide(unsigned)(D)÷(X)→X余數(shù)→DIDIVS16by16integerdivide(signed)(D)÷(X)→X余數(shù)→D算數(shù)運(yùn)算類指令—除法指令整數(shù)除法16/16無(wú)符號(hào)或有符號(hào)(IDIV/IDIVS)操作:DREG/XREG結(jié)果:商在X中;余數(shù)在D中擴(kuò)展的除法32-Bit/16-Bit無(wú)符號(hào)或有符號(hào)(EDIV/EDIVS)操作:(Y:D)/(X)→Y;余數(shù)→

DV=1,如果結(jié)果>$FFFF(無(wú)符號(hào)V=1,如果結(jié)果>$7FFF(有符號(hào))C=1,如果除數(shù)為$0000算數(shù)運(yùn)算類指令—乘積累加指令EMACS(M(X):M(X+1))×(M(Y):M(Y+1))+M~M+3)→M~M+3例:EMACS $2500 (*32-BITRESULT*)邏輯指令助記符功能操作ANDAANDAwithmemory(A)·

(M)→AANDBANDBwithmemory(B)·

(M)→BANDCCANDCCRwithmemory(CCR)·

(M)→CCRORAAORAwithmemory(A)+(M)→AORABORBwithmemory(B)+(M)→BORCCORCCRwithmemory(CCR)+(M)→CCREORAExclusiveORAwithmemory(A)⊕

(M)→AEORBExclusiveORBwithmemory(B)⊕

(M)→B數(shù)據(jù)測(cè)試類指令—比較指令助記符功能操作CBACompareAtoB(A)-(B)CMPACompareAtomemory(A)-(M)CMPBCompareBtomemory(B)-(M)CPDCompareDtomemory(16-bit)(A:B)-(M:M+1)CPSCompareSPtomemory(16-bit)(SP)-(M:M+1)CPXCompareXtomemory(16-bit)(X)-(M:M+1)CPYCompareYtomemory(16-bit)(Y)-(M:M+1)數(shù)據(jù)測(cè)試類指令—比較/檢測(cè)指令助記符功能操作TSTTestmemoryforzeroorminus(M)-$00TSTATestAforzeroorminus(A)-$00TSTBTestBforzeroorminus(B)-$00BITABittestA(A)·(M)BITBBittestB(B)·(M)分支跳轉(zhuǎn)類指令—固定分支助記符條件CCR檢驗(yàn)(L)BRABranchalways1=1(L)BRNBranchnever1=0分支跳轉(zhuǎn)類指令—簡(jiǎn)單條件分支助記符條件CCR檢驗(yàn)關(guān)系(L)BCCBranchifcarryclearC=1A<M(L)BCSBranchifcarrysetC=0A≥M(L)BEQBranchifequalZ=1A=M(L)BMIBranchifminusN=1r=NEGATIVE(L)BNEBranchifnotequalZ=0A≠M(fèi)(L)BPLBranchifplusN=0r=POSITIVE(L)BVCBranchifoverflowclearV=0r=SIGNOK(L)BVSBranchifoverflowsetV=1r=SIGNERROR分支跳轉(zhuǎn)類指令—無(wú)符號(hào)條件分支助記符條件CCR檢驗(yàn)關(guān)系(L)BHIBranchifhigherC+Z=0R>M(L)BHSBranchifhigherorsameC=0R≥M(L)BLOBranchiflowerC=1R<M(L)BLSBranchiflowerorsameC+Z=1R≤M分支跳轉(zhuǎn)類指令—有符號(hào)條件分支助記符條件CCR檢驗(yàn)關(guān)系(L)BGEBranchifgreaterthanorequalN⊕V=0R≥M(L)BGTBranchifgreaterthanZ+(N⊕V)=0R>M(L)BLEBranchiflessthanorequalZ+(N⊕V)=1R≤M(L)BLTBranchiflessthanN⊕V=1R<M分支跳轉(zhuǎn)類指令—循環(huán)控制指令助記符條件操作DBEQDecrementcounterandbranchif=0(counter=A,B,D,X,Y,orSP)(counter)-

1→counterif(counter)=0,thenbranchDBNEDecrementcounterandbranchif≠0(counter=A,B,D,X,Y,orSP)(counter)-

1

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論