第3章CPU12指令系統_第1頁
第3章CPU12指令系統_第2頁
第3章CPU12指令系統_第3頁
第3章CPU12指令系統_第4頁
第3章CPU12指令系統_第5頁
已閱讀5頁,還剩72頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

基于HCS12的嵌入式系統設計合肥工業大學機械與汽車工程學院滕勤2014.4第3章CPU12指令系統本章內容

3.1概述

3.2CPU12匯編指令的格式和符號說明

3.3尋址方式(AddressingMode)

3.4S12匯編指令系統基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.1概述【基本概念回顧】【指令】計算機能直接識別和執行的命令,即每個有效的二進制編碼組。【指令系統(InstructionSystem)】一種計算機CPU所能執行的全部指令的集合。【指令程序或機器語言】由指令碼(機器碼)組成的程序。【指令助記符(instructionmnemonicsymbol)】用一組有一定含義的字符表示的指令,一般采用相關的英文單詞縮寫。【匯編語言源程序】利用指令助記符編寫的程序。【操作碼(OperatingCode,Opcode)】規定一條指令完成何種操作。【操作數(Operand)】指令所完成操作的對象。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.2CPU12匯編指令的格式和符號說明

[標號]操作碼[操作數1],[操作數2][;注釋]3.2.1操作碼和操作數【CPU12指令組成】(前導字節)+操作碼(+后隨字節+擴展字節)位于第二頁的操作碼之前均冠以前導字節(prebyte)$18。【后置字節作用】提供了一定形式的變址尋址、傳送、交換和循環的基址寄存器和偏移量的符號等信息。【擴展字節作用】包含有附加的程序信息,例如地址、偏移量和立即數等。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.2CPU12匯編指令的格式和符號說明3.2.2數據類型CPU12支持8種數據類型:位數據(1位);5位帶符號整數;8位帶/無符號整數;字節型組合BCD數(8位);9位帶符號整數;16位帶/無符號整數;16位有效地址;32位帶/無符號整數。3.2.3數據表示方法十進制整數可直接使用;16進制數在數字前面加“$”;二進制數前加“%”;立即數應在數據前加“#”。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.2CPU12匯編指令的格式和符號說明3.2.4寄存器和存儲器表示法【寄存器表示法】寄存器用名稱表示,不分大小寫;M(Memorylocation)表示由指令有效地址指向的8位存儲單元;R(Result)表示算術或邏輯運算結果;I(Intermediateresult)表示算術或邏輯運算的中間結果。寄存器和存儲器符號加下標“n”時,表示是它的第n位;16位寄存器符號后加下標“H”或“L”時,表示其高位字節或低位字節。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.2.4寄存器和存儲器表示法【存儲器表示法】M:M+1表示16位存儲器,由M和M+1相鄰兩個存儲單元組成。M~M+3表示32位存儲器,由4個相鄰的存儲單元M、M+1、M+2、M+3組成;(M:M+1)表示兩個相鄰存儲單元的內容組成的1個字,(M)為高位字節,(M+1)為低位字節;符號()表示內容,如M(X)、M(SP)分別是由變址寄存器X和堆棧指針SP所指向的存儲單元,M(y+3)是由變址寄存器Y+3后指向的存儲單元。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.3尋址方式【尋址】尋找操作數地址的過程。【有效地址】(EffectiveAddress):操作數所在的地址。【尋址方式】(AddressingMode):通過確定操作數所在的位置(地址),提取操作數的方法。CPU12共有6類尋址方式,即固有尋址、立即尋址、直接尋址、擴展尋址、相對尋址和變址尋址。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.3.1隱含/固有尋址(InherentAddressing,INH)【固有尋址】有效地址包含在操作碼中,也稱為隱含尋址(Impliedaddressing),又因為操作數總是處于CPU的寄存器之中,還稱為寄存器尋址(Registeraddressing)。【特征】在指令助記符中出現寄存器的名稱,有時甚至連寄存器的名稱都不出現。

