第3章CPU12指令系統(tǒng)_第1頁
第3章CPU12指令系統(tǒng)_第2頁
第3章CPU12指令系統(tǒng)_第3頁
第3章CPU12指令系統(tǒng)_第4頁
第3章CPU12指令系統(tǒng)_第5頁
已閱讀5頁,還剩72頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

基于HCS12的嵌入式系統(tǒng)設(shè)計(jì)合肥工業(yè)大學(xué)機(jī)械與汽車工程學(xué)院滕勤2014.4第3章CPU12指令系統(tǒng)本章內(nèi)容

3.1概述

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

3.3尋址方式(AddressingMode)

3.4S12匯編指令系統(tǒng)基于HCS12的嵌入式系統(tǒng)設(shè)計(jì)》第3章CPU12指令系統(tǒng)3.1概述【基本概念回顧】【指令】計(jì)算機(jī)能直接識別和執(zhí)行的命令,即每個有效的二進(jìn)制編碼組?!局噶钕到y(tǒng)(InstructionSystem)】一種計(jì)算機(jī)CPU所能執(zhí)行的全部指令的集合?!局噶畛绦蚧驒C(jī)器語言】由指令碼(機(jī)器碼)組成的程序?!局噶钪浄?instructionmnemonicsymbol)】用一組有一定含義的字符表示的指令,一般采用相關(guān)的英文單詞縮寫?!緟R編語言源程序】利用指令助記符編寫的程序?!静僮鞔a(OperatingCode,Opcode)】規(guī)定一條指令完成何種操作。【操作數(shù)(Operand)】指令所完成操作的對象。基于HCS12的嵌入式系統(tǒng)設(shè)計(jì)》第3章CPU12指令系統(tǒng)3.2CPU12匯編指令的格式和符號說明

[標(biāo)號]操作碼[操作數(shù)1],[操作數(shù)2][;注釋]3.2.1操作碼和操作數(shù)【CPU12指令組成】(前導(dǎo)字節(jié))+操作碼(+后隨字節(jié)+擴(kuò)展字節(jié))位于第二頁的操作碼之前均冠以前導(dǎo)字節(jié)(prebyte)$18?!竞笾米止?jié)作用】提供了一定形式的變址尋址、傳送、交換和循環(huán)的基址寄存器和偏移量的符號等信息?!緮U(kuò)展字節(jié)作用】包含有附加的程序信息,例如地址、偏移量和立即數(shù)等?;贖CS12的嵌入式系統(tǒng)設(shè)計(jì)》第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ù)表示方法十進(jìn)制整數(shù)可直接使用;16進(jìn)制數(shù)在數(shù)字前面加“$”;二進(jìn)制數(shù)前加“%”;立即數(shù)應(yīng)在數(shù)據(jù)前加“#”。基于HCS12的嵌入式系統(tǒng)設(shè)計(jì)》第3章CPU12指令系統(tǒng)3.2CPU12匯編指令的格式和符號說明3.2.4寄存器和存儲器表示法【寄存器表示法】寄存器用名稱表示,不分大小寫;M(Memorylocation)表示由指令有效地址指向的8位存儲單元;R(Result)表示算術(shù)或邏輯運(yùn)算結(jié)果;I(Intermediateresult)表示算術(shù)或邏輯運(yùn)算的中間結(jié)果。寄存器和存儲器符號加下標(biāo)“n”時,表示是它的第n位;16位寄存器符號后加下標(biāo)“H”或“L”時,表示其高位字節(jié)或低位字節(jié)?;贖CS12的嵌入式系統(tǒng)設(shè)計(jì)》第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后指向的存儲單元?;贖CS12的嵌入式系統(tǒng)設(shè)計(jì)》第3章CPU12指令系統(tǒng)3.3尋址方式【尋址】尋找操作數(shù)地址的過程?!居行У刂贰?EffectiveAddress):操作數(shù)所在的地址。【尋址方式】(AddressingMode):通過確定操作數(shù)所在的位置(地址),提取操作數(shù)的方法。CPU12共有6類尋址方式,即固有尋址、立即尋址、直接尋址、擴(kuò)展尋址、相對尋址和變址尋址?;贖CS12的嵌入式系統(tǒng)設(shè)計(jì)》第3章CPU12指令系統(tǒng)3.3.1隱含/固有尋址(InherentAddressing,INH)【固有尋址】有效地址包含在操作碼中,也稱為隱含尋址(Impliedaddressing),又因?yàn)椴僮鲾?shù)總是處于CPU的寄存器之中,還稱為寄存器尋址(Registeraddressing)?!咎卣鳌吭谥噶钪浄谐霈F(xiàn)寄存器的名稱,有時甚至連寄存器的名稱都不出現(xiàn)。

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

