Freescale匯編指令.ppt_第1頁
Freescale匯編指令.ppt_第2頁
Freescale匯編指令.ppt_第3頁
Freescale匯編指令.ppt_第4頁
Freescale匯編指令.ppt_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

基于HCS12的嵌入式系統(tǒng)設(shè)計,第3章 CPU12指令系統(tǒng),3.1概述 3.2 CPU12匯編指令的格式和符號說明 3.2.1 操作碼和操作數(shù) 3.2.2 數(shù)據(jù)類型 3.2.3數(shù)據(jù)表示方法 3.2.4寄存器和存儲器表示法 3.3 尋址方式(Addressing Mode) 3.3.1隱含/固有尋址(Inherent Addressing,INH) 3.3.2立即尋址(Immediate Addressing,IMM) 3.3.3直接尋址(Direct Addressing,DIR) 3.3.4擴(kuò)展尋址(Extended Addressing,EXT) 3.3.5相對尋址(Relative Addressing,REL ) 3.3.6變址尋址(Indexed Addressing,IDX) 3.4 S12匯編指令系統(tǒng) 3.4.1數(shù)據(jù)傳送指令 3.4.2算術(shù)運(yùn)算指令 3.4.3邏輯運(yùn)算指令 3.4.4高級函數(shù)指令 3.4.5 程序控制指令 3.4.6 CPU控制指令,基于HCS12的嵌入式系統(tǒng)設(shè)計,第3章 CPU12指令系統(tǒng),3.1概述 基本概念回顧 指令:計算機(jī)能直接識別和執(zhí)行的命令,即每個有效的編碼組。 指令系統(tǒng):一種計算機(jī)CPU所能執(zhí)行的全部指令的集合。 指令助記符(instruction mnemonic symbol):用一組有一定含義的字符表示的指令,一般采用相關(guān)的英文單詞縮寫。 匯編語言源程序:利用指令助記符編寫的程序。 操作碼(Opcode):規(guī)定一條指令完成何種操作。 操作數(shù)(Operand):指令所完成操作的對象。 3.2 CPU12匯編指令的格式和符號說明 3.2.1 操作碼和操作數(shù) CPU12指令組成:(前導(dǎo)字節(jié))+操作碼(+后隨字節(jié)+擴(kuò)展字節(jié)) 后置字節(jié)提供了一定形式的變址尋址、傳送、交換和循環(huán)的基址寄存器和偏移量的符號等信息。 擴(kuò)展字節(jié)包含有附加的程序信息,例如地址、偏移量和立即數(shù)等。,基于HCS12的嵌入式系統(tǒng)設(shè)計,3.2 CPU12匯編指令的格式和符號說明(2),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ù)前加“#”。 3.2.4寄存器和存儲器表示法 寄存器用名稱表示,不分大小寫;M(Memory location)表示由指令有效地址指向的8位存儲單元;R(Result)表示算術(shù)或邏輯運(yùn)算結(jié)果;I(Intermediate result)表示算術(shù)或邏輯運(yùn)算的中間結(jié)果。寄存器和存儲器符號加下標(biāo)“n”時,表示是它的第n位;16位寄存器符號后加下標(biāo)“H”或“L”時,表示其高位字節(jié)或低位字節(jié)。 M:M+1表示16位存儲器,由M和M+1相鄰兩個存儲單元組成。MM+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.3 尋址方式(1),尋址:尋找操作數(shù)地址的過程。 有效地址(effective address):操作數(shù)所在的地址。 尋址方式(Addressing Mode):通過確定操作數(shù)所在的位置(地址),提取操作數(shù)的方法。 CPU12共有6類尋址方式,即固有尋址、立即尋址、直接尋址、擴(kuò)展尋址、相對尋址和變址尋址。 3.3.1 隱含/固有尋址(Inherent Addressing,INH) 固有尋址:有效地址包含在操作碼中,也稱為隱含尋址(Implied addressing),又因?yàn)椴僮鲾?shù)總是處于CPU的寄存器之中,還稱為寄存器尋址(Register addressing)。 特征:在指令助記符中會出現(xiàn)寄存器的名稱,有時在助記符中甚至連寄存器的名稱都不出現(xiàn)。 3.3.2 立即尋址(Immediate Addressing,IMM) 立即尋址:指令的操作數(shù)是一個8位或16位二進(jìn)制數(shù)。 指令中出現(xiàn)的操作數(shù)稱為立即數(shù),為了與直接地址相區(qū)別,立即數(shù)前必須加“#”號。立即尋址常用來給寄存器賦值。 3.3.3 直接尋址(Direct Addressing,DIR) 直接尋址:指令中直接給出操作數(shù)地址的尋址方式。 3.3.4 擴(kuò)展尋址(Extended Addressing,EXT) 擴(kuò)展尋址:指令中直接給出操作數(shù)完整16位地址的尋址方式。,基于HCS12的嵌入式系統(tǒng)設(shè)計,3.3 尋址方式(2),3.3.5 相對尋址(Relative Addressing,REL) 相對尋址只出現(xiàn)在相對轉(zhuǎn)移指令(relative branch instruction)中。 相對尋址:當(dāng)前的PC值加上指令中規(guī)定的地址偏移量relx,構(gòu)成操作數(shù)的實(shí)際地址的尋址方式。 目的地址=源地址+轉(zhuǎn)移指令字節(jié)數(shù)+ relx 偏移量為8位、9位和16位帶符號二進(jìn)制補(bǔ)碼。短轉(zhuǎn)移的偏移量為$80$7F(-128+127);循環(huán)控制指令支持9位偏移量,其數(shù)值為$100$0FF(-256+255);長轉(zhuǎn)移的偏移量為$8000$7FFF(-3276832767)。 如果偏移量為0,則CPU立即執(zhí)行緊接著轉(zhuǎn)移指令的下一條指令。程序利用轉(zhuǎn)移指令返回到指令首址,所以程序就在該行落入陷阱,稱為“原地踏步”。這是一種終止程序的普通方法,廣泛用于程序調(diào)試。 3.3.6 變址尋址(Indexed Addressing,IDX) 變址尋址是CPU12的主要尋址方式,也是本節(jié)的重點(diǎn)和難點(diǎn)。 變址尋址是以某個寄存器的內(nèi)容為基本地址,然后在這個基本地址上加上地址偏移量,形成操作數(shù)地址或存放操作數(shù)地址的地址,并將這個地址單元的內(nèi)容作為指令的操作數(shù)。 CPU12 共有4類不同的變址尋址方式,這4類又可進(jìn)一步分解成12種不同的變址尋址方式。 3.3.6.1 常數(shù)偏移變址尋址(Constant Offset Indexed Addressing) 常數(shù)偏移變址尋址:將變址寄存器的內(nèi)容加上一個常數(shù)形成操作數(shù)地址。有三種不同的偏移量:5位、9位和16位。,基于HCS12的嵌入式系統(tǒng)設(shè)計,3.3 尋址方式(3),A、5位常數(shù)偏移變址尋址IDX(5-Bit Constant Offset Indexed Addressing) 偏移量為5位帶符號數(shù),偏移量大小為:-16+15,5位偏移量隱含在后隨字節(jié)中,有效地址為變址寄存器內(nèi)容+5位地址偏移量。 B、9位常數(shù)偏移變址尋址IDX1(9 - Bit Constant Offset Indexed Addressing) 9位帶符號偏移量的地址偏移范圍:-256+255,偏移量的符號位在后隨字節(jié)中,偏移量大小在擴(kuò)展字節(jié)中,變址寄存器內(nèi)容加上9位帶符號常數(shù)偏移量作為操作數(shù)地址。 C、16 位常數(shù)偏移變址尋址IDX2(16-Bit Constant Offset Indexed Addressing) 有效地址由變址寄存器內(nèi)容加上兩個偏移量擴(kuò)展字節(jié)形成,可以訪問64KB地址空間中的任何單元。 3.3.6.2 自動遞增/遞減變址尋址IDX(Autoincrement/Autodecrement Indexed Addressing) 在CPU12的變址尋址方式中,提供了4種方法自動改變基址寄存器的內(nèi)容,并作為指令執(zhí)行的一部分。變址尋址前或變址尋址后,變址寄存器中的數(shù)值可以加上或減去一個整數(shù)值, 增加值的范圍是00000111(+1+8),減少值范圍是11111000(-1-8)。 對于先遞增或先遞減的指令,變址寄存器內(nèi)容在訪問內(nèi)存單元之前變化,相當(dāng)于前面常數(shù)偏移變址尋址。而對于后遞增或后遞減指令,則是用變址寄存器中的初值訪問內(nèi)存單元,然后才改變變址寄存器中的內(nèi)容。 3.3.6.3 累加器偏移變址尋址IDX(Accumulator Offset Indexed Addressing) 累加器偏移變址尋址:將變址寄存器中的內(nèi)容與累加器中的無符號偏移量相加,構(gòu)成有效地址。 為了使用這種尋址方式,偏移量必須先置于累加器中,累加器可以是A、B、D。,基于HCS12的嵌入式系統(tǒng)設(shè)計,3.3 尋址方式(4),3.3.6.4間接變址尋址(Indirect Indexed Addressing) 寄存器間接尋址:操作數(shù)地址是以寄存器名稱的形式間接給出。 間接變址尋址:變址寄存器中的內(nèi)容與一個16位偏移量相加形成一個地址,但該地址并不是操作數(shù)的地址,它所指向的地址單元中的內(nèi)容才是操作數(shù)的有效地址。 偏移量既可以是一個16位的常數(shù)偏移量,也可以是累加器中的內(nèi)容。 A、16位常數(shù)偏移間接變址尋址IDX2(16 - Bit Constant Indirect Indexed Addressing) 將由指令提供的16位偏移量與基址變址寄存器(base indexing register)的內(nèi)容相加,形成一個地址(指針),指向一個存放操作數(shù)地址的單元。 指令執(zhí)行時,根據(jù)由基址和偏移量所形成的地址指針,首先到指定的地址單元中取得操作數(shù)地址,然后再根據(jù)操作數(shù)地址提取操作數(shù)。其有效地址為: effective address = (two offset extension bytes) + (X、Y、SP or PC) 為了將這種尋址方式與16位常數(shù)偏移變址尋址方式加以區(qū)別,在指令助記符的操作數(shù)部分,用一個方括號括起來。 B、累加器D間接變址尋址D, IDX) (Accumulator D Indexed -Indirect Addressing ) 將累加器D中的內(nèi)容+基址寄存器的內(nèi)容,形成一個地址指針,指向存放操作數(shù)地址的存儲單元。 指令執(zhí)行時,根據(jù)基址寄存器和偏移寄存器D中的內(nèi)容形成一個地址,到該地址單元中找到操作數(shù)地址,再由操作數(shù)地址取得操作數(shù)。其有效地址為: effective address = (D)+(X,Y,SP or PC) 為了把這種尋址方式與累加器D偏移變址尋址方式區(qū)別開來,用一個方括號將指令助記符的操作數(shù)部分括起來。,基于HCS12的嵌入式系統(tǒng)設(shè)計,3.4 S12匯編指令系統(tǒng)(1),按指令助記符分類,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)存之間的傳送和堆棧操作指令等。 3.4.1.1 寄存器加載指令 寄存器加載指令用于將立即數(shù)或內(nèi)存中的操作數(shù)傳送給寄存器,共6條指令,如表3.1所示。每條指令支持8種源操作數(shù)尋址方式:IMM、DIR、EXT、IDX、IDX1、IDX2、D,IDX、IDX2,派生出48條指令。,表3.2 有效地址加載指令,表3.1 寄存器加載指令,3.4.1.2 有效地址加載指令 有效地址加載指令可以用來將操作數(shù)地址分別傳送到寄存器SP、X和Y中。共3條指令,如表3.2所示。采用3種變址尋址:IDX、IDX1、IDX2。 指令可將SP、PC、X或Y的值加/減5位、9位或16位常數(shù),或者加上A、B或D的內(nèi)容,傳送到寄存器SP、X和Y中。,基于HCS12的嵌入式系統(tǒng)設(shè)計,3.4 S12匯編指令系統(tǒng)(2),3.6.1.3 寄存器存儲指令 寄存器存儲指令僅限于將寄存器內(nèi)容送入內(nèi)存單元,共6條指令,如表3.3所示。每條指令支持7種源操作數(shù)尋址方式:DIR、EXT、IDX、IDX1、IDX2、D,IDX、IDX2。 3.4.1.4 寄存器數(shù)據(jù)傳送指令 將源寄存器的內(nèi)容傳送到目的寄存器,共9條指令,如表3.4所示,均為固有尋址方式。實(shí)際上該組指令只有3條,其余指令是為兼容68HC11而保留的偽指令,由匯編程序自動匯編成對應(yīng)的TFR指令,如表3.4中陰影部分所示。 源寄存器和目的寄存器可以在9個寄存器中任意選擇,包括MCU內(nèi)部的兩個暫存器TMP2和TMP3。其中涉及到TMP2和TMP3的指令是為了以前產(chǎn)品保留的指令,有些匯編程序可能視其為無效指令,但可以通過DC.B和DC.W在程序中直接嵌入這樣的指令。,表3.3 寄存器存儲指令,表3.4寄存器數(shù)據(jù)傳送指令,基于HCS12的嵌入式系統(tǒng)設(shè)計,3.4 S12匯編指令系統(tǒng)(3),注:R1和R2分別是寄存器A、B、CCR、D、X、Y、SP、TMP2、TMP3之一。但TMP3只能作為源寄存器,TMP2只能作為目的寄存器。 TFR指令的數(shù)據(jù)傳送規(guī)則是: (1)8位到8位或16位到16位,直接傳送; (2)8位到16位,通過符號擴(kuò)展變成16位后傳送;TFR A,X等同于SEX A,X (3)16位到8位,舍棄高位,只傳送低位。 需要說明的是,數(shù)據(jù)從8位寄存器傳送到16位寄存器,8位寄存器的內(nèi)容傳送到16位寄存器的低8位,S12自動在目的寄存器的最高有效字節(jié)中執(zhí)行一次符號擴(kuò)展。符號擴(kuò)展的原則是,如果8位寄存器的最高位是0,則16位寄存器的高8位為$00;如果8位寄存器的最高位是1,則16位寄存器的高8位為$FF。,3.4.1.5 寄存器數(shù)據(jù)交換指令 將源寄存器內(nèi)容與目的寄存器內(nèi)容進(jìn)行交換,共3條指令,如表3.5所示,均為固有尋址方式。實(shí)際上該組指令只有1條EXG指令,XGDX和XGDY指令是為兼容68HC11而保留的偽指令,由匯編程序自動匯編成對應(yīng)的EXG指令,如表3.5中陰影部分所示。 注:R1和R2分別是寄存器A、B、CCR、D、X、Y、SP、TMP2、TMP3之一。但TMP3只能作為第1操作數(shù)寄存器,TMP2只能作為第2操作數(shù)寄存器。,表3.5寄存器數(shù)據(jù)交換指令,基于HCS12的嵌入式系統(tǒng)設(shè)計,3.4 S12匯編指令系統(tǒng)(4),該指令可以在任意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。,表3.8 內(nèi)存數(shù)據(jù)移動指令,3.4.1.6 內(nèi)存數(shù)據(jù)移動指令 可以將源操作數(shù)(一個字或字節(jié))送到目地地址,源操作數(shù)不變。這是S12僅有的兩條不涉及內(nèi)部寄存器而直接進(jìn)行內(nèi)存單元之間數(shù)據(jù)傳送的指令,支持6種尋址方式:IMM-EXT、IMM-IDX、EXT-EXT、EXT-IDX、IDX-EXT、IDX-IDX,如表3.8所示。,3.4.1.7 堆棧操作指令 S12堆棧操作僅限于寄存器與堆棧之間的數(shù)據(jù)傳送,使用堆棧指針進(jìn)行間接尋址。堆棧操作分為進(jìn)棧和出棧兩種,操作循序正好相反,即指針先遞減,后壓棧;先彈出,指針后遞增。指令共計12條,入棧和出棧各6條,均為固有尋址方式。指令如表3.9所示。,表3.9 堆棧操作指令,基于HCS12的嵌入式系統(tǒng)設(shè)計,3.4 S12匯編指令系統(tǒng)(5),3.4.2.1加法指令 S12加法運(yùn)算分為兩類,一類是兩個寄存器內(nèi)容的加法,另一類是寄存器內(nèi)容與立即數(shù)或內(nèi)存單元內(nèi)容的加法,運(yùn)算結(jié)果保存在寄存器中,所有加法指令都影響標(biāo)志位。 兩個寄存器的加法指令如表3.10所示,共有3條指令,但ABX和ABY指令是為兼容68HC11而保留,由匯編程序自動匯編成對應(yīng)的LEAX指令,如表3.10中陰影部分所示。 寄存器與立即數(shù)或內(nèi)存單元的加法如表3.11所示,共有5條指令,支持8種尋址方式:IMM、DIR、EXT、IDX、IDX1、IDX2、D,IDX、IDX2,由此派生出40條指令。其中2條為帶進(jìn)位的加法指令,3條為不帶進(jìn)位的加法指令。,表3.10 加法指令1,表3.11 加法指令2,表3.12 減法指令,3.4.2.2減法指令 S12減法運(yùn)算也分為兩類,一類是兩個寄存器內(nèi)容的減法,另一類是寄存器內(nèi)容與立即數(shù)或內(nèi)存單元內(nèi)容的減法,運(yùn)算結(jié)果保存在寄存器中,所有減法指令都影響標(biāo)志位。 兩個寄存器內(nèi)容的減法指令為SBA,計算A-B,結(jié)果存放在A中。寄存器與立即數(shù)或內(nèi)存單元的減法如表3.12所示,共有5條指令,支持8種尋址方式:IMM、DIR、EXT、IDX、IDX1、IDX2、D,IDX、IDX2。其中2條為帶借位的減法指令,3條為不帶借位的減法指令。,基于HCS12的嵌入式系統(tǒng)設(shè)計,3.4 S12匯編指令系統(tǒng)(6),3.4.2.3 加1和減1指令 S12分別具有一組用于指針調(diào)整或循環(huán)控制的加1和減1指令,每組有6條指令,操作對象是寄存器A、B、X、Y、SP或內(nèi)存單元,如表3.13和表3.14所示。其中,寄存器A、B、X、Y加1或減1指令為固有尋址,對內(nèi)存單元的操作則支持6種尋址方式:EXT、IDX、IDX1、IDX2、D,IDX、IDX2。其中,INS和DES指令是為兼容68HC11而保留,由匯編程序自動匯編成對應(yīng)的LEAS指令,為變址尋址IDX方式,如表3.13和表3.14中陰影部分所示。,3.4.2.4 十進(jìn)制調(diào)整指令 S12只有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。,表3.13 加1指令,表3.14 減1指令,基于HCS12的嵌入式系統(tǒng)設(shè)計,3.4 S12匯編指令系統(tǒng)(7),3.4.2.5 清零指令 清零指令用來向寄存器或內(nèi)存單元中寫入$00,功能上與加載立即數(shù)$00的指令相同,共有3條指令,如表3.15所示。寄存器清零只針對A和B,為固有尋址方式。內(nèi)存單元清零指令支持6種尋址方式:EXT、IDX、IDX1、IDX2、D,IDX、IDX2。 3.4.2.6 符號擴(kuò)展指令 單字節(jié)無符號數(shù)通過高位補(bǔ)0可以擴(kuò)展成任意寬度,而對于有符號數(shù),由于采用補(bǔ)碼表示,高位可能需要補(bǔ)0或補(bǔ)1,因此,S12設(shè)置了符號擴(kuò)展指令SEX,為固有尋址方式。符號擴(kuò)展過程是,將原數(shù)據(jù)符號位復(fù)制到已擴(kuò)展數(shù)據(jù)的所有高位。指令要求源操作數(shù)是A、B或CCR中的內(nèi)容,擴(kuò)展后的結(jié)果存放在D、X、Y或SP中。指令格式為: SEX R1, R2 ;R1=A、B或CCR,R2=D、X、Y或SP,相當(dāng)于TFR R1, R2 3.4.2.7 乘法指令 S12乘法全部在寄存器內(nèi)完成,可以實(shí)現(xiàn)兩個8位或16位的硬件乘法運(yùn)算,共有3條指令,均為固有尋址方式,如3.16所示。,表3.15 清零指令,表3.16乘法指令,基于HCS12的嵌入式系統(tǒng)設(shè)計,3.4 S12匯編指令系統(tǒng)(8),3.4.2.8 除法指令 S12除法全部在寄存器內(nèi)完成,可以實(shí)現(xiàn)16/16位或32/16位的硬件除法運(yùn)算,共有5條指令,均為固有尋址方式,如3.17所示。 EDIV和EDIVS為常規(guī)32/16除法指令,分別按無符號數(shù)和有符號數(shù)相除;FDIV是小數(shù)除法指令,即求真分?jǐn)?shù)D/X的值;IDIV和IDIVS分別是無符號和有符號整數(shù)16/16除法指令,區(qū)別在于IDIVS指令的商和余數(shù)用補(bǔ)碼表示。 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種尋址方式:IMM、DIR、EXT、IDX、IDX1、IDX2、D,IDX、IDX2,如表3.18所示。,表3.18 比較指令,表3.17 除法指令,基于HCS12的嵌入式系統(tǒng)設(shè)計,3.4 S12匯編指令系統(tǒng)(9),3.4.2.10 測試指令 測試指令用于檢測累加器A、B或內(nèi)存單元的內(nèi)容是否0,相當(dāng)于一次減0操作。操作后,源操作數(shù)不變,也不保存結(jié)果,只是根據(jù)結(jié)果設(shè)置標(biāo)志位。 該類指令有3條,如表3.19所示。其中,TSTA和TSTB為固有尋址,TST允許使用6種尋址方式: EXT、IDX、IDX1、IDX2、D,IDX、IDX2。,表3.19測試指令,3.4.3 邏輯運(yùn)算指令 S12的邏輯運(yùn)算指令包括基本邏輯運(yùn)算、取反和求補(bǔ)、移位、位操作、位邏輯運(yùn)算和位測試等指令。 3.4.3.1 基本邏輯運(yùn)算指令 基本邏輯運(yùn)算指令按字節(jié)進(jìn)行“與”、“或”、“異或”邏輯運(yùn)算,用于將寄存器中的某些位清0或置1,共有8條指令,如表3.20所示。其中,針對CCR的操作只允許立即尋址,針對累加器A、B的操作支持8種尋址方式:IMM、DIR、EXT、IDX、IDX1、IDX2、D,IDX、IDX2。 3.4.3.2 取反、求補(bǔ)指令 取反、求補(bǔ)指令將累加器A、B或內(nèi)存單元內(nèi)容取反和求補(bǔ),結(jié)果放回原處,共有6條指令,如表3.21所示。其中,針對累加器A、B的操作為固有尋址,針對內(nèi)存單元的操作支持6種尋址方式:EXT、IDX、IDX1、IDX2、D,IDX、IDX2。 取反指令相當(dāng)于執(zhí)行一次$FF-(r)或$FF-(M)操作;求補(bǔ)指令實(shí)際上進(jìn)行一次$00-(r)或$00-(M)的減法操作。,基于HCS12的嵌入式系統(tǒng)設(shè)計,3.4 S12匯編指令系統(tǒng)(10),3.4.3.3 位操作與位測試指令 位操作與位測試指令如表3.22所示,共有7條指令。 位操作指令5條,用于將內(nèi)存單元中的某1位或某幾位清0或置1。其中,CCR特征位操作指令CLC、CLI、CLV是為了兼容68HC11而保留,匯編程序自動匯編成ANDCC指令,為立即尋址方式。內(nèi)存單元清0、置1指令BCLR和BSET支持5種尋址方式:DIR、EXT、IDX、IDX1、IDX2。 BCLR指令將一個8位屏蔽字節(jié)取反后,與內(nèi)存單元中的內(nèi)容作“邏輯與”運(yùn)算,結(jié)果送回原處,8位屏蔽字節(jié)被用于指定內(nèi)存單元的哪些位為0,即若8位屏蔽數(shù)的某位為1,則內(nèi)存單元的對應(yīng)位被清0。 BSET指令將一個8位屏蔽字節(jié)與內(nèi)存單元中的內(nèi)容作“邏輯或”運(yùn)算,結(jié)果送回原處,相當(dāng)于將8位屏蔽字節(jié)中的1送到內(nèi)存單元的對應(yīng)位。 位測試指令有2條,即BITA、BITB,支持8種尋址方式:IMM、DIR、EXT、IDX、IDX1、IDX2、D,IDX、IDX2。位測試指令將累加器A、B內(nèi)容與立即數(shù)或內(nèi)存單元內(nèi)容進(jìn)行“邏輯與”運(yùn)算,但結(jié)果并不回送,僅僅根據(jù)運(yùn)算結(jié)果設(shè)置標(biāo)志位N、Z、V。,表3.21 取反、求補(bǔ)指令,表3.20邏輯運(yùn)算指令,表3.22位操作與位測試指令,基于HCS12的嵌入式系統(tǒng)設(shè)計,3.4 S12匯編指令系統(tǒng)(11),3.4.3.4 邏輯移位指令 邏輯移位指令如表3.23所示,共有8條指令,分為邏輯左移LSL和邏輯右移LSR兩種。其中,針對累加器A、B、D的操作為固有尋址,針對內(nèi)存單元的操作支持6種尋址方式:EXT、IDX、IDX1、IDX2、D,IDX、IDX2。 3.4.3.5 算術(shù)移位指令 算術(shù)移位指令如表3.24所示,共有7條指令,分為算術(shù)左移ASL和算術(shù)右移ASR兩種。其中,針對累加器A、B、D的操作為固有尋址,針對內(nèi)存單元的操作支持6種尋址方式:EXT、IDX、IDX1、IDX2、D,IDX、IDX2。 3.4.3.6 循環(huán)移位指令 循環(huán)移位指令如表3.25所示,共有6條指令,分為循環(huán)左移ROL和循環(huán)右移ROR兩種。其中,針對累加器A、B的操作為固有尋址,針對內(nèi)存單元的操作支持6種尋址方式:EXT、IDX、IDX1、IDX2、D,IDX、IDX2。,表3.23 邏輯移位指令表 3.24 算術(shù)移位指令表 3.25 循環(huán)移位指令,基于HCS12的嵌入式系統(tǒng)設(shè)計,3.4 S12匯編指令系統(tǒng)(12),3.4.4 高級函數(shù)指令 S12的高級函數(shù)指令具有高級語言中某些函數(shù)的功能,如求最大值、最小值,乘積累加,內(nèi)插值運(yùn)算等。 3.4.4.1 求最大值、最小值指令 求最大值、最小值指令如表3.26所示,用于在累加器A、D與內(nèi)存操作數(shù)之間取最大或最小的一個,共有8條指令,求最大值和最小值各有4條指令,支持5種尋址方式。其中,以字母M開頭的4條為8位指令,以字母E開頭的4條為16位指令。雖然這些指令自動完成數(shù)據(jù)的比較和傳送,但標(biāo)志位顯示了比較的結(jié)果和是否發(fā)生了數(shù)據(jù)傳送。,表3.26 求最大值、最小值指令,3.4.4.2 乘積累加指令 乘積累加指令只有1條EMACS,采用特殊尋址方式。可實(shí)現(xiàn)帶符號數(shù)的16位乘法和32位累加運(yùn)算,隱含使用寄存器X和Y,指令功能為: EMACS opr16a ;(M(X):M(X+1) (M(Y):M(Y+1)+(MM+3)MM+3 操作過程是:先將X和Y所指向的兩個16位內(nèi)存操作數(shù)相乘,然后將32位乘積與一個擴(kuò)展尋址的32位內(nèi)存操作數(shù)相加,結(jié)果仍然保存在該地址。指令要求兩個乘數(shù)及32位內(nèi)存被加數(shù)均為有符號數(shù)。,基于HCS12的嵌入式系統(tǒng)設(shè)計,3.4 S12匯編指令系統(tǒng)(13),3.4.4.3 查表與插值指令 查表與插值指令有2條,采用變址尋址IDX方式。其中,TBL為8位內(nèi)插值操作,結(jié)果保存在累加器A中;ETBL為16位內(nèi)插值操作,結(jié)果保存在累加器D中。指令功能為: TBL oprx0_xysppc ;(M)+(B)(M +1)- (M)A ETBL oprx0_xysppc ;(M:M+1)+(B)(M+2:M+3)- (M:M+1)D 3.4.5 程序控制指令 程序控制指令通過改變程序計數(shù)器PC的內(nèi)容,使MCU從正常的執(zhí)行順序改變到不同的程序流程。分為轉(zhuǎn)移和調(diào)用兩大類,前者為永久轉(zhuǎn)移,不再返回;后者執(zhí)行完新的任務(wù)后,返回原地繼續(xù)執(zhí)行。其中,轉(zhuǎn)移指令又分為無條件轉(zhuǎn)移和有條件轉(zhuǎn)移兩種。 3.4.5.1 無條件轉(zhuǎn)移指令 無條件轉(zhuǎn)移指令如表3.27所示,共有5條指令,前4條(兩對)指令采用相對尋址方式,指令中需給出地址偏移量。其中,BRA為無條件固定短轉(zhuǎn)移,使用8位地址偏移量;BRN為不轉(zhuǎn)移,相當(dāng)于空操作指令。無條件固定長轉(zhuǎn)移,也配套有相應(yīng)的LBRA、LBRN指令,采用16位地址偏移量。,兩條不轉(zhuǎn)移指令BRN和LBRN主要用于程序的調(diào)試。 JMP指令支持6種尋址方式:EXT、IDX、IDX1、IDX2、D,IDX、IDX2,允許直接或間接給定目標(biāo)地址,然后將目標(biāo)地址直接賦給PC。JMP指令的轉(zhuǎn)移范圍是64KB空間,執(zhí)行時不影響標(biāo)志位,但將清除指令隊(duì)列。,表3.27 無條件轉(zhuǎn)移指令,基于HCS12的嵌入式系統(tǒng)設(shè)計,3.4 S12匯編指令系統(tǒng)(14),3.4.5.2 條件短轉(zhuǎn)移指令 條件短轉(zhuǎn)移指令分為兩類。 一類是根據(jù)標(biāo)志位的狀態(tài)決定是否轉(zhuǎn)移,但指令只檢查有關(guān)標(biāo)志位狀態(tài),而不管這些狀態(tài)如何生成,也不影響任何標(biāo)志位。該類指令共有16條,采用相對尋址方式,地址偏移量為8位帶符號數(shù),最大轉(zhuǎn)移范圍是-128+127,如表3.28所示。 另一類指令包含產(chǎn)生轉(zhuǎn)移條件的操作,且并不影響標(biāo)志,也不依賴標(biāo)志,而是根據(jù)操作結(jié)果決定是否轉(zhuǎn)移,雖然指令中也出現(xiàn)了8位地址偏移量,但卻并不單純?yōu)橄鄬ぶ?,而是包含多種尋址方式,按對源操作數(shù)的尋址,有5種尋址方式:DIR、EXT、IDX、IDX1、IDX2,該類指令只有2條,如表3.29所示。,表3.28 條件短轉(zhuǎn)移指令1,表3.29 條件短轉(zhuǎn)移指令2,基于HCS12的嵌入式系統(tǒng)設(shè)計,3.4 S12匯編指令系統(tǒng)(15),3.4.5.3 條件長轉(zhuǎn)移指令 條件長轉(zhuǎn)移指令如表3.30所示,共有16條指令,采用相對尋址方式,與表3.28條件短轉(zhuǎn)移指令相對應(yīng),區(qū)別在于轉(zhuǎn)移距離可達(dá)-3

溫馨提示

  • 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

提交評論