機器碼指令操作187CLRA;$00→A251COMB;(/B)→B312MUL;(A)(B)=A:B→D41816SBA;(A)-(B)→A基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.3尋址方式3.3.2立即尋址(ImmediateAddressing,IMM)【立即尋址】指令的操作數是一個8位或16位二進制數。【立即數】指令中出現的操作數。為了與直接地址相區別,立即數前必須加“#”號。立即尋址常用來給寄存器賦值。

MAXCNTequ13

INITSPequ$02FF機器碼指令操作1860DLDAA #MAXCNT ;$0D→A2CF02FFLDS #INITSP ;$02FF→SP3CE1234LDX #$1234 ;$1234→X48A0BORAA #%00001011 ;(A)|$0B→A基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.3.3直接尋址(DirectAddressing,DIR)【直接尋址】指令中直接給出操作數地址的尋址方式。

機器碼指令操作9655LDAA$55;($0055)→ADC20LDX$20;($0020:$0021)→X3.3.4擴展尋址(ExtendedAddressing,EXT)【擴展尋址】指令中直接給出操作數完整16位地址的尋址方式。STAA $3050 ;(A)→$3050

機器碼指令 操作:($0040)→AB60040LDAA$0040 ;使用擴展尋址 B60040LDAA>$40 ;強制使用擴展尋址基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.3尋址方式3.3.5相對尋址(RelativeAddressing,REL)相對尋址只出現在相對轉移指令(relativebranchinstruction)中。【相對尋址】當前的PC值加上指令中規定的地址偏移量relx,構成操作數實際地址的尋址方式。目的地址=源地址+轉移指令字節數+relx【源地址】轉移指令所在的地址【目的地址】轉移程序所在的首地址偏移量為8位、9位和16位帶符號二進制補碼。短轉移的偏移量為$80~$7F(-128~+127);循環控制指令支持9位偏移量,其數值為$100~$0FF(-256~+255);長轉移的偏移量為$8000~$7FFF(-32768~32767)。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.3尋址方式3.3.5相對尋址(RelativeAddressing,REL)如果偏移量為0,則CPU立即執行緊接著轉移指令的下一條指令。由于偏移量是在轉移指令的末尾,采用負的偏移量值可以使PC指向操作碼并開始循環。機器碼指令 操作20FETRAPBRATRAP ;PC-2→PC TRAPLBRATRAP ;PC-3→PC程序利用轉移指令返回到指令首址,程序在該行落入陷阱,稱為“原地踏步”。這是一種終止程序的普通方法,廣泛用于程序調試。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.3尋址方式3.3.6變址尋址(IndexedAddressing,IDX)變址尋址是CPU12的主要尋址方式,也是本節的重點和難點。【變址尋址】以某個寄存器的內容為基本地址,然后在這個基本地址上加上地址偏移量,形成操作數地址或存放操作數地址的地址,并將這個地址單元的內容作為指令的操作數。CPU12共有4類不同的變址尋址方式,這4類又可進一步分解成12種不同的變址尋址方式。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.3尋址方式3.3.6變址尋址(IndexedAddressing,IDX)【變址尋址指令組成】1個操作碼字節+1個后置(隨)字節(postbyte)+0~2個擴展字節(extensionbyte)。【操作碼】表明指令功能和變址尋址方式。【后置字節】(在指令代碼表中用xb描述)提供變址尋址方式的具體信息,如所使用的變址寄存器、偏移量的符號、變址寄存器的自動遞增/遞減方式等。當偏移量大于5位二進制數時,需要采用擴展字節,用來表示偏移量的大小。所有變址尋址方式都采用一個16位寄存器和附加信息來產生一個有效地址。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.3.6變址尋址(IndexedAddressing,IDX)3.3.6.1常數偏移變址尋址(ConstantOffsetIndexedAddressing)【常數偏移變址尋址】將變址寄存器的內容加上一個常數形成操作數地址。有三種不同的偏移量:5位、9位和16位。語法:operation,r;無偏移operation0,r;無偏移operationn,r;正常數偏移量operation-n,r;負常數偏移量