MAXCNTequ13

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

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

機(jī)器碼指令 操作:($0040)→AB60040LDAA$0040 ;使用擴(kuò)展尋址 B60040LDAA>$40 ;強(qiáng)制使用擴(kuò)展尋址基于HCS12的嵌入式系統(tǒng)設(shè)計(jì)》第3章CPU12指令系統(tǒng)3.3尋址方式3.3.5相對尋址(RelativeAddressing,REL)相對尋址只出現(xiàn)在相對轉(zhuǎn)移指令(relativebranchinstruction)中。【相對尋址】當(dāng)前的PC值加上指令中規(guī)定的地址偏移量relx,構(gòu)成操作數(shù)實(shí)際地址的尋址方式。目的地址=源地址+轉(zhuǎn)移指令字節(jié)數(shù)+relx【源地址】轉(zhuǎn)移指令所在的地址【目的地址】轉(zhuǎn)移程序所在的首地址偏移量為8位、9位和16位帶符號二進(jìn)制補(bǔ)碼。短轉(zhuǎn)移的偏移量為$80~$7F(-128~+127);循環(huán)控制指令支持9位偏移量,其數(shù)值為$100~$0FF(-256~+255);長轉(zhuǎn)移的偏移量為$8000~$7FFF(-32768~32767)。基于HCS12的嵌入式系統(tǒng)設(shè)計(jì)》第3章CPU12指令系統(tǒng)3.3尋址方式3.3.5相對尋址(RelativeAddressing,REL)如果偏移量為0,則CPU立即執(zhí)行緊接著轉(zhuǎn)移指令的下一條指令。由于偏移量是在轉(zhuǎn)移指令的末尾,采用負(fù)的偏移量值可以使PC指向操作碼并開始循環(huán)。機(jī)器碼指令 操作20FETRAPBRATRAP ;PC-2→PC TRAPLBRATRAP ;PC-3→PC程序利用轉(zhuǎn)移指令返回到指令首址,程序在該行落入陷阱,稱為“原地踏步”。這是一種終止程序的普通方法,廣泛用于程序調(diào)試?;贖CS12的嵌入式系統(tǒng)設(shè)計(jì)》第3章CPU12指令系統(tǒng)3.3尋址方式3.3.6變址尋址(IndexedAddressing,IDX)變址尋址是CPU12的主要尋址方式,也是本節(jié)的重點(diǎn)和難點(diǎn)?!咀冎穼ぶ贰恳阅硞€寄存器的內(nèi)容為基本地址,然后在這個基本地址上加上地址偏移量,形成操作數(shù)地址或存放操作數(shù)地址的地址,并將這個地址單元的內(nèi)容作為指令的操作數(shù)。CPU12共有4類不同的變址尋址方式,這4類又可進(jìn)一步分解成12種不同的變址尋址方式?;贖CS12的嵌入式系統(tǒng)設(shè)計(jì)》第3章CPU12指令系統(tǒng)3.3尋址方式3.3.6變址尋址(IndexedAddressing,IDX)【變址尋址指令組成】1個操作碼字節(jié)+1個后置(隨)字節(jié)(postbyte)+0~2個擴(kuò)展字節(jié)(extensionbyte)?!静僮鞔a】表明指令功能和變址尋址方式?!竞笾米止?jié)】(在指令代碼表中用xb描述)提供變址尋址方式的具體信息,如所使用的變址寄存器、偏移量的符號、變址寄存器的自動遞增/遞減方式等。當(dāng)偏移量大于5位二進(jìn)制數(shù)時,需要采用擴(kuò)展字節(jié),用來表示偏移量的大小。所有變址尋址方式都采用一個16位寄存器和附加信息來產(chǎn)生一個有效地址?;贖CS12的嵌入式系統(tǒng)設(shè)計(jì)》第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;負(fù)常數(shù)偏移量

