版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
HCS12指令系統章節(jié)介紹
教學內容本章介紹HCS12的指令集
教學目標了解HCS12CPU的程序模型了解HCS12CPU的尋址方式理解HCS12CPU的指令集可以編寫簡單的匯編程序一、匯編指令格式 匯編程序以行為單位,每行一條指令,結尾必須是回車符。 每行最多有5部份,即:
[標號]操作碼[操作數1],[操作數2][;注釋]二、HCS12程序模型7A07B015 D 015 X 015 Y 015 SP 015 PC 05PPAGE*0SXHINZCV8位累加器A和B16位累加器D(A:B)變址寄存器X變址寄存器Y堆棧指針SP程序計數器PC條件碼寄存器CCR07條件碼寄存器其中S、X、I為屏蔽位;H、N、Z、V、C為算術位。SXHINZVC進位/借位標志溢出標志為0標志為負標志中斷屏蔽位半進位標志非屏蔽中斷允許位停止運行模式禁止位三、HCS12的尋址方式HCS12的尋址方式隱含尋址(INHERENT)
CLRB立即尋址(IMMEDIATE)
LDAA#$12擴展尋址(EXTENDED)
LDAA$4000直接尋址(DIRECT)
LDAA$50相對尋址(RELATIVE)
BNELOOP變址尋址(INDEXED)
LDAB$10,XHCS12的尋址方式新的尋址方式LDAA-$10,X
X、Y、SP、PC加上5位有符號常數偏移量形成操作數地址LDAA-$50,X
X、Y、SP、PC加上9位有符號常數偏移量形成操作數地址LDAA-$500,X
X、Y、SP、PC加上16位常數偏移量(兩擴展字節(jié)中)為操作數地址JMP[D,X]
指向操作數的指針的地址由X、Y、SP、PC加上累加器D所確定。HCS12的尋址方式一覽表序號尋址模式源程序格式縮寫說明備注一隱含尋址INSTINH無操作數或操作數在寄存器中操作數部分空白二立即尋址INST#opr8i/#opr16iIMM操作數存放在指令中,根據上下文確定8位還是16位操作數帶#號三直接尋址INSTopr8aDIR操作數本身就是地址的低8位,僅適用于地址范圍0000~00FF操作數為直接地址,不帶#號擴展尋址INSTop16aEXT操作數本身是16位地址四相對尋址INSTrel8/rel16REL當前PC加上位于指令中的8位或者16位偏移量作為操作數實際地址由匯編程序生成HCS12的尋址方式一覽表序號尋址模式源程序格式縮寫說明備注五減后變址尋址INSToprx3,﹣xysIDX先將X、Y、SP減去一個指定的值(1~8),然后作為操作數地址寄存器內容即為操作數的地址,同時還可以調整寄存器指向下一個元素,不包括PC寄存器增后變址尋址INSToprx3,+xysIDX先將X、Y、SP增加一個指定的值(1~8),然后作為操作數地址后減變址尋址INSToprx3,xys﹣IDX先將X、Y、SP作為操作數地址,然后減去一個指定的值(1~8)后增變址尋址INSToprx3,xys+IDX先將X、Y、SP作為操作數地址,然后增加一個指定的值(1~8)HCS12的尋址方式一覽表序號尋址模式源程序格式縮寫說明備注六5位變址尋址INSToprx5,xyspIDXX、Y、SP、PC加上5位有符號常數偏移量形成操作數地址變址寄存器的內容加上一個常數或另一個寄存器內容即為操作數地址,包括PC寄存器9位變址尋址INSToprx9,xyspIDX1X、Y、SP、PC加上9位有符號常數偏移量形成操作數地址16位變址尋址INSToprx16,xyspIDX2X、Y、SP、PC加上16位有符號常數偏移量形成操作數地址累加器變址尋址INSTabd,xysp
IDXX、Y、SP、PC加上8位(A、B)或16位(D)量形成操作數地址HCS12的尋址方式一覽表序號尋址模式源程序格式縮寫說明備注七間接常變址尋址INST[oprx16,xysp][D,IDX]指向操作數的指針的地址由X、Y、SP、PC加上16位常數偏移量確定指針尋址、到內存中找操作數地址間接D變址尋址INST[D,xysp][IDX2]指向操作數的指針的地址由X、Y、SP、PC加上累加器D所確定四、指令系統
數據處理類指令(DataHandling)
算術運算類指令(Arithmetic)
邏輯指令(Logic)
數據測試類指令(DataTest)
分支跳轉類指令(Branch) 跳轉和子程序調用類(Jump&SubroutineCalls)小結
HCS12程序設計模型
HCS12尋址模式
HCS12指令系統數據處理類指令—寄存器加載指令助記符功能操作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數據處理類指令—寄存器存儲指令助記符功能操作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數據處理類指令—寄存器傳送指令助記符功能操作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數據處理類指令—寄存器交換指令助記符功能操作EXGExchangeregistertoregister(A,B,CCR,D,X,Y,orSP)
←→
(A,B,CCR,D,X,Y,orSP)
XGDXExchangeDwithX(D)←→(X)XGDYExchangeDwithY(D)←→(Y)數據處理類指令—內存數據傳送指令助記符功能操作MOVBMovebyte(8-bit)(M1)
→
M2MOVWMoveword(16-bit)(M:M+11)→M:M+12
MOVB #$359,Y
;將立即數#$35送到(Y+9)單元,不影響標志位MOVW #$1234$1100
;將立即數#$12、#$34分別送到($1100)、($1101)單元MOVB $1000$2000
;將($1000)單元內容送到($2000)單元MOVB $10005,SP
;將($1000)單元內容送到(SP+5)單元MOVB 3,X2,Y
;將(X+3)單元內容送到(Y+2)單元數據處理類指令—堆棧操作指令助記符功能操作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數據處理類指令—堆棧操作指令數據處理類指令—加1指令助記符功能操作INCIncrementmemory(M)+$01→MINCAIncrementA(A)+$01→AINCBIncrementB(B)+$01→BINSIncrementSP(SP)+$01→SPINXIncrementX(X)+$01→XINYIncrementY(Y)+$01→Y數據處理類指令—減1指令助記符功能操作DECDecrementmemory(M)-
$01→MDECADecrementA(A)-
$01→ADECBDecrementB(B)-
$01→BDESDecrementSP(SP)-
$01→SPDEXDecrementX(X)-
$01→XDEYDecrementY(Y)-
$01→Y數據處理類指令—取反、求補助記符功能操作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數據處理類指令—求補、取反求A的絕對值:FD_ABS:CMPA#$00;檢驗A是否為正數BGEA_PLUS;是正數,跳轉NEGA;是負數,求其相反數A_PLUS:TAB;得到A的絕對值并放在B中將減法運算轉換為加法運算:M_2_P:NEGA;$00-
A→A,這兩行程序求$64-A的值ADDA#$64;$00-
A+$64=$64
-
A數據處理類指令—清0、位操作助記符功能操作CLRClearmemory$00→MCLRAClearA$00→ACLRBClearB$00→BBCLRClearbitsinmemory(M)·(mm)→MBSETSetbitsinmemory(M)+
(mm)→M數據處理類指令—最大/最小值助記符功能操作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數據處理類指令—循環(huán)移位助記符功能操作ROLRotateleftmemorythroughcarryROLARotateleftAthroughcarryROLBRotateleftBthroughcarryRORRotaterightmemorythroughcarryRORARotaterightAthroughcarryRORBRotaterightBthroughcarry數據處理類指令—算術移位助記符功能操作ASLArithmeticshiftleftmemoryASLAArithmeticshiftleftAASLBArithmeticshiftleftBASLDArithmeticshiftleftDASRArithmeticshiftrightmemoryASRAArithmeticshiftrightAASRBArithmeticshiftrightB數據處理類指令—邏輯移位助記符功能操作LSLLogicshiftleftmemoryLSLALogicshiftleftALSLBLogicshiftleftBLSLDLogicshiftleftDLSRLogicshiftrightmemoryLSRALogicshiftright
ALSLRBLogicshiftright
BLSRDLogicshiftright
D算數運算類指令—加法指令助記符功能操作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算數運算類指令—加法指令
在$0800~$0803和$1000~$1003內存單元各存放著一個長整型數,求它們的和并放在$2000~$2003單元。注意高位字節(jié)在低地址單元。
解:
LDD $0802 ;取得被加數的低位字到累加器D ADD $1002 ;與加數的低位字相加,結果放在D STD $2002 ;結果低位字保存到目標地址單元
LDD $0800 ;取得被加數的高位字到D
;(A存放高位字節(jié),B存放低位字節(jié))
ADCB $1001 ;高位字中的低位字節(jié)與加數對應位相加,結果放B ADCA $1000 ;高位字中的高位字節(jié)與加數對應位相加,結果放A STD $2000 ;結果D(A、B)保存到目標地址單元算數運算類指令—減法指令助記符功能操作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算數運算類指令—減法指令
在$0800~$0803和$1000~$1003內存單元各存放著一個長整型數,求它們的差并放在$2000~$2003單元。注意高位字節(jié)在低地址單元。
解:
LDD $0802 ;取得被減數的低位字到累加器D SBD $1002 ;與減數的低位字相減,差放在D中,注意可能產生錯位
STD $2002 ;差的低位字保存到目標地址單元
LDD $0800 ;取得被減數的高位字到D
;(A存放高位字節(jié),B存放低位字節(jié))
SBCB $1001 ;高位字中的低位字節(jié)與減數對應位相減,結果放B SBCA $1000 ;高位字中的高位字節(jié)與減數對應為相減,結果放A STD $2000 ;結果D(A、B)保存到目標地址單元算數運算類指令—乘法指令助記符功能操作MUL8by8multiply(unsigned)(A)×(B)→A:BEMUL16by16multiply(unsigned)(D)×(Y)→Y:DEMULS16by16multiply(signed)(D)×(Y)→Y:D算數運算類指令—除法指令助記符功能操作EDIV32by16divide(unsigned)(Y:D)÷(X)→Y余數→DEDIVS32by16divide(signed)(Y:D)÷(X)→Y余數→DFDIV16by16fractionaldivide(D)÷(X)→X余數→DIDIV16by16integerdivide(unsigned)(D)÷(X)→X余數→DIDIVS16by16integerdivide(signed)(D)÷(X)→X余數→D算數運算類指令—除法指令整數除法16/16無符號或有符號(IDIV/IDIVS)操作:DREG/XREG結果:商在X中;余數在D中擴展的除法32-Bit/16-Bit無符號或有符號(EDIV/EDIVS)操作:(Y:D)/(X)→Y;余數→
DV=1,如果結果>$FFFF(無符號V=1,如果結果>$7FFF(有符號)C=1,如果除數為$0000算數運算類指令—乘積累加指令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數據測試類指令—比較指令助記符功能操作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)數據測試類指令—比較/檢測指令助記符功能操作TSTTestmemoryforzeroorminus(M)-$00TSTATestAforzeroorminus(A)-$00TSTBTestBforzeroorminus(B)-$00BITABittestA(A)·(M)BITBBittestB(B)·(M)分支跳轉類指令—固定分支助記符條件CCR檢驗(L)BRABranchalways1=1(L)BRNBranchnever1=0分支跳轉類指令—簡單條件分支助記符條件CCR檢驗關系(L)BCCBranchifcarryclearC=1A<M(L)BCSBranchifcarrysetC=0A≥M(L)BEQBranchifequalZ=1A=M(L)BMIBranchifminusN=1r=NEGATIVE(L)BNEBranchifnotequalZ=0A≠M(L)BPLBranchifplusN=0r=POSITIVE(L)BVCBranchifoverflowclearV=0r=SIGNOK(L)BVSBranchifoverflowsetV=1r=SIGNERROR分支跳轉類指令—無符號條件分支助記符條件CCR檢驗關系(L)BHIBranchifhigherC+Z=0R>M(L)BHSBranchifhigherorsameC=0R≥M(L)BLOBranchiflowerC=1R<M(L)BLSBranchiflowerorsameC+Z=1R≤M分支跳轉類指令—有符號條件分支助記符條件CCR檢驗關系(L)BGEBranchifgreaterthanorequalN⊕V=0R≥M(L)BGTBranchifgreaterthanZ+(N⊕V)=0R>M(L)BLEBranchiflessthanorequalZ+(N⊕V)=1R≤M(L)BLTBranchiflessthanN⊕V=1R<M分支跳轉類指令—循環(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 46885-2025數字化供應鏈通用安全要求
- 養(yǎng)老院信息化建設及管理規(guī)范制度
- 企業(yè)員工績效反饋制度
- 會議提案征集與篩選制度
- 2026年護理專業(yè)知識與技能模擬題庫
- 2026年醫(yī)療行業(yè)專業(yè)筆試試題及答案解析
- 2026年英語四六級閱讀理解技巧模擬試題及答案
- 2026年環(huán)境評估師專業(yè)試題集與解析
- 2026年新版細胞鋪展協議
- 2026年新版記憶力協議
- 基于大數據的醫(yī)?;痫L險防控平臺數據模型構建與實踐
- 2025年國企計算機崗位筆試真題及答案
- 水土保持規(guī)劃編制規(guī)范(2024版)
- 硫鐵資源綜合利用制酸項目施工方案
- 電池回收廠房建設方案(3篇)
- 保函管理辦法公司
- 幼兒游戲評價的可視化研究
- 果樹賠賞協議書
- 基底節(jié)出血的護理查房
- 金華東陽市國有企業(yè)招聘A類工作人員筆試真題2024
- 2025年6月29日貴州省政府辦公廳遴選筆試真題及答案解析
評論
0/150
提交評論