r是變址寄存器(IX,IY,SP,PC),n/-n是帶符號偏移量(5位、9位、16位)。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.3.6變址尋址(IndexedAddressing,IDX)3.3.6.1常數偏移變址尋址(ConstantOffsetIndexedAddressing)A、5位常數偏移變址尋址IDX(5-BitConstantOffsetIndexedAddressing)【指令組成】1個操作碼字節+1個后置字節偏移量為5位帶符號數,偏移量大小為:-16~+15,5位偏移量隱含在后隨字節中,有效地址=變址寄存器內容+5位地址偏移量。例如:若X=$1000,Y=$2000LDAA0,X ;($1000)→ASTAB-8,Y ;(B)→$1FF8,$2000-$8=$1FF8基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.3.6變址尋址(IndexedAddressing,IDX)3.3.6.1常數偏移變址尋址(ConstantOffsetIndexedAddressing)B、9位常數偏移變址尋址IDX1(9-BitConstantOffsetIndexedAddressing)【指令組成】1個操作碼字節+1個后置字節+1個擴展字節。9位帶符號偏移量的地址偏移范圍:-256~+255,偏移量的符號位在后隨字節中,偏移量大小在擴展字節中,操作數地址=變址寄存器內容+9位帶符號常數偏移量。例如:X=$1000,Y=$2000LDAA$FF,X;($10FF)→A($1000+$FF=$10FF)

LDAB-20,Y;($1FEC)→B($2000-$14=$1FEC)基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.3.6變址尋址(IndexedAddressing,IDX)3.3.6.1常數偏移變址尋址(ConstantOffsetIndexedAddressing)C、16位常數偏移變址尋址IDX2(16-BitConstantOffsetIndexedAddressing)【指令組成】1個字節操作碼+1個后置字節+2個擴展字節。有效地址=變址寄存器內容+兩個偏移量擴展字節。可以訪問64KB地址空間中的任何單元。

LDAA$04,X ;($04+X)→ALDD$10,Y ;($10+Y):($10+Y+1)→DLDAA$1000,PC ;($1000+PC)→A基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.3.6變址尋址(IndexedAddressing,IDX)3.3.6.2自動遞增/遞減變址尋址IDX(Autoincrement/AutodecrementIndexedAddressing)在CPU12的變址尋址方式中,提供了4種方法自動改變基址寄存器的內容,并作為指令執行的一部分。變址尋址前或變址尋址后,變址寄存器中的數值可以加上或減去一個整數值,增加值的范圍是0000~0111(+1~+8),減少值范圍是1111~1000(-1~-8)。匯編指令語法:

operationn,+r;先遞增operationn,r+;后遞增operationn,-r;先遞減operationn,r-;后遞減n=調節值,1≤n≤8,r=變址寄存器(IX,IY,SP)。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.3.6變址尋址(IndexedAddressing,IDX)3.3.6.2自動遞增/遞減變址尋址IDX(Autoincrement/AutodecrementIndexedAddressing)先遞增或先遞減指令——變址寄存器內容在訪問內存單元之前變化,相當于前面常數偏移變址尋址。后遞增或后遞減指令——用變址寄存器中的初值訪問內存單元,然后才改變變址寄存器中的內容。【指令組成】(前導字符$18)+1個操作碼字節+1個后置字節

后置字節基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.3.6變址尋址(IndexedAddressing,IDX)3.3.6.2自動遞增/遞減變址尋址IDX(Autoincrement/AutodecrementIndexedAddressing)

STAA1,-SP ;(SP)-1→SP,(A)→(SP),=PSHASTX2,-SP ;(SP)-2→SP,(XH:XL)→MSP:MSP+1,=PSHXLDX2,SP+ ;(MSP:MSP+1)→XH:XL,(SP)+2→SP,=PULXLDAA1,SP+ ;(MSP)→A,(SP)+1→SP,=PULA自動遞增/自動遞減變址尋址方式可以用來對存儲器中的一系列數據結構進行操作。例如:將X寄存器指向的寬度為4字節的列表中數據傳給Y寄存器指向的寬度為2字節的列表中。

