版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
基于HCS12的嵌入式系統(tǒng)設(shè)計合肥工業(yè)大學(xué)機械與汽車工程學(xué)院滕勤2014.4第3章CPU12指令系統(tǒng)本章內(nèi)容
3.1概述
3.2CPU12匯編指令的格式和符號說明
3.3尋址方式(AddressingMode)
3.4S12匯編指令系統(tǒng)基于HCS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.1概述【基本概念回顧】【指令】計算機能直接識別和執(zhí)行的命令,即每個有效的二進制編碼組?!局噶钕到y(tǒng)(InstructionSystem)】一種計算機CPU所能執(zhí)行的全部指令的集合?!局噶畛绦蚧驒C器語言】由指令碼(機器碼)組成的程序。【指令助記符(instructionmnemonicsymbol)】用一組有一定含義的字符表示的指令,一般采用相關(guān)的英文單詞縮寫。【匯編語言源程序】利用指令助記符編寫的程序?!静僮鞔a(OperatingCode,Opcode)】規(guī)定一條指令完成何種操作?!静僮鲾?shù)(Operand)】指令所完成操作的對象?;贖CS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.2CPU12匯編指令的格式和符號說明
[標號]操作碼[操作數(shù)1],[操作數(shù)2][;注釋]3.2.1操作碼和操作數(shù)【CPU12指令組成】(前導(dǎo)字節(jié))+操作碼(+后隨字節(jié)+擴展字節(jié))位于第二頁的操作碼之前均冠以前導(dǎo)字節(jié)(prebyte)$18。【后置字節(jié)作用】提供了一定形式的變址尋址、傳送、交換和循環(huán)的基址寄存器和偏移量的符號等信息?!緮U展字節(jié)作用】包含有附加的程序信息,例如地址、偏移量和立即數(shù)等。基于HCS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.2CPU12匯編指令的格式和符號說明3.2.2數(shù)據(jù)類型CPU12支持8種數(shù)據(jù)類型:位數(shù)據(jù)(1位);5位帶符號整數(shù);8位帶/無符號整數(shù);字節(jié)型組合BCD數(shù)(8位);9位帶符號整數(shù);16位帶/無符號整數(shù);16位有效地址;32位帶/無符號整數(shù)。3.2.3數(shù)據(jù)表示方法十進制整數(shù)可直接使用;16進制數(shù)在數(shù)字前面加“$”;二進制數(shù)前加“%”;立即數(shù)應(yīng)在數(shù)據(jù)前加“#”?;贖CS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.2CPU12匯編指令的格式和符號說明3.2.4寄存器和存儲器表示法【寄存器表示法】寄存器用名稱表示,不分大小寫;M(Memorylocation)表示由指令有效地址指向的8位存儲單元;R(Result)表示算術(shù)或邏輯運算結(jié)果;I(Intermediateresult)表示算術(shù)或邏輯運算的中間結(jié)果。寄存器和存儲器符號加下標“n”時,表示是它的第n位;16位寄存器符號后加下標“H”或“L”時,表示其高位字節(jié)或低位字節(jié)。基于HCS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)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)表示兩個相鄰存儲單元的內(nèi)容組成的1個字,(M)為高位字節(jié),(M+1)為低位字節(jié);符號()表示內(nèi)容,如M(X)、M(SP)分別是由變址寄存器X和堆棧指針SP所指向的存儲單元,M(y+3)是由變址寄存器Y+3后指向的存儲單元。基于HCS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.3尋址方式【尋址】尋找操作數(shù)地址的過程。【有效地址】(EffectiveAddress):操作數(shù)所在的地址?!緦ぶ贩绞健?AddressingMode):通過確定操作數(shù)所在的位置(地址),提取操作數(shù)的方法。CPU12共有6類尋址方式,即固有尋址、立即尋址、直接尋址、擴展尋址、相對尋址和變址尋址?;贖CS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.3.1隱含/固有尋址(InherentAddressing,INH)【固有尋址】有效地址包含在操作碼中,也稱為隱含尋址(Impliedaddressing),又因為操作數(shù)總是處于CPU的寄存器之中,還稱為寄存器尋址(Registeraddressing)?!咎卣鳌吭谥噶钪浄谐霈F(xiàn)寄存器的名稱,有時甚至連寄存器的名稱都不出現(xiàn)。
機器碼指令操作187CLRA;$00→A251COMB;(/B)→B312MUL;(A)(B)=A:B→D41816SBA;(A)-(B)→A基于HCS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.3尋址方式3.3.2立即尋址(ImmediateAddressing,IMM)【立即尋址】指令的操作數(shù)是一個8位或16位二進制數(shù)?!玖⒓磾?shù)】指令中出現(xiàn)的操作數(shù)。為了與直接地址相區(qū)別,立即數(shù)前必須加“#”號。立即尋址常用來給寄存器賦值。
MAXCNTequ13
INITSPequ$02FF機器碼指令操作1860DLDAA #MAXCNT ;$0D→A2CF02FFLDS #INITSP ;$02FF→SP3CE1234LDX #$1234 ;$1234→X48A0BORAA #%00001011 ;(A)|$0B→A基于HCS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.3.3直接尋址(DirectAddressing,DIR)【直接尋址】指令中直接給出操作數(shù)地址的尋址方式。
機器碼指令操作9655LDAA$55;($0055)→ADC20LDX$20;($0020:$0021)→X3.3.4擴展尋址(ExtendedAddressing,EXT)【擴展尋址】指令中直接給出操作數(shù)完整16位地址的尋址方式。STAA $3050 ;(A)→$3050
機器碼指令 操作:($0040)→AB60040LDAA$0040 ;使用擴展尋址 B60040LDAA>$40 ;強制使用擴展尋址基于HCS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.3尋址方式3.3.5相對尋址(RelativeAddressing,REL)相對尋址只出現(xiàn)在相對轉(zhuǎn)移指令(relativebranchinstruction)中?!鞠鄬ぶ贰慨斍暗腜C值加上指令中規(guī)定的地址偏移量relx,構(gòu)成操作數(shù)實際地址的尋址方式。目的地址=源地址+轉(zhuǎn)移指令字節(jié)數(shù)+relx【源地址】轉(zhuǎn)移指令所在的地址【目的地址】轉(zhuǎn)移程序所在的首地址偏移量為8位、9位和16位帶符號二進制補碼。短轉(zhuǎn)移的偏移量為$80~$7F(-128~+127);循環(huán)控制指令支持9位偏移量,其數(shù)值為$100~$0FF(-256~+255);長轉(zhuǎn)移的偏移量為$8000~$7FFF(-32768~32767)?;贖CS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.3尋址方式3.3.5相對尋址(RelativeAddressing,REL)如果偏移量為0,則CPU立即執(zhí)行緊接著轉(zhuǎn)移指令的下一條指令。由于偏移量是在轉(zhuǎn)移指令的末尾,采用負的偏移量值可以使PC指向操作碼并開始循環(huán)。機器碼指令 操作20FETRAPBRATRAP ;PC-2→PC TRAPLBRATRAP ;PC-3→PC程序利用轉(zhuǎn)移指令返回到指令首址,程序在該行落入陷阱,稱為“原地踏步”。這是一種終止程序的普通方法,廣泛用于程序調(diào)試?;贖CS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.3尋址方式3.3.6變址尋址(IndexedAddressing,IDX)變址尋址是CPU12的主要尋址方式,也是本節(jié)的重點和難點。【變址尋址】以某個寄存器的內(nèi)容為基本地址,然后在這個基本地址上加上地址偏移量,形成操作數(shù)地址或存放操作數(shù)地址的地址,并將這個地址單元的內(nèi)容作為指令的操作數(shù)。CPU12共有4類不同的變址尋址方式,這4類又可進一步分解成12種不同的變址尋址方式。基于HCS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.3尋址方式3.3.6變址尋址(IndexedAddressing,IDX)【變址尋址指令組成】1個操作碼字節(jié)+1個后置(隨)字節(jié)(postbyte)+0~2個擴展字節(jié)(extensionbyte)?!静僮鞔a】表明指令功能和變址尋址方式?!竞笾米止?jié)】(在指令代碼表中用xb描述)提供變址尋址方式的具體信息,如所使用的變址寄存器、偏移量的符號、變址寄存器的自動遞增/遞減方式等。當偏移量大于5位二進制數(shù)時,需要采用擴展字節(jié),用來表示偏移量的大小。所有變址尋址方式都采用一個16位寄存器和附加信息來產(chǎn)生一個有效地址?;贖CS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.3.6變址尋址(IndexedAddressing,IDX)3.3.6.1常數(shù)偏移變址尋址(ConstantOffsetIndexedAddressing)【常數(shù)偏移變址尋址】將變址寄存器的內(nèi)容加上一個常數(shù)形成操作數(shù)地址。有三種不同的偏移量:5位、9位和16位。語法:operation,r;無偏移operation0,r;無偏移operationn,r;正常數(shù)偏移量operation-n,r;負常數(shù)偏移量
r是變址寄存器(IX,IY,SP,PC),n/-n是帶符號偏移量(5位、9位、16位)?;贖CS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.3.6變址尋址(IndexedAddressing,IDX)3.3.6.1常數(shù)偏移變址尋址(ConstantOffsetIndexedAddressing)A、5位常數(shù)偏移變址尋址IDX(5-BitConstantOffsetIndexedAddressing)【指令組成】1個操作碼字節(jié)+1個后置字節(jié)偏移量為5位帶符號數(shù),偏移量大小為:-16~+15,5位偏移量隱含在后隨字節(jié)中,有效地址=變址寄存器內(nèi)容+5位地址偏移量。例如:若X=$1000,Y=$2000LDAA0,X ;($1000)→ASTAB-8,Y ;(B)→$1FF8,$2000-$8=$1FF8基于HCS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.3.6變址尋址(IndexedAddressing,IDX)3.3.6.1常數(shù)偏移變址尋址(ConstantOffsetIndexedAddressing)B、9位常數(shù)偏移變址尋址IDX1(9-BitConstantOffsetIndexedAddressing)【指令組成】1個操作碼字節(jié)+1個后置字節(jié)+1個擴展字節(jié)。9位帶符號偏移量的地址偏移范圍:-256~+255,偏移量的符號位在后隨字節(jié)中,偏移量大小在擴展字節(jié)中,操作數(shù)地址=變址寄存器內(nèi)容+9位帶符號常數(shù)偏移量。例如:X=$1000,Y=$2000LDAA$FF,X;($10FF)→A($1000+$FF=$10FF)
LDAB-20,Y;($1FEC)→B($2000-$14=$1FEC)基于HCS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.3.6變址尋址(IndexedAddressing,IDX)3.3.6.1常數(shù)偏移變址尋址(ConstantOffsetIndexedAddressing)C、16位常數(shù)偏移變址尋址IDX2(16-BitConstantOffsetIndexedAddressing)【指令組成】1個字節(jié)操作碼+1個后置字節(jié)+2個擴展字節(jié)。有效地址=變址寄存器內(nèi)容+兩個偏移量擴展字節(jié)。可以訪問64KB地址空間中的任何單元。
LDAA$04,X ;($04+X)→ALDD$10,Y ;($10+Y):($10+Y+1)→DLDAA$1000,PC ;($1000+PC)→A基于HCS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.3.6變址尋址(IndexedAddressing,IDX)3.3.6.2自動遞增/遞減變址尋址IDX(Autoincrement/AutodecrementIndexedAddressing)在CPU12的變址尋址方式中,提供了4種方法自動改變基址寄存器的內(nèi)容,并作為指令執(zhí)行的一部分。變址尋址前或變址尋址后,變址寄存器中的數(shù)值可以加上或減去一個整數(shù)值,增加值的范圍是0000~0111(+1~+8),減少值范圍是1111~1000(-1~-8)。匯編指令語法:
operationn,+r;先遞增operationn,r+;后遞增operationn,-r;先遞減operationn,r-;后遞減n=調(diào)節(jié)值,1≤n≤8,r=變址寄存器(IX,IY,SP)?;贖CS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.3.6變址尋址(IndexedAddressing,IDX)3.3.6.2自動遞增/遞減變址尋址IDX(Autoincrement/AutodecrementIndexedAddressing)先遞增或先遞減指令——變址寄存器內(nèi)容在訪問內(nèi)存單元之前變化,相當于前面常數(shù)偏移變址尋址。后遞增或后遞減指令——用變址寄存器中的初值訪問內(nèi)存單元,然后才改變變址寄存器中的內(nèi)容?!局噶罱M成】(前導(dǎo)字符$18)+1個操作碼字節(jié)+1個后置字節(jié)
后置字節(jié)基于HCS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)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自動遞增/自動遞減變址尋址方式可以用來對存儲器中的一系列數(shù)據(jù)結(jié)構(gòu)進行操作。例如:將X寄存器指向的寬度為4字節(jié)的列表中數(shù)據(jù)傳給Y寄存器指向的寬度為2字節(jié)的列表中。
MOVW4,X+,2,Y+;(X:X+1)→Y:Y+1,X+4→X,Y+2→Y從表元素為1個字的列表中傳送1個字的數(shù)據(jù)到每個表元素為4個字節(jié)的另一個表格中:
MOVW2,X+,4,+Y基于HCS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.3.6變址尋址(IndexedAddressing,IDX)3.3.6.3累加器偏移變址尋址IDX(AccumulatorOffsetIndexedAddressing)【累加器偏移變址尋址】變址寄存器中的內(nèi)容與累加器中的無符號偏移量相加,構(gòu)成有效地址。偏移量必須先置于累加器中,累加器可以是A、B、D。語法:operationA,r;偏移量在A中operationB,r;偏移量在B中operationD,r;偏移量在D中A、B、D-累加器(偏移寄存器);r-變址寄存器(X、Y、SP、PC)?;贖CS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.3.6變址尋址(IndexedAddressing,IDX)3.3.6.3累加器偏移變址尋址IDX(AccumulatorOffsetIndexedAddressing)【累加器偏移變址尋址指令組成】操作碼+1個后置字節(jié)例: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——被轉(zhuǎn)換的數(shù)字、字母DISP_REG——顯示緩沖區(qū)地址基于HCS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.3.6變址尋址(IndexedAddressing,IDX)3.3.6.4間接變址尋址(IndirectIndexedAddressing)【寄存器間接尋址】操作數(shù)地址以寄存器名稱的形式間接給出?!鹃g接變址尋址】變址寄存器中的內(nèi)容與一個16位偏移量相加形成一個地址,但該地址并不是操作數(shù)的地址,它所指向的地址單元中的內(nèi)容才是操作數(shù)的有效地址。偏移量既可以是一個16位的常數(shù)偏移量,也可以是累加器中的內(nèi)容。指令語法:
operation[D,r];偏移量在累加器D中
operation[n,r];n是16位常數(shù)偏移量
D-含有偏移量的寄存器D;n-16位常數(shù)偏移量;r-變址寄存器(X、Y、SP、PC)。基于HCS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.3尋址方式3.3.6變址尋址(IndexedAddressing,IDX)3.3.6.4間接變址尋址(IndirectIndexedAddressing)指令操作碼之后需要一個后置字節(jié),用來規(guī)定偏移量的來源和變址寄存器的名稱。對于常數(shù)偏移量的方式,后置字節(jié)之后還需要跟兩個擴展字節(jié),用于存放16位偏移量常數(shù)。后置字節(jié)編碼:
基于HCS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.3.6變址尋址(IndexedAddressing,IDX)3.3.6.4間接變址尋址(IndirectIndexedAddressing)A、16位常數(shù)偏移間接變址尋址[IDX2](16-BitConstantIndirectIndexedAddressing)將由指令提供的16位偏移量與基址變址寄存器(baseindexingregister)的內(nèi)容相加,形成一個地址(指針),指向一個存放操作數(shù)地址的單元。指令執(zhí)行時,根據(jù)由基址和偏移量所形成的地址指針,首先到指定的地址單元中取得操作數(shù)地址,然后再根據(jù)操作數(shù)地址提取操作數(shù)。有效地址為:
effectiveaddress=((twooffsetextensionbytes)+(X、Y、SPorPC))為了將這種尋址方式與16位常數(shù)偏移變址尋址方式加以區(qū)別,在指令助記符的操作數(shù)部分,用一個方括號括起來?;贖CS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.3.6變址尋址(IndexedAddressing,IDX)3.3.6.4間接變址尋址(IndirectIndexedAddressing)A、16位常數(shù)偏移間接變址尋址[IDX2](16-BitConstantIndirectIndexedAddressing)例:設(shè)指令執(zhí)行前X=$1000,($100A)=$20,($100B)=$00,($2000)=$3A,($2001)=$1F。比較以下兩條指令的執(zhí)行情況:LDAA$000A,X ;((X)+$0A)→ALDAA[$000A,X];(((X)+$000A))→A基于HCS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)A、16位常數(shù)偏移間接變址尋址[IDX2](16-BitConstantIndirectIndexedAddressing)例:讀取一個轉(zhuǎn)移表中的地址,并根據(jù)該地址轉(zhuǎn)向相應(yīng)的子程序。
JMPTBLEQU$1000CMD10FFEQU2
操作碼指令操作CE1000LDX#JMPTBL;JMPTBL→X
5E7JSR[D,X] ;((D+X))→PC15E30002JSR[CMD10FF,X];((CMD10FF+X))→PC基于HCS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)B、累加器D間接變址尋址[D,IDX](AccumulatorDIndexed-IndirectAddressing)將累加器D中的內(nèi)容+基址寄存器的內(nèi)容,形成一個地址指針,指向存放操作數(shù)地址的存儲單元。指令執(zhí)行時,根據(jù)基址寄存器和偏移寄存器D中的內(nèi)容形成一個地址,到該地址單元中找到操作數(shù)地址,再由操作數(shù)地址取得操作數(shù)。有效地址:
effectiveaddress=((D)+(X,Y,SPorPC))為了把這種尋址方式與累加器D偏移變址尋址方式區(qū)別開來,用一個方括號將指令助記符的操作數(shù)部分括起來。例:設(shè)D=$0002JMP[D,PC]GO1DC.WPLACE1GO2DC.WPLACE2
GO3DC.WPLACE3基于HCS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.4S12匯編指令系統(tǒng)按指令助記符分類,S12共有169種不同的匯編指令。考慮到不同類型的尋址方式,指令數(shù)量達594種。按照指令功能,可將指令分為以下幾大類:數(shù)據(jù)傳送指令、算術(shù)運算指令、邏輯運算指令、轉(zhuǎn)移與子程序調(diào)用指令、中斷指令、MCU控制指令、高級函數(shù)指令、模糊運算指令等。3.4.1數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令將數(shù)據(jù)從一處復(fù)制到另一處,包括:立即加載、寄存器之間的傳送與交換、內(nèi)存?zhèn)魉偷郊拇嫫?、寄存器傳送到?nèi)存、內(nèi)存之間的傳送和堆棧操作指令等?;贖CS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.4S12匯編指令系統(tǒng)3.4.1數(shù)據(jù)傳送指令3.4.1.1寄存器加載指令寄存器加載指令用于將立即數(shù)或內(nèi)存中的操作數(shù)傳送給寄存器,共6條指令,每條指令支持8種源操作數(shù)尋址方式,派生出48條指令?;贖CS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.4S12匯編指令系統(tǒng)3.4.1數(shù)據(jù)傳送指令3.4.1.1寄存器加載指令LDAA#$5A ;$5A→A,立即尋址IMMLDAB$4000 ;($4000)→B,擴展尋址EXTLDD 4,X ;((X)+4):((X)+4+1)→A:B,
5位常數(shù)偏移量變址尋址IDXLDX A,PC ;((PC)+(A)):((PC)+(A)+1)→XH:XL,累加器偏移變址尋址IDXLDS [$1238,X] ;16位常數(shù)偏移量間接變址尋址[IDX2]LDY 2,SP+ ;相當于PULY,自動遞增變址尋址IDX基于HCS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.4S12匯編指令系統(tǒng)3.4.1數(shù)據(jù)傳送指令3.4.1.2有效地址加載指令有效地址加載指令可以用來將操作數(shù)地址分別傳送到寄存器SP、X和Y中。共3條指令,采用3種變址尋址。指令可將SP、PC、X或Y的值加/減5位、9位或16位常數(shù),或者加上A、B或D的內(nèi)容,傳送到寄存器SP、X和Y中?;贖CS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.4S12匯編指令系統(tǒng)3.4.1數(shù)據(jù)傳送指令3.4.1.2有效地址加載指令例:LEAS4,SP ;(SP)+4→SP,
5位常數(shù)偏移量變址尋址IDXLEAS$0200,SP ;(SP)+$0200→SP,
16位常數(shù)偏移量變址尋址IDX2LEAXB,Y ;(Y)+(B)→X,累加器偏移變址尋址IDX注意以下兩條指令LEAX4,+X ;X+4→X,(X)→X,自動遞增變址尋址IDXLEAX4,X+ ;(X)→X基于HCS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.4S12匯編指令系統(tǒng)3.4.1數(shù)據(jù)傳送指令3.4.1.3寄存器存儲指令僅限于將寄存器內(nèi)容送入內(nèi)存單元,共6條指令,每條指令支持7種源操作數(shù)尋址方式?;贖CS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.4S12匯編指令系統(tǒng)3.4.1數(shù)據(jù)傳送指令3.4.1.3寄存器存儲指令例如:STAA $5A ;直接尋址DIRSTAB $4000,X ;16位偏移量變址尋址IDX2STX $D000 ;擴展尋址EXTSTS [D,PC] ;累加器D間接變址尋址[D,IDX]STY 2,-SP ;相當于PSHY,自動遞減變址尋址IDX基于HCS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.4.1數(shù)據(jù)傳送指令3.4.1.4寄存器數(shù)據(jù)傳送指令將源寄存器的內(nèi)容傳送到目的寄存器,共9條指令,均為固有尋址方式。實際上該組指令只有3條,其余指令由匯編程序自動匯編成對應(yīng)的TFR指令,如表中陰影部分所示?;贖CS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.4.1數(shù)據(jù)傳送指令3.4.1.4寄存器數(shù)據(jù)傳送指令【TFR指令的數(shù)據(jù)傳送規(guī)則】8位到8位或16位到16位,直接傳送;8位到16位,通過符號擴展變成16位后傳送;TFRA,X=SEXA,X16位到8位,舍棄高位,只傳送低位?!菊f明】數(shù)據(jù)從8位寄存器傳送到16位寄存器,8位寄存器的內(nèi)容傳送到16位寄存器的低8位,CPU12自動在目的寄存器的最高有效字節(jié)中執(zhí)行一次符號擴展?!痉枖U展的原則】如果8位寄存器的最高位是0,則16位寄存器的高8位為$00;如果8位寄存器的最高位是1,則16位寄存器的高8位為$FF?;贖CS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.4S12匯編指令系統(tǒng)3.4.1數(shù)據(jù)傳送指令3.4.1.5寄存器數(shù)據(jù)交換指令將源寄存器內(nèi)容與目的寄存器內(nèi)容進行交換,共3條指令,均為固有尋址方式。實際上該組指令只有1條EXG指令,XGDX和XGDY指令由匯編程序自動匯編成對應(yīng)的EXG指令?!咀ⅰ縍1和R2分別是寄存器A、B、CCR、D、X、Y、SP、TMP2、TMP3之一。但TMP3只能作為第1操作數(shù)寄存器,TMP2只能作為第2操作數(shù)寄存器。基于HCS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.4S12匯編指令系統(tǒng)3.4.1數(shù)據(jù)傳送指令3.4.1.5寄存器數(shù)據(jù)交換指令【功能】在任意16位或8位寄存器之間交換數(shù)據(jù)規(guī)則:(1)8位8位或16位16位,直接交換;(2)8位16位,將8位寄存器內(nèi)容高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?;贖CS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.4S12匯編指令系統(tǒng)3.4.1數(shù)據(jù)傳送指令3.4.1.6內(nèi)存數(shù)據(jù)移動指令【功能】將源操作數(shù)(一個字或字節(jié))送到目地地址,源操作數(shù)不變。這是CPU12僅有的兩條不涉及內(nèi)部寄存器而直接進行內(nèi)存單元之間數(shù)據(jù)傳送的指令,支持6種尋址方式?;贖CS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.4S12匯編指令系統(tǒng)3.4.1數(shù)據(jù)傳送指令3.4.1.7堆棧操作指令CPU12堆棧操作僅限于寄存器與堆棧之間的數(shù)據(jù)傳送,使用堆棧指針SP進行間接尋址。堆棧操作分為進棧和出棧兩種,操作循序正好相反,即指針先遞減,后壓棧;先彈出,指針后遞增?;贖CS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.4S12匯編指令系統(tǒng)3.4.2算術(shù)運算指令3.4.2.1加法指令CPU12加法運算分為兩類,一類是兩個寄存器內(nèi)容的加法,另一類是寄存器內(nèi)容與立即數(shù)或內(nèi)存單元內(nèi)容的加法,運算結(jié)果保存在寄存器中。所有加法指令都影響標志位。【寄存器之間的加法】基于HCS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.4S12匯編指令系統(tǒng)3.4.2算術(shù)運算指令3.4.2.1加法指令【寄存器與立即數(shù)或內(nèi)存單元的加法】共有5條指令。2條帶進位的加法指令,3條不帶進位的加法指令?;贖CS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.4.2.2減法指令CPU12減法運算也分為兩類,一類是兩個寄存器內(nèi)容的減法,另一類是寄存器內(nèi)容與立即數(shù)或內(nèi)存單元內(nèi)容的減法,運算結(jié)果保存在寄存器中,所有減法指令都影響標志位。兩個寄存器內(nèi)容的減法指令為SBA,結(jié)果存放在A中。寄存器與立即數(shù)或內(nèi)存單元的減法共有5條指令,2條為帶借位的減法指令,3條為不帶借位的減法指令。基于HCS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.4S12匯編指令系統(tǒng)3.4.2算術(shù)運算指令3.4.2.3加1和減1指令加1和減1指令用于指針調(diào)整或循環(huán)控制,每組有6條指令,操作對象是寄存器A、B、X、Y、SP或內(nèi)存單元。對內(nèi)存單元的操作支持6種尋址方式,INS和DES指令由匯編程序自動匯編成對應(yīng)的LEAS指令,為變址尋址IDX方式。基于HCS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.4S12匯編指令系統(tǒng)3.4.2算術(shù)運算指令3.4.2.4十進制調(diào)整指令CPU12只有1條十進制調(diào)整指令DAA,根據(jù)標志H、C和A中數(shù)值的大小做BCD調(diào)整,調(diào)整規(guī)則是:(1)如果A中的低4位>9或標志H=1,則A=A+$06;(2)如果A中的高4位>9或標志C=1,則A=A+$60,同時重置標志C。例:十進制運算7527+1075=8602基于HCS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.4S12匯編指令系統(tǒng)3.4.2算術(shù)運算指令3.4.2.5清零指令【功能】向寄存器或內(nèi)存單元中寫入$00,與加載立即數(shù)$00的指令功能相同,共有3條指令。寄存器清零只針對A和B,為固有尋址方式。內(nèi)存單元清零指令支持6種尋址方式?;贖CS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.4S12匯編指令系統(tǒng)3.4.2算術(shù)運算指令3.4.2.6符號擴展指令單字節(jié)無符號數(shù)通過高位補0可以擴展成任意寬度,而對于有符號數(shù),由于采用補碼表示,高位可能需要補0或補1。符號擴展指令SEX為固有尋址方式。【符號擴展方法】將原數(shù)據(jù)符號位復(fù)制到已擴展數(shù)據(jù)的所有高位。指令要求源操作數(shù)是A、B或CCR中的內(nèi)容,擴展后的結(jié)果存放在D、X、Y或SP中?!局噶罡袷健縎EXR1,R2;R1=A、B或CCR,R2=D、X、Y或SP,相當于TFRR1,R2基于HCS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.4S12匯編指令系統(tǒng)3.4.2算術(shù)運算指令3.4.2.7乘法指令S12乘法全部在寄存器內(nèi)完成,可以實現(xiàn)兩個8位或16位的硬件乘法運算,共有3條指令,均為固有尋址方式。EMUL和EMULS指令的區(qū)別在于,EMULS指令的結(jié)果用補碼表示?;贖CS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.4.2算術(shù)運算指令3.4.2.8除法指令除法全部在寄存器內(nèi)完成,可以實現(xiàn)16/16位或32/16位的硬件除法運算。EDIV和EDIVS為常規(guī)32/16除法指令,分別按無符號數(shù)和有符號數(shù)相除。FDIV是小數(shù)除法指令,即求真分數(shù)D/X的值。IDIV和IDIVS分別是無符號和有符號整數(shù)16/16除法指令,區(qū)別在于IDIVS指令的商和余數(shù)用補碼表示?;贖CS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.4.2算術(shù)運算指令3.4.2.9比較指令【功能】將寄存器的內(nèi)容與立即數(shù)或內(nèi)存單元的內(nèi)容進行比較,實際上是進行兩個操作數(shù)的減法運算,并不回送運算結(jié)果,只是根據(jù)差值設(shè)置相應(yīng)的狀態(tài)位,作為跳轉(zhuǎn)、循環(huán)等的判斷條件。這類指令影響標志位N、Z、V、C。比較指令共有7條,除CBA為固有尋址方式外,其余6條指令允許使用8種尋址方式。基于HCS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.4S12匯編指令系統(tǒng)3.4.2算術(shù)運算指令3.4.2.10測試指令【作用】檢測累加器A、B或內(nèi)存單元的內(nèi)容是否≥0。相當于一次減0操作。操作后,源操作數(shù)不變,也不保存結(jié)果,只是根據(jù)結(jié)果設(shè)置標志位。該類指令有3條,TSTA和TSTB為固有尋址,TST允許使用6種尋址方式?;贖CS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.4.3邏輯運算指令【邏輯運算指令】包括基本邏輯運算、取反和求補、移位、位操作、位邏輯運算和位測試等指令。3.4.3.1基本邏輯運算指令按字節(jié)進行“與”、“或”、“異或”邏輯運算,用于將寄存器中的某些位清0或置1,共有8條指令?;贖CS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.4.3邏輯運算指令3.4.3.2取反、求補指令【功能】將累加器A、B或內(nèi)存單元內(nèi)容取反和求補,結(jié)果放回原處。【取反指令】相當于執(zhí)行一次$FF-(r)或$FF-(M)操作?!厩笱a指令】實際上進行一次$00-(r)或$00-(M)的減法操作?;贖CS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.4.3.3位操作與位測試指令【位操作指令】5條,用于將內(nèi)存單元中的某1位或某幾位清0或置1。其中,CCR特征位操作指令CLC、CLI、CLV匯編程序自動匯編成ANDCC指令,為立即尋址方式。內(nèi)存單元清0、置1指令BCLR和BSET支持5種尋址方式。【位測試指令】有2條,支持8種尋址方式。位測試指令將累加器A、B內(nèi)容與立即數(shù)或內(nèi)存單元內(nèi)容進行“邏輯與”運算,但結(jié)果并不回送,僅僅根據(jù)運算結(jié)果設(shè)置標志位N、Z、V?;贖CS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.4.3邏輯運算指令3.4.3.4邏輯移位指令【邏輯移位指令】共有8條,分為邏輯左移LSL和邏輯右移LSR兩種。其中,針對累加器A、B、D的操作為固有尋址,針對內(nèi)存單元的操作支持6種尋址方式?;贖CS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.4S12匯編指令系統(tǒng)3.4.3邏輯運算指令3.4.3.5算術(shù)移位指令【算術(shù)移位指令】共有7條,分為算術(shù)左移ASL和算術(shù)右移ASR兩種。其中,針對累加器A、B、D的操作為固有尋址,針對內(nèi)存單元的操作支持6種尋址方式。基于HCS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.4S12匯編指令系統(tǒng)3.4.3邏輯運算指令3.4.3.6循環(huán)移位指令【循環(huán)移位指令】共有6條,分為循環(huán)左移ROL和循環(huán)右移ROR兩種。其中,針對累加器A、B的操作為固有尋址,針對內(nèi)存單元的操作支持6種尋址方式?;贖CS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)【例】閱讀該程序段,要求:1)說明程序的功能。2)寫出程序執(zhí)行后涉及到的寄存器和內(nèi)存單元的最后結(jié)果。程序運行前,($3800)=$36。LDX #$3800 ;數(shù)據(jù)地址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內(nèi)容右移4次,高位補0LSRB ;LSRB ;LSRB ;B=$03STAB 0,X ;(B)→X,($3800)=$03HERE:BRAHERE ;原地踏步【程序功能】將地址$3800存放的壓縮BCD碼解壓縮,存放在$3800:$3801單元中,高位在低地址單元。【程序執(zhí)行后】($3800)=$03,($3801)=$06,A=$06,B=$03?;贖CS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.4S12匯編指令系統(tǒng)3.4.4高級函數(shù)指令CPU12的高級函數(shù)指令具有高級語言中某些函數(shù)的功能,如求最大值、最小值,乘積累加,內(nèi)插值運算等。3.4.4.1求最大值、最小值指令求最大值、最小值共有8條指令,用于在累加器A、D與內(nèi)存操作數(shù)之間取最大或最小的一個。求最大值和最小值分別有4條指令,支持5種尋址方式。其中,以字母M開頭的4條為8位指令,以字母E開頭的4條為16位指令?;贖CS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.4.4高級函數(shù)指令3.4.4.1求最大值、最小值指令指令自動完成數(shù)據(jù)的比較和傳送,標志位顯示比較的結(jié)果和是否發(fā)生了數(shù)據(jù)傳送?;贖CS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.4S12匯編指令系統(tǒng)3.4.4高級函數(shù)指令3.4.4.2乘積累加指令【作用】多項式運算乘積累加指令只有1條EMACS,采用特殊尋址方式??蓪崿F(xiàn)帶符號數(shù)的16位乘法和32位累加運算,隱含使用寄存器X和Y,指令功能為:
EMACSopr16a;(M(X):M(X+1))(M(Y)):M(Y+1))+(M~M+3)→M~M+3【操作過程】先將X和Y所指向的兩個16位內(nèi)存操作數(shù)相乘,然后將32位乘積與一個擴展尋址的32位內(nèi)存操作數(shù)相加,結(jié)果仍然保存在該地址?!疽蟆績蓚€乘數(shù)及32位內(nèi)存被加數(shù)均為有符號數(shù)。基于HCS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.4S12匯編指令系統(tǒng)3.4.4高級函數(shù)指令3.4.4.3查表與插值指令【查表與插值指令】有2條,采用變址尋址IDX方式。TBL為8位內(nèi)插值操作,結(jié)果保存在累加器A中;ETBL為16位內(nèi)插值操作,結(jié)果保存在累加器D中?!局噶罟δ堋縏BLoprx0_xysppc
;(M)+{(B)[(M+1)-(M)]}→AETBLoprx0_xysppc
;(M:M+1)+{(B)[(M+2:M+3)-(M:M+1)]}→D【計算公式】基于HCS12的嵌入式系統(tǒng)設(shè)計》第3章CPU12指令系統(tǒng)3.4S12匯編指令系統(tǒng)3.4.5程序控制指令【作用】通過改變程序計數(shù)器PC的內(nèi)容,使CPU從正常的執(zhí)行順序改變到不同的程序流程。程序控制指令分為轉(zhuǎn)移和調(diào)用兩大類轉(zhuǎn)移——永久轉(zhuǎn)移(跳轉(zhuǎn)),不再返回。調(diào)用——執(zhí)行完新的任務(wù)后,返回原地繼續(xù)執(zhí)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 25223-2024動植物油脂甾醇組成和甾醇總量的測定氣相色譜法
- 2024年度云南省高校教師資格證之高等教育法規(guī)考前沖刺模擬試卷A卷含答案
- 2024-2025學(xué)年廣東省汕頭市潮陽一中明光學(xué)校高三(上)月考物理試卷(10月)(含答案)
- 2024年冷凝水回收裝置項目投資申請報告代可行性研究報告
- 贛南師范大學(xué)《環(huán)境監(jiān)測實驗》2022-2023學(xué)年第一學(xué)期期末試卷
- 阜陽師范大學(xué)《材料科學(xué)與工程基礎(chǔ)》2022-2023學(xué)年第一學(xué)期期末試卷
- 福建師范大學(xué)協(xié)和學(xué)院《文獻檢索》2022-2023學(xué)年第一學(xué)期期末試卷
- 福建師范大學(xué)《中國地理》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年二級建造師機電-考點押題
- 工程質(zhì)量重大風(fēng)險預(yù)控和工程質(zhì)量事故處置指引
- 中心靜脈導(dǎo)管(CVC)維護
- 《財務(wù)共享實務(wù)》課程期末考試題庫及答案
- 醫(yī)療安全典型案例警示教育
- 幼兒園清算審計報告
- 婦科常用??朴盟?/a>
- 健康課大班《良好的坐姿》教案7
- 中醫(yī)醫(yī)院醫(yī)療質(zhì)量考核標準實施細則
- 建筑結(jié)構(gòu)試驗課件第七章結(jié)構(gòu)動力特性試驗
- 中國銀監(jiān)會辦公廳關(guān)于嚴禁銀行業(yè)金融機構(gòu)及其從業(yè)人員參與民間融資活動的通知銀監(jiān)辦發(fā)〔2012〕160號
- 最完整40篇英語短文搞定高考3500個單詞(編輯整理好)
- 深基基坑監(jiān)測專項施工方案
評論
0/150
提交評論