r是變址寄存器(IX,IY,SP,PC),n/-n是帶符號偏移量(5位、9位、16位)?;贖CS12的嵌入式系統(tǒng)設(shè)計(jì)》第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è)計(jì)》第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個擴(kuò)展字節(jié)。9位帶符號偏移量的地址偏移范圍:-256~+255,偏移量的符號位在后隨字節(jié)中,偏移量大小在擴(kuò)展字節(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è)計(jì)》第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個擴(kuò)展字節(jié)。有效地址=變址寄存器內(nèi)容+兩個偏移量擴(kuò)展字節(jié)??梢栽L問64KB地址空間中的任何單元。

LDAA$04,X ;($04+X)→ALDD$10,Y ;($10+Y):($10+Y+1)→DLDAA$1000,PC ;($1000+PC)→A基于HCS12的嵌入式系統(tǒng)設(shè)計(jì)》第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è)計(jì)》第3章CPU12指令系統(tǒng)3.3.6變址尋址(IndexedAddressing,IDX)3.3.6.2自動遞增/遞減變址尋址IDX(Autoincrement/AutodecrementIndexedAddressing)先遞增或先遞減指令——變址寄存器內(nèi)容在訪問內(nèi)存單元之前變化,相當(dāng)于前面常數(shù)偏移變址尋址。后遞增或后遞減指令——用變址寄存器中的初值訪問內(nèi)存單元,然后才改變變址寄存器中的內(nèi)容?!局噶罱M成】(前導(dǎo)字符$18)+1個操作碼字節(jié)+1個后置字節(jié)

后置字節(jié)基于HCS12的嵌入式系統(tǒng)設(shè)計(jì)》第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)進(jìn)行操作。例如:將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è)計(jì)》第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è)計(jì)》第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è)計(jì)》第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)?;贖CS12的嵌入式系統(tǒng)設(shè)計(jì)》第3章CPU12指令系統(tǒng)3.3尋址方式3.3.6變址尋址(IndexedAddressing,IDX)3.3.6.4間接變址尋址(IndirectIndexedAddressing)指令操作碼之后需要一個后置字節(jié),用來規(guī)定偏移量的來源和變址寄存器的名稱。對于常數(shù)偏移量的方式,后置字節(jié)之后還需要跟兩個擴(kuò)展字節(jié),用于存放16位偏移量常數(shù)。后置字節(jié)編碼:

基于HCS12的嵌入式系統(tǒng)設(shè)計(jì)》第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è)計(jì)》第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è)計(jì)》第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è)計(jì)》第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è)計(jì)》第3章CPU12指令系統(tǒng)3.4S12匯編指令系統(tǒng)按指令助記符分類,S12共有169種不同的匯編指令??紤]到不同類型的尋址方式,指令數(shù)量達(dá)594種。按照指令功能,可將指令分為以下幾大類:數(shù)據(jù)傳送指令、算術(shù)運(yùn)算指令、邏輯運(yùn)算指令、轉(zhuǎn)移與子程序調(diào)用指令、中斷指令、MCU控制指令、高級函數(shù)指令、模糊運(yùn)算指令等。3.4.1數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令將數(shù)據(jù)從一處復(fù)制到另一處,包括:立即加載、寄存器之間的傳送與交換、內(nèi)存?zhèn)魉偷郊拇嫫?、寄存器傳送到?nèi)存、內(nèi)存之間的傳送和堆棧操作指令等?;贖CS12的嵌入式系統(tǒng)設(shè)計(jì)》第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è)計(jì)》第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,擴(kuò)展尋址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+ ;相當(dāng)于PULY,自動遞增變址尋址IDX基于HCS12的嵌入式系統(tǒng)設(shè)計(jì)》第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中。基于HCS12的嵌入式系統(tǒng)設(shè)計(jì)》第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è)計(jì)》第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è)計(jì)》第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 ;擴(kuò)展尋址EXTSTS [D,PC] ;累加器D間接變址尋址[D,IDX]STY 2,-SP ;相當(dāng)于PSHY,自動遞減變址尋址IDX基于HCS12的嵌入式系統(tǒng)設(shè)計(jì)》第3章CPU12指令系統(tǒng)3.4.1數(shù)據(jù)傳送指令3.4.1.4寄存器數(shù)據(jù)傳送指令將源寄存器的內(nèi)容傳送到目的寄存器,共9條指令,均為固有尋址方式。實(shí)際上該組指令只有3條,其余指令由匯編程序自動匯編成對應(yīng)的TFR指令,如表中陰影部分所示。基于HCS12的嵌入式系統(tǒng)設(shè)計(jì)》第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位,通過符號擴(kuò)展變成16位后傳送;TFRA,X=SEXA,X16位到8位,舍棄高位,只傳送低位?!菊f明】數(shù)據(jù)從8位寄存器傳送到16位寄存器,8位寄存器的內(nèi)容傳送到16位寄存器的低8位,CPU12自動在目的寄存器的最高有效字節(jié)中執(zhí)行一次符號擴(kuò)展?!痉枖U(kuò)展的原則】如果8位寄存器的最高位是0,則16位寄存器的高8位為$00;如果8位寄存器的最高位是1,則16位寄存器的高8位為$FF?;贖CS12的嵌入式系統(tǒng)設(shè)計(jì)》第3章CPU12指令系統(tǒng)3.4S12匯編指令系統(tǒng)3.4.1數(shù)據(jù)傳送指令3.4.1.5寄存器數(shù)據(jù)交換指令將源寄存器內(nèi)容與目的寄存器內(nèi)容進(jìn)行交換,共3條指令,均為固有尋址方式。實(shí)際上該組指令只有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è)計(jì)》第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位零擴(kuò)展成16位后,傳送到16位寄存器,16位寄存器的低8位傳送到8位寄存器;(3)16位8位,16位寄存器的低8位傳送到8位寄存器,8位寄存器高8位補(bǔ)$00或$FF后,傳送到16位寄存器。其中8位寄存器是A時,高8位補(bǔ)$00;8位寄存器是B或CCR時,高8位補(bǔ)$FF?;贖CS12的嵌入式系統(tǒng)設(shè)計(jì)》第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)部寄存器而直接進(jìn)行內(nèi)存單元之間數(shù)據(jù)傳送的指令,支持6種尋址方式?;贖CS12的嵌入式系統(tǒng)設(shè)計(jì)》第3章CPU12指令系統(tǒng)3.4S12匯編指令系統(tǒng)3.4.1數(shù)據(jù)傳送指令3.4.1.7堆棧操作指令CPU12堆棧操作僅限于寄存器與堆棧之間的數(shù)據(jù)傳送,使用堆棧指針SP進(jìn)行間接尋址。堆棧操作分為進(jìn)棧和出棧兩種,操作循序正好相反,即指針先遞減,后壓棧;先彈出,指針后遞增。基于HCS12的嵌入式系統(tǒng)設(shè)計(jì)》第3章CPU12指令系統(tǒng)3.4S12匯編指令系統(tǒng)3.4.2算術(shù)運(yùn)算指令3.4.2.1加法指令CPU12加法運(yùn)算分為兩類,一類是兩個寄存器內(nèi)容的加法,另一類是寄存器內(nèi)容與立即數(shù)或內(nèi)存單元內(nèi)容的加法,運(yùn)算結(jié)果保存在寄存器中。所有加法指令都影響標(biāo)志位?!炯拇嫫髦g的加法】基于HCS12的嵌入式系統(tǒng)設(shè)計(jì)》第3章CPU12指令系統(tǒng)3.4S12匯編指令系統(tǒng)3.4.2算術(shù)運(yùn)算指令3.4.2.1加法指令【寄存器與立即數(shù)或內(nèi)存單元的加法】共有5條指令。2條帶進(jìn)位的加法指令,3條不帶進(jìn)位的加法指令?;贖CS12的嵌入式系統(tǒng)設(shè)計(jì)》第3章CPU12指令系統(tǒng)3.4.2.2減法指令CPU12減法運(yùn)算也分為兩類,一類是兩個寄存器內(nèi)容的減法,另一類是寄存器內(nèi)容與立即數(shù)或內(nèi)存單元內(nèi)容的減法,運(yùn)算結(jié)果保存在寄存器中,所有減法指令都影響標(biāo)志位。兩個寄存器內(nèi)容的減法指令為SBA,結(jié)果存放在A中。寄存器與立即數(shù)或內(nèi)存單元的減法共有5條指令,2條為帶借位的減法指令,3條為不帶借位的減法指令。基于HCS12的嵌入式系統(tǒng)設(shè)計(jì)》第3章CPU12指令系統(tǒng)3.4S12匯編指令系統(tǒng)3.4.2算術(shù)運(yùn)算指令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è)計(jì)》第3章CPU12指令系統(tǒng)3.4S12匯編指令系統(tǒng)3.4.2算術(shù)運(yùn)算指令3.4.2.4十進(jìn)制調(diào)整指令CPU12只有1條十進(jìn)制調(diào)整指令DAA,根據(jù)標(biāo)志H、C和A中數(shù)值的大小做BCD調(diào)整,調(diào)整規(guī)則是:(1)如果A中的低4位>9或標(biāo)志H=1,則A=A+$06;(2)如果A中的高4位>9或標(biāo)志C=1,則A=A+$60,同時重置標(biāo)志C。例:十進(jìn)制運(yùn)算7527+1075=8602基于HCS12的嵌入式系統(tǒng)設(shè)計(jì)》第3章CPU12指令系統(tǒng)3.4S12匯編指令系統(tǒng)3.4.2算術(shù)運(yùn)算指令3.4.2.5清零指令【功能】向寄存器或內(nèi)存單元中寫入$00,與加載立即數(shù)$00的指令功能相同,共有3條指令。寄存器清零只針對A和B,為固有尋址方式。內(nèi)存單元清零指令支持6種尋址方式。基于HCS12的嵌入式系統(tǒng)設(shè)計(jì)》第3章CPU12指令系統(tǒng)3.4S12匯編指令系統(tǒng)3.4.2算術(shù)運(yùn)算指令3.4.2.6符號擴(kuò)展指令單字節(jié)無符號數(shù)通過高位補(bǔ)0可以擴(kuò)展成任意寬度,而對于有符號數(shù),由于采用補(bǔ)碼表示,高位可能需要補(bǔ)0或補(bǔ)1。符號擴(kuò)展指令SEX為固有尋址方式。【符號擴(kuò)展方法】將原數(shù)據(jù)符號位復(fù)制到已擴(kuò)展數(shù)據(jù)的所有高位。指令要求源操作數(shù)是A、B或CCR中的內(nèi)容,擴(kuò)展后的結(jié)果存放在D、X、Y或SP中?!局噶罡袷健縎EXR1,R2;R1=A、B或CCR,R2=D、X、Y或SP,相當(dāng)于TFRR1,R2基于HCS12的嵌入式系統(tǒng)設(shè)計(jì)》第3章CPU12指令系統(tǒng)3.4S12匯編指令系統(tǒng)3.4.2算術(shù)運(yùn)算指令3.4.2.7乘法指令S12乘法全部在寄存器內(nèi)完成,可以實(shí)現(xiàn)兩個8位或16位的硬件乘法運(yùn)算,共有3條指令,均為固有尋址方式。EMUL和EMULS指令的區(qū)別在于,EMULS指令的結(jié)果用補(bǔ)碼表示?;贖CS12的嵌入式系統(tǒng)設(shè)計(jì)》第3章CPU12指令系統(tǒng)3.4.2算術(shù)運(yùn)算指令3.4.2.8除法指令除法全部在寄存器內(nèi)完成,可以實(shí)現(xiàn)16/16位或32/16位的硬件除法運(yùn)算。EDIV和EDIVS為常規(guī)32/16除法指令,分別按無符號數(shù)和有符號數(shù)相除。FDIV是小數(shù)除法指令,即求真分?jǐn)?shù)D/X的值。IDIV和IDIVS分別是無符號和有符號整數(shù)16/16除法指令,區(qū)別在于IDIVS指令的商和余數(shù)用補(bǔ)碼表示?;贖CS12的嵌入式系統(tǒng)設(shè)計(jì)》第3章CPU12指令系統(tǒng)3.4.2算術(shù)運(yùn)算指令3.4.2.9比較指令【功能】將寄存器的內(nèi)容與立即數(shù)或內(nèi)存單元的內(nèi)容進(jìn)行比較,實(shí)際上是進(jìn)行兩個操作數(shù)的減法運(yùn)算,并不回送運(yùn)算結(jié)果,只是根據(jù)差值設(shè)置相應(yīng)的狀態(tài)位,作為跳轉(zhuǎn)、循環(huán)等的判斷條件。這類指令影響標(biāo)志位N、Z、V、C。比較指令共有7條,除CBA為固有尋址方式外,其余6條指令允許使用8種尋址方式?;贖CS12的嵌入式系統(tǒng)設(shè)計(jì)》第3章CPU12指令系統(tǒng)3.4S12匯編指令系統(tǒng)3.4.2算術(shù)運(yùn)算指令3.4.2.10測試指令【作用】檢測累加器A、B或內(nèi)存單元的內(nèi)容是否≥0。相當(dāng)于一次減0操作。操作后,源操作數(shù)不變,也不保存結(jié)果,只是根據(jù)結(jié)果設(shè)置標(biāo)志位。該類指令有3條,TSTA和TSTB為固有尋址,TST允許使用6種尋址方式?;贖CS12的嵌入式系統(tǒng)設(shè)計(jì)》第3章CPU12指令系統(tǒng)3.4.3邏輯運(yùn)算指令【邏輯運(yùn)算指令】包括基本邏輯運(yùn)算、取反和求補(bǔ)、移位、位操作、位邏輯運(yùn)算和位測試等指令。3.4.3.1基本邏輯運(yùn)算指令按字節(jié)進(jìn)行“與”、“或”、“異或”邏輯運(yùn)算,用于將寄存器中的某些位清0或置1,共有8條指令?;贖CS12的嵌入式系統(tǒng)設(shè)計(jì)》第3章CPU12指令系統(tǒng)3.4.3邏輯運(yùn)算指令3.4.3.2取反、求補(bǔ)指令【功能】將累加器A、B或內(nèi)存單元內(nèi)容取反和求補(bǔ),結(jié)果放回原處?!救》粗噶睢肯喈?dāng)于執(zhí)行一次$FF-(r)或$FF-(M)操作。【求補(bǔ)指令】實(shí)際上進(jìn)行一次$00-(r)或$00-(M)的減法操作?;贖CS12的嵌入式系統(tǒng)設(shè)計(jì)》第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種尋址方式?!疚粶y試指令】有2條,支持8種尋址方式。位測試指令將累加器A、B內(nèi)容與立即數(shù)或內(nèi)存單元內(nèi)容進(jìn)行“邏輯與”運(yùn)算,但結(jié)果并不回送,僅僅根據(jù)運(yùn)算結(jié)果設(shè)置標(biāo)志位N、Z、V?;贖CS12的嵌入式系統(tǒng)設(shè)計(jì)》第3章CPU12指令系統(tǒng)3.4.3邏輯運(yùn)算指令3.4.3.4邏輯移位指令【邏輯移位指令】共有8條,分為邏輯左移LSL和邏輯右移LSR兩種。其中,針對累加器A、B、D的操作為固有尋址,針對內(nèi)存單元的操作支持6種尋址方式?;贖CS12的嵌入式系統(tǒng)設(shè)計(jì)》第3章CPU12指令系統(tǒng)3.4S12匯編指令系統(tǒng)3.4.3邏輯運(yùn)算指令3.4.3.5算術(shù)移位指令【算術(shù)移位指令】共有7條,分為算術(shù)左移ASL和算術(shù)右移ASR兩種。其中,針對累加器A、B、D的操作為固有尋址,針對內(nèi)存單元的操作支持6種尋址方式?;贖CS12的嵌入式系統(tǒng)設(shè)計(jì)》第3章CPU12指令系統(tǒng)3.4S12匯編指令系統(tǒng)3.4.3邏輯運(yùn)算指令3.4.3.6循環(huán)移位指令【循環(huán)移位指令】共有6條,分為循環(huán)左移ROL和循環(huán)右移ROR兩種。其中,針對累加器A、B的操作為固有尋址,針對內(nèi)存單元的操作支持6種尋址方式。基于HCS12的嵌入式系統(tǒng)設(shè)計(jì)》第3章CPU12指令系統(tǒng)【例】閱讀該程序段,要求:1)說明程序的功能。2)寫出程序執(zhí)行后涉及到的寄存器和內(nèi)存單元的最后結(jié)果。程序運(yùn)行前,($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次,高位補(bǔ)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è)計(jì)》第3章CPU12指令系統(tǒng)3.4S12匯編指令系統(tǒng)3.4.4高級函數(shù)指令CPU12的高級函數(shù)指令具有高級語言中某些函數(shù)的功能,如求最大值、最小值,乘積累加,內(nèi)插值運(yùn)算等。3.4.4.1求最大值、最小值指令求最大值、最小值共有8條指令,用于在累加器A、D與內(nèi)存操作數(shù)之間取最大或最小的一個。求最大值和最小值分別有4條指令,支持5種尋址方式。其中,以字母M開頭的4條為8位指令,以字母E開頭的4條為16位指令。基于HCS12的嵌入式系統(tǒng)設(shè)計(jì)》第3章CPU12指令系統(tǒng)3.4.4高級函數(shù)指令3.4.4.1求最大值、最小值指令指令自動完成數(shù)據(jù)的比較和傳送,標(biāo)志位顯示比較的結(jié)果和是否發(fā)生了數(shù)據(jù)傳送。基于HCS12的嵌入式系統(tǒng)設(shè)計(jì)》第3章CPU12指令系統(tǒng)3.4S12匯編指令系統(tǒng)3.4.4高級函數(shù)指令3.4.4.2乘積累加指令【作用】多項(xiàng)式運(yùn)算乘積累加指令只有1條EMACS,采用特殊尋址方式??蓪?shí)現(xiàn)帶符號數(shù)的16位乘法和32位累加運(yùn)算,隱含使用寄存器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位乘積與一個擴(kuò)展尋址的32位內(nèi)存操作數(shù)相加,結(jié)果仍然保存在該地址。【要求】兩個乘數(shù)及32位內(nèi)存被加數(shù)均為有符號數(shù)。基于HCS12的嵌入式系統(tǒng)設(shè)計(jì)》第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中。【指令功能】TBLoprx0_xysppc

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

;(M:M+1)+{(B)[(M+2:M+3)-(M:M+1)]}→D【計(jì)算公式】基于HCS12的嵌入式系統(tǒng)設(shè)計(jì)》第3章CPU12指令系統(tǒng)3.4S12匯編指令系統(tǒng)3.4.5程序控制指令【作用】通過改變程序計(jì)數(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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論