MOVW4,X+,2,Y+;(X:X+1)→Y:Y+1,X+4→X,Y+2→Y從表元素為1個字的列表中傳送1個字的數據到每個表元素為4個字節的另一個表格中:

MOVW2,X+,4,+Y基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.3.6變址尋址(IndexedAddressing,IDX)3.3.6.3累加器偏移變址尋址IDX(AccumulatorOffsetIndexedAddressing)【累加器偏移變址尋址】變址寄存器中的內容與累加器中的無符號偏移量相加,構成有效地址。偏移量必須先置于累加器中,累加器可以是A、B、D。語法:operationA,r;偏移量在A中operationB,r;偏移量在B中operationD,r;偏移量在D中A、B、D-累加器(偏移寄存器);r-變址寄存器(X、Y、SP、PC)。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.3.6變址尋址(IndexedAddressing,IDX)3.3.6.3累加器偏移變址尋址IDX(AccumulatorOffsetIndexedAddressing)【累加器偏移變址尋址指令組成】操作碼+1個后置字節例:LDAAB,X ;(B+X)→A例:LDY#SEG_TBL;SEG_TBL→YLDAADisp_Var;(Disp_Var)→A

LDAAA,Y;(A+Y)→ASTAADISP_REG;A→DISP_REGSEG_TBL——顯示段碼表首地址Disp_Var——被轉換的數字、字母DISP_REG——顯示緩沖區地址基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.3.6變址尋址(IndexedAddressing,IDX)3.3.6.4間接變址尋址(IndirectIndexedAddressing)【寄存器間接尋址】操作數地址以寄存器名稱的形式間接給出。【間接變址尋址】變址寄存器中的內容與一個16位偏移量相加形成一個地址,但該地址并不是操作數的地址,它所指向的地址單元中的內容才是操作數的有效地址。偏移量既可以是一個16位的常數偏移量,也可以是累加器中的內容。指令語法:

operation[D,r];偏移量在累加器D中

operation[n,r];n是16位常數偏移量

D-含有偏移量的寄存器D;n-16位常數偏移量;r-變址寄存器(X、Y、SP、PC)。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.3尋址方式3.3.6變址尋址(IndexedAddressing,IDX)3.3.6.4間接變址尋址(IndirectIndexedAddressing)指令操作碼之后需要一個后置字節,用來規定偏移量的來源和變址寄存器的名稱。對于常數偏移量的方式,后置字節之后還需要跟兩個擴展字節,用于存放16位偏移量常數。后置字節編碼:

基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.3.6變址尋址(IndexedAddressing,IDX)3.3.6.4間接變址尋址(IndirectIndexedAddressing)A、16位常數偏移間接變址尋址[IDX2](16-BitConstantIndirectIndexedAddressing)將由指令提供的16位偏移量與基址變址寄存器(baseindexingregister)的內容相加,形成一個地址(指針),指向一個存放操作數地址的單元。指令執行時,根據由基址和偏移量所形成的地址指針,首先到指定的地址單元中取得操作數地址,然后再根據操作數地址提取操作數。有效地址為:

effectiveaddress=((twooffsetextensionbytes)+(X、Y、SPorPC))為了將這種尋址方式與16位常數偏移變址尋址方式加以區別,在指令助記符的操作數部分,用一個方括號括起來。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.3.6變址尋址(IndexedAddressing,IDX)3.3.6.4間接變址尋址(IndirectIndexedAddressing)A、16位常數偏移間接變址尋址[IDX2](16-BitConstantIndirectIndexedAddressing)例:設指令執行前X=$1000,($100A)=$20,($100B)=$00,($2000)=$3A,($2001)=$1F。比較以下兩條指令的執行情況:LDAA$000A,X ;((X)+$0A)→ALDAA[$000A,X];(((X)+$000A))→A基于HCS12的嵌入式系統設計》第3章CPU12指令系統A、16位常數偏移間接變址尋址[IDX2](16-BitConstantIndirectIndexedAddressing)例:讀取一個轉移表中的地址,并根據該地址轉向相應的子程序。

JMPTBLEQU$1000CMD10FFEQU2

操作碼指令操作CE1000LDX#JMPTBL;JMPTBL→X

5E7JSR[D,X] ;((D+X))→PC15E30002JSR[CMD10FF,X];((CMD10FF+X))→PC基于HCS12的嵌入式系統設計》第3章CPU12指令系統B、累加器D間接變址尋址[D,IDX](AccumulatorDIndexed-IndirectAddressing)將累加器D中的內容+基址寄存器的內容,形成一個地址指針,指向存放操作數地址的存儲單元。指令執行時,根據基址寄存器和偏移寄存器D中的內容形成一個地址,到該地址單元中找到操作數地址,再由操作數地址取得操作數。有效地址:

effectiveaddress=((D)+(X,Y,SPorPC))為了把這種尋址方式與累加器D偏移變址尋址方式區別開來,用一個方括號將指令助記符的操作數部分括起來。例:設D=$0002JMP[D,PC]GO1DC.WPLACE1GO2DC.WPLACE2

GO3DC.WPLACE3基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.4S12匯編指令系統按指令助記符分類,S12共有169種不同的匯編指令。考慮到不同類型的尋址方式,指令數量達594種。按照指令功能,可將指令分為以下幾大類:數據傳送指令、算術運算指令、邏輯運算指令、轉移與子程序調用指令、中斷指令、MCU控制指令、高級函數指令、模糊運算指令等。3.4.1數據傳送指令數據傳送指令將數據從一處復制到另一處,包括:立即加載、寄存器之間的傳送與交換、內存傳送到寄存器、寄存器傳送到內存、內存之間的傳送和堆棧操作指令等。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.4S12匯編指令系統3.4.1數據傳送指令3.4.1.1寄存器加載指令寄存器加載指令用于將立即數或內存中的操作數傳送給寄存器,共6條指令,每條指令支持8種源操作數尋址方式,派生出48條指令。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.4S12匯編指令系統3.4.1數據傳送指令3.4.1.1寄存器加載指令LDAA#$5A ;$5A→A,立即尋址IMMLDAB$4000 ;($4000)→B,擴展尋址EXTLDD 4,X ;((X)+4):((X)+4+1)→A:B,

5位常數偏移量變址尋址IDXLDX A,PC ;((PC)+(A)):((PC)+(A)+1)→XH:XL,累加器偏移變址尋址IDXLDS [$1238,X] ;16位常數偏移量間接變址尋址[IDX2]LDY 2,SP+ ;相當于PULY,自動遞增變址尋址IDX基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.4S12匯編指令系統3.4.1數據傳送指令3.4.1.2有效地址加載指令有效地址加載指令可以用來將操作數地址分別傳送到寄存器SP、X和Y中。共3條指令,采用3種變址尋址。指令可將SP、PC、X或Y的值加/減5位、9位或16位常數,或者加上A、B或D的內容,傳送到寄存器SP、X和Y中。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.4S12匯編指令系統3.4.1數據傳送指令3.4.1.2有效地址加載指令例:LEAS4,SP ;(SP)+4→SP,

5位常數偏移量變址尋址IDXLEAS$0200,SP ;(SP)+$0200→SP,

16位常數偏移量變址尋址IDX2LEAXB,Y ;(Y)+(B)→X,累加器偏移變址尋址IDX注意以下兩條指令LEAX4,+X ;X+4→X,(X)→X,自動遞增變址尋址IDXLEAX4,X+ ;(X)→X基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.4S12匯編指令系統3.4.1數據傳送指令3.4.1.3寄存器存儲指令僅限于將寄存器內容送入內存單元,共6條指令,每條指令支持7種源操作數尋址方式。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.4S12匯編指令系統3.4.1數據傳送指令3.4.1.3寄存器存儲指令例如:STAA $5A ;直接尋址DIRSTAB $4000,X ;16位偏移量變址尋址IDX2STX $D000 ;擴展尋址EXTSTS [D,PC] ;累加器D間接變址尋址[D,IDX]STY 2,-SP ;相當于PSHY,自動遞減變址尋址IDX基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.4.1數據傳送指令3.4.1.4寄存器數據傳送指令將源寄存器的內容傳送到目的寄存器,共9條指令,均為固有尋址方式。實際上該組指令只有3條,其余指令由匯編程序自動匯編成對應的TFR指令,如表中陰影部分所示。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.4.1數據傳送指令3.4.1.4寄存器數據傳送指令【TFR指令的數據傳送規則】8位到8位或16位到16位,直接傳送;8位到16位,通過符號擴展變成16位后傳送;TFRA,X=SEXA,X16位到8位,舍棄高位,只傳送低位。【說明】數據從8位寄存器傳送到16位寄存器,8位寄存器的內容傳送到16位寄存器的低8位,CPU12自動在目的寄存器的最高有效字節中執行一次符號擴展。【符號擴展的原則】如果8位寄存器的最高位是0,則16位寄存器的高8位為$00;如果8位寄存器的最高位是1,則16位寄存器的高8位為$FF。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.4S12匯編指令系統3.4.1數據傳送指令3.4.1.5寄存器數據交換指令將源寄存器內容與目的寄存器內容進行交換,共3條指令,均為固有尋址方式。實際上該組指令只有1條EXG指令,XGDX和XGDY指令由匯編程序自動匯編成對應的EXG指令。【注】R1和R2分別是寄存器A、B、CCR、D、X、Y、SP、TMP2、TMP3之一。但TMP3只能作為第1操作數寄存器,TMP2只能作為第2操作數寄存器。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.4S12匯編指令系統3.4.1數據傳送指令3.4.1.5寄存器數據交換指令【功能】在任意16位或8位寄存器之間交換數據規則:(1)8位8位或16位16位,直接交換;(2)8位16位,將8位寄存器內容高8位零擴展成16位后,傳送到16位寄存器,16位寄存器的低8位傳送到8位寄存器;(3)16位8位,16位寄存器的低8位傳送到8位寄存器,8位寄存器高8位補$00或$FF后,傳送到16位寄存器。其中8位寄存器是A時,高8位補$00;8位寄存器是B或CCR時,高8位補$FF。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.4S12匯編指令系統3.4.1數據傳送指令3.4.1.6內存數據移動指令【功能】將源操作數(一個字或字節)送到目地地址,源操作數不變。這是CPU12僅有的兩條不涉及內部寄存器而直接進行內存單元之間數據傳送的指令,支持6種尋址方式。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.4S12匯編指令系統3.4.1數據傳送指令3.4.1.7堆棧操作指令CPU12堆棧操作僅限于寄存器與堆棧之間的數據傳送,使用堆棧指針SP進行間接尋址。堆棧操作分為進棧和出棧兩種,操作循序正好相反,即指針先遞減,后壓棧;先彈出,指針后遞增。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.4S12匯編指令系統3.4.2算術運算指令3.4.2.1加法指令CPU12加法運算分為兩類,一類是兩個寄存器內容的加法,另一類是寄存器內容與立即數或內存單元內容的加法,運算結果保存在寄存器中。所有加法指令都影響標志位。【寄存器之間的加法】基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.4S12匯編指令系統3.4.2算術運算指令3.4.2.1加法指令【寄存器與立即數或內存單元的加法】共有5條指令。2條帶進位的加法指令,3條不帶進位的加法指令。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.4.2.2減法指令CPU12減法運算也分為兩類,一類是兩個寄存器內容的減法,另一類是寄存器內容與立即數或內存單元內容的減法,運算結果保存在寄存器中,所有減法指令都影響標志位。兩個寄存器內容的減法指令為SBA,結果存放在A中。寄存器與立即數或內存單元的減法共有5條指令,2條為帶借位的減法指令,3條為不帶借位的減法指令。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.4S12匯編指令系統3.4.2算術運算指令3.4.2.3加1和減1指令加1和減1指令用于指針調整或循環控制,每組有6條指令,操作對象是寄存器A、B、X、Y、SP或內存單元。對內存單元的操作支持6種尋址方式,INS和DES指令由匯編程序自動匯編成對應的LEAS指令,為變址尋址IDX方式。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.4S12匯編指令系統3.4.2算術運算指令3.4.2.4十進制調整指令CPU12只有1條十進制調整指令DAA,根據標志H、C和A中數值的大小做BCD調整,調整規則是:(1)如果A中的低4位>9或標志H=1,則A=A+$06;(2)如果A中的高4位>9或標志C=1,則A=A+$60,同時重置標志C。例:十進制運算7527+1075=8602基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.4S12匯編指令系統3.4.2算術運算指令3.4.2.5清零指令【功能】向寄存器或內存單元中寫入$00,與加載立即數$00的指令功能相同,共有3條指令。寄存器清零只針對A和B,為固有尋址方式。內存單元清零指令支持6種尋址方式。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.4S12匯編指令系統3.4.2算術運算指令3.4.2.6符號擴展指令單字節無符號數通過高位補0可以擴展成任意寬度,而對于有符號數,由于采用補碼表示,高位可能需要補0或補1。符號擴展指令SEX為固有尋址方式。【符號擴展方法】將原數據符號位復制到已擴展數據的所有高位。指令要求源操作數是A、B或CCR中的內容,擴展后的結果存放在D、X、Y或SP中。【指令格式】SEXR1,R2;R1=A、B或CCR,R2=D、X、Y或SP,相當于TFRR1,R2基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.4S12匯編指令系統3.4.2算術運算指令3.4.2.7乘法指令S12乘法全部在寄存器內完成,可以實現兩個8位或16位的硬件乘法運算,共有3條指令,均為固有尋址方式。EMUL和EMULS指令的區別在于,EMULS指令的結果用補碼表示。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.4.2算術運算指令3.4.2.8除法指令除法全部在寄存器內完成,可以實現16/16位或32/16位的硬件除法運算。EDIV和EDIVS為常規32/16除法指令,分別按無符號數和有符號數相除。FDIV是小數除法指令,即求真分數D/X的值。IDIV和IDIVS分別是無符號和有符號整數16/16除法指令,區別在于IDIVS指令的商和余數用補碼表示。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.4.2算術運算指令3.4.2.9比較指令【功能】將寄存器的內容與立即數或內存單元的內容進行比較,實際上是進行兩個操作數的減法運算,并不回送運算結果,只是根據差值設置相應的狀態位,作為跳轉、循環等的判斷條件。這類指令影響標志位N、Z、V、C。比較指令共有7條,除CBA為固有尋址方式外,其余6條指令允許使用8種尋址方式。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.4S12匯編指令系統3.4.2算術運算指令3.4.2.10測試指令【作用】檢測累加器A、B或內存單元的內容是否≥0。相當于一次減0操作。操作后,源操作數不變,也不保存結果,只是根據結果設置標志位。該類指令有3條,TSTA和TSTB為固有尋址,TST允許使用6種尋址方式。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.4.3邏輯運算指令【邏輯運算指令】包括基本邏輯運算、取反和求補、移位、位操作、位邏輯運算和位測試等指令。3.4.3.1基本邏輯運算指令按字節進行“與”、“或”、“異或”邏輯運算,用于將寄存器中的某些位清0或置1,共有8條指令。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.4.3邏輯運算指令3.4.3.2取反、求補指令【功能】將累加器A、B或內存單元內容取反和求補,結果放回原處。【取反指令】相當于執行一次$FF-(r)或$FF-(M)操作。【求補指令】實際上進行一次$00-(r)或$00-(M)的減法操作。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.4.3.3位操作與位測試指令【位操作指令】5條,用于將內存單元中的某1位或某幾位清0或置1。其中,CCR特征位操作指令CLC、CLI、CLV匯編程序自動匯編成ANDCC指令,為立即尋址方式。內存單元清0、置1指令BCLR和BSET支持5種尋址方式。【位測試指令】有2條,支持8種尋址方式。位測試指令將累加器A、B內容與立即數或內存單元內容進行“邏輯與”運算,但結果并不回送,僅僅根據運算結果設置標志位N、Z、V。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.4.3邏輯運算指令3.4.3.4邏輯移位指令【邏輯移位指令】共有8條,分為邏輯左移LSL和邏輯右移LSR兩種。其中,針對累加器A、B、D的操作為固有尋址,針對內存單元的操作支持6種尋址方式。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.4S12匯編指令系統3.4.3邏輯運算指令3.4.3.5算術移位指令【算術移位指令】共有7條,分為算術左移ASL和算術右移ASR兩種。其中,針對累加器A、B、D的操作為固有尋址,針對內存單元的操作支持6種尋址方式。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.4S12匯編指令系統3.4.3邏輯運算指令3.4.3.6循環移位指令【循環移位指令】共有6條,分為循環左移ROL和循環右移ROR兩種。其中,針對累加器A、B的操作為固有尋址,針對內存單元的操作支持6種尋址方式。基于HCS12的嵌入式系統設計》第3章CPU12指令系統【例】閱讀該程序段,要求:1)說明程序的功能。2)寫出程序執行后涉及到的寄存器和內存單元的最后結果。程序運行前,($3800)=$36。LDX #$3800 ;數據地址LDAB 0,X ;((X))→B,B=$36TFR B,A ;保存到A中,A=$36ANDA #$0F ;屏蔽A中高4位,A=$06STAA1,X ;(A)→(X)+1=$3801,($3801)=$06LSRB ;B內容右移4次,高位補0LSRB ;LSRB ;LSRB ;B=$03STAB 0,X ;(B)→X,($3800)=$03HERE:BRAHERE ;原地踏步【程序功能】將地址$3800存放的壓縮BCD碼解壓縮,存放在$3800:$3801單元中,高位在低地址單元。【程序執行后】($3800)=$03,($3801)=$06,A=$06,B=$03。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.4S12匯編指令系統3.4.4高級函數指令CPU12的高級函數指令具有高級語言中某些函數的功能,如求最大值、最小值,乘積累加,內插值運算等。3.4.4.1求最大值、最小值指令求最大值、最小值共有8條指令,用于在累加器A、D與內存操作數之間取最大或最小的一個。求最大值和最小值分別有4條指令,支持5種尋址方式。其中,以字母M開頭的4條為8位指令,以字母E開頭的4條為16位指令。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.4.4高級函數指令3.4.4.1求最大值、最小值指令指令自動完成數據的比較和傳送,標志位顯示比較的結果和是否發生了數據傳送。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.4S12匯編指令系統3.4.4高級函數指令3.4.4.2乘積累加指令【作用】多項式運算乘積累加指令只有1條EMACS,采用特殊尋址方式。可實現帶符號數的16位乘法和32位累加運算,隱含使用寄存器X和Y,指令功能為:

EMACSopr16a;(M(X):M(X+1))(M(Y)):M(Y+1))+(M~M+3)→M~M+3【操作過程】先將X和Y所指向的兩個16位內存操作數相乘,然后將32位乘積與一個擴展尋址的32位內存操作數相加,結果仍然保存在該地址。【要求】兩個乘數及32位內存被加數均為有符號數。基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.4S12匯編指令系統3.4.4高級函數指令3.4.4.3查表與插值指令【查表與插值指令】有2條,采用變址尋址IDX方式。TBL為8位內插值操作,結果保存在累加器A中;ETBL為16位內插值操作,結果保存在累加器D中。【指令功能】TBLoprx0_xysppc

;(M)+{(B)[(M+1)-(M)]}→AETBLoprx0_xysppc

;(M:M+1)+{(B)[(M+2:M+3)-(M:M+1)]}→D【計算公式】基于HCS12的嵌入式系統設計》第3章CPU12指令系統3.4S12匯編指令系統3.4.5程序控制指令【作用】通過改變程序計數器PC的內容,使CPU從正常的執行順序改變到不同的程序流程。程序控制指令分為轉移和調用兩大類轉移——永久轉移(跳轉),不再返回。調用——執行完新的任務后,返回原地繼續執

溫馨提示

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

評論

0/150

提交評論