ARM指令系統(tǒng)詳解課件_第1頁
ARM指令系統(tǒng)詳解課件_第2頁
ARM指令系統(tǒng)詳解課件_第3頁
ARM指令系統(tǒng)詳解課件_第4頁
ARM指令系統(tǒng)詳解課件_第5頁
已閱讀5頁,還剩102頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、2.3 ARM/THUMB指令系統(tǒng) 2.3.1 ARM處理器尋址方式 尋址方式是根據(jù)指令中給出的地址碼字段來實現(xiàn)尋找真實操作數(shù)地址的方式。ARM處理具有9種基本尋址方式。1. 寄存器尋址 操作數(shù)的值在寄存器中,指令中的地址碼字段指出的是寄存器編號,指令執(zhí)行時直接取出寄存器值來操作。寄存器尋址指令舉例如下: MOV R1,R2;讀取R2的值 SUB R0,R1,R2;將R1的值減去R2的;值,結(jié)果保存到R0中2. 立即尋址立即尋址指令中的操作碼字段后面的地址碼部分即是操作數(shù)本身。也就是說,數(shù)據(jù)就包含在指令當(dāng)中。立即尋址指令舉例如下: SUBS R0,R0,#1;R0減1,結(jié)果放入R0,并且影響標(biāo)

2、志位 MOV R0,#0 xFF000;將立即數(shù)0 xFF000裝入R0寄存器 立即數(shù)要以“#”號為前綴,16進制數(shù)值時以“0 x”表示。 3. 寄存器偏移尋址 寄存器偏移尋址是ARM指令集特有的尋址方式。當(dāng)?shù)?個操作數(shù)是寄存器偏移方式時,第2個寄存器操作數(shù)在與第1個操作數(shù)結(jié)合之前,選擇進行移位操作。寄存器偏移尋址指令舉例如下:MOV R0,R2,LSL #3 ;R2的值左移3位,結(jié)果放人R0ANDS R1,R1,R2,LSL R3;R2的值左移R3位,與R1相“與”,結(jié)果放入R1可采用的移位操作如下:各種移位操作如圖所示,LSL為邏輯左移,LSR為邏輯右移,ASR為算術(shù)右移,ROR為循環(huán)右移

3、,RRX為帶擴展的循環(huán)右移1位。C5)RRX移位操作4)ROR移位操作3)ASR移位操作1)LSL移位操作2)LSR移位操作4寄存器間接尋址 寄存器間接尋址是寄存器中存放操作數(shù)的地址。舉例如下:LDR R1,R2;將R2指向的存儲單元的數(shù)據(jù)讀出,保存在R1中SWP R1,R1,R2;將寄存器R1的值與R2指定的存儲單元的內(nèi)容交換r2-r1R1-r25. 基址尋址基址尋址就是將基址寄存器的內(nèi)容與指令中給出的偏移量相加,形成操作數(shù)的有效地址。舉例如下:LDR R2,R3,#0 x0C;讀取R3 + 0 x0C地址上的存儲單元的內(nèi)容,放人R2STR R1,R0,#-4!;先R0 = R0 - 4,然

4、后把R1的值保存到R0指定的存儲單元LDR R1,R0,R3,LSL#1;將R0+R32地址上的存儲單元的內(nèi)容讀出,存入R1 6. 多寄存器尋址 多寄存器尋址即是一次可傳送幾個寄存器值,允許一條指令傳送16個寄存器的任何子集或所有寄存器。多寄存器尋址指令舉例如下: LDMIA R1!,R2-R7,R12;將R1指向的單元中的數(shù)據(jù)讀出到R2R7、R12中,(R1自動加1) STMIA R0!,R2-R7,R12;將寄存器R2R7、R12的值保存到R0指向的存儲單元中(R0自動加1) 使用多寄存器尋址指令時,寄存器子集的順序是按由小到大的順序排列,連續(xù)的寄存器可用“-”連接;否則用“,”分隔書寫。

5、 7. 堆棧尋址 堆棧尋址是隱含的,它使用一個專門的寄存器(堆棧指針)指向一塊存儲區(qū)域(堆棧)。指針?biāo)赶虻拇鎯卧词嵌褩5臈m敗4鎯ζ鞫褩?煞譃閮煞N:向上生長:向高地址方向生長,稱為遞增堆棧。向下生長:向低地址方向生長,稱為遞減堆棧。 堆棧指針指向最后壓入的堆棧的有效數(shù)據(jù)項,稱為滿堆棧; 堆棧指針指向下一個待壓入數(shù)據(jù)的空位置,稱為空堆棧。 這樣就有4種類型的堆棧表示遞增和遞減的滿和空堆棧的各種組合。 滿遞增:堆棧通過增大存儲器的地址向上增長,堆棧指針指向內(nèi)含有效數(shù)據(jù)項的最高地址。指令如LDMFA、STMFA(ascend)等??者f增:堆棧通過增大存儲器的地址向上增長,堆棧指針指向堆棧上的第

6、一個空位置。指令如LDMEA、STMEA等。滿遞減:堆棧通過減小存儲器的地址向下增長,堆棧指針指向內(nèi)含有效數(shù)據(jù)項的最低地址。指令如LDMFD、STMFD等??者f減:堆棧通過減小存儲器的地址向下增長,堆棧指針指向堆棧下的第一個空位置。指令如LDMED、STMED等。 堆棧尋址指令舉例如下:STMFD SP!,R1-R7,LR ;將R1R7、LR入棧。滿遞減堆棧LDMFD SP!,R1-R7,LR ;數(shù)據(jù)出棧,放人R1R7、LR寄存器。滿遞減堆棧8. 塊拷貝尋址多寄存器傳送指令用于將一塊數(shù)據(jù)從存儲器的某一位置拷貝到另一位置。例如:STMIA R0!,R1-R7 ;將R1R7的數(shù)據(jù)保存到存儲器中。存

7、儲指針在保存第一個值之后增加,增長方向為向上增長。STMIB R0!,R1-R7 ;將R1R7的數(shù)據(jù)保存到存儲器中。存儲指針在保存第一個值之前增加,增長方向為向上增長 增加 之前STMIBSTMFALDMIBLDMED 之后STMIASTMEALDMIALDMFD 減少 之前LDMDBLDMEASTMDBSTMFD 之后LDMDALDMFASTMDASTMED 向上生長 向下生長 滿 空 滿 空 增長的方向增長的先后多寄存器傳送指令映射9. 相對尋址 相對尋址是基址尋址的一種變通。由程序計數(shù)器PC提供基準(zhǔn)地址,指令中的地址碼字段作為偏移量,兩者相加后得到的地址即為操作數(shù)的有效地址。相對尋址指令

8、舉例如下:BL SUBRl ;調(diào)用到SUBRl子程序. . .SUBR1MOV PC,R14 ;返回2.3.2 ARM指令集介紹 ARM7TDMI(-S)的指令集,包括ARM指令集和Thumb指令集。首先介紹ARM指令的基本格式及靈活的操作數(shù),然后介紹條件碼,再把ARM指令集、Thumb指令集按類分別說明。 1. 指令格式 ARM指令的基本格式如下: S , 其中:opcode 指令助記符,如LDR、STR等。cond 執(zhí)行條件,如EQ、NE等。S 是否影響CPSR寄存器的值,書寫時影響CPSR。Rd 目標(biāo)寄存器。Rn 第1個操作數(shù)的寄存器。operand2 第2個操作數(shù)。 在上面的基本格式中

9、,“”符號內(nèi)的項是必需的,“”符號內(nèi)的項是可選的。例如,是指令助記符,這是必須書寫的;而為指令執(zhí)行條件,是可選項。若不書寫,則使用默認條件AL(無條件執(zhí)行)。 指令格式舉例如下:LDR R0,R1;讀取R1地址上的存儲器單元內(nèi)容,執(zhí)行條件ALBEQ D1 ;分支指令,執(zhí)行條件EQ,即相等則跳轉(zhuǎn)到D1ADDS R1,R1,#1;加法指令,R1+1R1,影響CPSR寄存器(S)SUBNES R1,R1,#0 x10;條件執(zhí)行減法運算(NE),R1-0 x10=R1,影響CPSR寄存器(S) 在ARM指令中,靈活地使用第2個操作數(shù)能夠提高代碼效率。第2個操作數(shù)的形式如下: (1) #inmed_8r

10、常數(shù)表達式 該常數(shù)必須對應(yīng)8位位圖,即常數(shù)是由一個8位的常數(shù)循環(huán)移位偶數(shù)位得到的。合法常量:0 x3FC、0、0 xF0000000、200、0 xF0000001。非法常量:0 xlFE、511、0 xFFFF、0 x1010、0 xF0000010。常數(shù)表達式應(yīng)用舉例: MOV R0,#1 ;R01 AND R1,R2,#0 x0F ;R2與0 x0F,結(jié)果保存在Rl LDR R0,R1,#-4;讀取R1地址上的存儲器單元內(nèi)容,且R1R1- 4(2) Rm在寄存器方式下,操作數(shù)即為寄存器的數(shù)值。寄存器方式應(yīng)用舉例:SUB R1,R1,R2 ;R1-R2R1MOV PC,R0 ;PC=R0,

11、程序跳轉(zhuǎn)到指定地址LDR R0,R1,-R2 ;Rl所指存儲器單元內(nèi)容存人R0,且R1 = R1 - R2 (3) Rm,shift寄存器移位方式將寄存器的移位結(jié)果作為操作數(shù),但Rm值保存不變,移位方法如下: ASR #n 算術(shù)右移n位(1n32)。LSL #n 邏輯左移n位(1n31)。LSR #n 邏輯右移n位(1n32)。ROR #n 循環(huán)右移n位(1n31)。RRX 帶擴展的循環(huán)右移1位。type Rs其中,type為ASR、LSL、LSR和ROR中的一種;Rs為偏移量寄存器,低8位有效。若其值大于或等于32,則第2個操作數(shù)的結(jié)果為0 (ASR、ROR例外)。寄存器偏移方式應(yīng)用舉例:

12、ADD R1,R1,R1,LSL #3 ;R1=R19 SUB R1,R1,R2,LSR #2 ;R1=R1-R24 2. 條件碼使用指令條件碼可實現(xiàn)高效的邏輯操作。表3-6所列為指令條件碼表。 對于Thumb指令集,只有B指令具有條件碼執(zhí)行功能。此指令的條件碼同表3-6。但如果為無條件執(zhí)行,條件碼助記符AL不能在指令中書寫。3. ARM存儲器訪問指令 ARM處理器是加載存儲體系結(jié)構(gòu)的典型的RISC處理器,對存儲器的訪問只能使用加載和存儲指令實現(xiàn)。ARM的加載存儲指令可以實現(xiàn)字、半字、無符號有符號字節(jié)操作;多寄存器加載存儲指令可實現(xiàn)一條指令加載存儲多個寄存器的內(nèi)容,效率大大提高;SWP指令是一

13、條寄存器和存儲器內(nèi)容交換的指令,可用于信號量操作等。 ARM處理器是馮諾依曼存儲結(jié)構(gòu),程序空間、RAM空間及I/O映射空間統(tǒng)一編址,除對RAM操作以外,對外圍I/O、程序數(shù)據(jù)的訪問均要通過加載存儲指令進行。表3-7所列為ARM存儲器訪問指令表。 (1) LDR和STR加載存儲指令 加載存儲字和無符號字節(jié)指令 使用STR指令將單一字節(jié)或字存儲到內(nèi)存,使用LDR指令從內(nèi)存中加載單一字節(jié)或字到寄存器。LDR指令用于從內(nèi)存中讀取數(shù)據(jù)放入寄存器中;STR指令用于將寄存器中的數(shù)據(jù)保存到內(nèi)存。指令格式如下:LDRcondT Rd,;加載指定地址上的數(shù)據(jù)(字),放人Rd中STRcondT Rd,;存儲數(shù)據(jù)(字

14、)到指定地址的存儲單元,要存儲的數(shù)據(jù)在Rd中LDRcondT Rd,;加載字節(jié)數(shù)據(jù),放入Rd中,即Rd最低字節(jié)有效,高24位清零STRcondBT Rd, ;存儲字節(jié)數(shù)據(jù),要存儲的數(shù)據(jù)在Rd,最低字節(jié)有效其中,T為可選后綴。若指令有T,那么即使處理器是在特權(quán)模式下,存儲系統(tǒng)也將訪問看成是處理器是在用戶模式下。T在用戶模式下無效,不能與前索引偏移一起使用T。LDR/STR指令尋址是非常靈活的,由兩部分組成,一部分為一個基址寄存器,可以為任一個通用寄存器;另一部分為一個地址偏移量。地址偏移量有以下3種格式:立即數(shù)立即數(shù)可以是一個無符號的數(shù)值。這個數(shù)據(jù)可以加到基址寄存器,也可以從基址寄存器中減去這個

15、數(shù)值。指令舉例如下:LDR R1,R0,#0 x12 ;將R0+0 x12地址處的數(shù)據(jù)讀出,保存到Rl中(R0的值不變)LDR R1,R0,# -0 x12 ;將R0-0 x12地址處的數(shù)據(jù)讀出,保存到R1中(R0的值不變) 寄存器 寄存器中的數(shù)值可以加到基址寄存器,也可以從基址寄存器中減去這個數(shù)值。指令舉例如下:LDR R1,R0,R2 ;將R0+R2地址處的數(shù)據(jù)讀出,保存到R1中LDR R1,R0,-R2 ;將R0-R2地址處的數(shù)據(jù)讀出,保存到R1中寄存器及移位常數(shù) 寄存器移位后的值可以加到基址寄存器,也可以從基址寄存器中減去這個數(shù)值。指令舉例如下:LDR R1,R0,R2,LSL #2;

16、將R0+R24地址處的數(shù)據(jù)讀出,保存到R1中(R0、R2的值不變)LDR R1,R0,-R2,LSL #2;將R0-R24地址處的數(shù)據(jù)讀出,保存到R1中(R0、R2的值不變) 從尋址方式的地址計算方法分,加載/存儲指令有以下4種形式: 零偏移:Rn的值作為傳送數(shù)據(jù)的地址,即地址偏移量為0。 指令舉例如下:LDR Rd,Rn前索引偏移:在數(shù)據(jù)傳送之前,將偏移量加到Rn中,其結(jié)果作為傳送數(shù)據(jù)的存儲地址。若使用后綴“!”,則結(jié)果寫回到Rn中,且Rn的值不允許為R15。 指令舉例如下: LDR Rd,Rn,#0 x04! LDR Rd,Rn,# -0 x04程序相對偏移: 程序相對偏移是前索引形式的另

17、一個版本。匯編器由PC寄存器計算偏移量,并將PC寄存器作為Rn生成前索引指令。不能使用后綴“!” 指令舉例如下:LDR Rd,label ;label為程序標(biāo)號。label必須是在當(dāng)前指令4 KB范圍內(nèi)后索引偏移: Rn的值用做傳送數(shù)據(jù)的存儲地址。在數(shù)據(jù)傳送后,將偏移量與Rn相加,結(jié)果寫回到Rn中。Rn不允許是R15。 指令舉例如下:LDR Rd,Rn,#0 x04地址對齊大多數(shù)情況下,必須保證用于32位傳送的地址是32位對齊的。 加載存儲半字和有符號字節(jié) 這類LDR/STR指令可加載有符字節(jié),加載有符號半字,加載存儲無符號半字。偏移量格式、尋址方式與加載存儲字和無符號字節(jié)指令相同。指令格式如

18、下:LDRcondSB Rd, ;加載指定地址上的數(shù)據(jù)(有符號字節(jié)),放入Rd中LDRcondSH Rd, ;加載指定地址上的數(shù)據(jù)(有符號半字),放入Rd中LDRcondH Rd,;加載半字?jǐn)?shù)據(jù),放人Rd中,即Rd最低16位有效,高16位清零. STRcondH Rd, ;存儲半字?jǐn)?shù)據(jù),要存儲的數(shù)據(jù)在Rd,最低16位有效說明:有符號位半字字節(jié)加載是指有符號位加載擴展到32位;無符號位半字加載是指零擴展到32位。地址對齊對半字傳送的地址必須為偶數(shù)。非半字對齊的半字加載將使Rd內(nèi)容不可靠;非半字對齊的半字存儲將使指定地址的2字節(jié)存儲內(nèi)容不可靠。加載存儲半字和有符號字節(jié)指令舉例如下:LDRSB R1

19、,R0,R3 ;將R0+R3地址上的字節(jié)數(shù)據(jù)讀到R1,高24位用符號位擴展LDRSH R1,R9 ;將R9地址上的半字?jǐn)?shù)據(jù)讀出到R1,高16位用符號位擴展LDRH R6,R2,#2;將R2地址上的半字?jǐn)?shù)據(jù)讀出到R6,高16位用零擴展,R2=R2+2STRH R1,Ro,#2!;將R1的數(shù)據(jù)保存到R0+2地址中,只存儲低2字節(jié)數(shù)據(jù),R0=R0+2LDR/STR指令用于對內(nèi)存變量的訪問、內(nèi)存緩沖區(qū)數(shù)據(jù)的訪問、查表、外圍部件的控制操作等等。若使用LDR指令加載數(shù)據(jù)到PC寄存器,則實現(xiàn)程序跳轉(zhuǎn)功能,這樣也就實現(xiàn)了程序散轉(zhuǎn)。 (2) LDM和STM-多寄存器加載存儲指令 LDM和STM指令可以實現(xiàn)在一組

20、寄存器和一塊連續(xù)的內(nèi)存單元之間傳輸數(shù)據(jù)。LDM為加載多個寄存器;STM為存儲多個寄存器。允許一條指令傳送16個寄存器的任何子集或所有寄存器。指令格式如下:LDMcond Rn!,reglistSTMcond Rn!,reglistLDM/STM的主要用途是現(xiàn)場保護、數(shù)據(jù)復(fù)制和參數(shù)傳送等。其模式有如下8種(前面4種用于數(shù)據(jù)塊的傳輸,后面4種是堆棧操作):IA: 每次傳送后地址加4;IB: 每次傳送前地址加4;DA: 每次傳送后地址減4;DB: 每次傳送前地址減4;FD: 滿遞減堆棧;ED: 空遞減堆棧;FA: 滿遞增堆棧;EA: 空遞增堆棧。 指令格式中,寄存器Rn為基址寄存器,裝有傳送數(shù)據(jù)的初

21、始地址,Rn不允許為R15。后綴“!”表示最后的地址寫回到Rn中。寄存器列表reglist可包含多于一個寄存器或包含寄存器范圍,使用“,”分開,如R1,R2,R6R9,寄存器按由小到大排列。后綴“”不允許在用戶模式或系統(tǒng)模式下使用。若在LDM指令且寄存器列表中包含有PC時使用,那么除了正常的多寄存器傳送外,將SPSR也拷貝到CPSR中,這可用于異常處理返回。使用后綴“”進行數(shù)據(jù)傳送且寄存器列表不包含PC時,加載存儲的是用戶模式的寄存器,而不是當(dāng)前模式的寄存器。當(dāng)Rn在寄存器列表中且使用后綴“!”時,對于STM指令,若Rn為寄存器列表中的最低數(shù)字的寄存器,則會將Rn的初值保存;其它情況下Rn的加

22、載值和存儲值不可預(yù)知。地址對齊這些指令忽略地址位1:0。舉例如下:LDMIA R0!,R3 - R9;加載R0指向地址上的多字?jǐn)?shù)據(jù),保存到R3R9中,R0值更新STMIA R1!,R3 - R9;將R3R9的數(shù)據(jù)存儲到R1指向的地址上,R1值更新 STMFD SP!,R0 - R7,LR ;現(xiàn)場保存,將R0R7、LR人棧LDMFD SP!,R0 - R7,PC ;恢復(fù)現(xiàn)場,異常處理返回(3) SWP寄存器和存儲器交換指令SWP指令用于將一個內(nèi)存單元(該單元地址放在寄存器Rn中)的內(nèi)容讀取到一個寄存器Rd中,同時將另一個寄存器Rm的內(nèi)容寫入到該內(nèi)存單元中。使用SWP可實現(xiàn)信號量操作。 指令格式如

23、下:SWPcondB Rd,Rm,Rn其中,B為可選后綴,若有B,則交換字節(jié),否則交換32位字;Rd為數(shù)據(jù)從存儲器加載到的寄存器;Rm的數(shù)據(jù)用于存儲到存儲器中,若Rm與Rd相同,則為寄存器與存儲器內(nèi)容進行交換;Rn為要進行數(shù)據(jù)交換的存儲器地址,Rn不能與Rd和Rm相同。 指令舉例如下: SWP Rl,R1,R0;將Rl的內(nèi)容與R0指向的存儲單元的內(nèi)容進行交換 SWPB R1,R2,R0;將R0指向的存儲單元的內(nèi)容讀取字節(jié)數(shù)據(jù)到R1中(高24位清零),并將R2的內(nèi)容寫入到該內(nèi)存單元中(最低字節(jié)有效) 4. ARM數(shù)據(jù)處理指令A(yù)RM數(shù)據(jù)處理指令(見表3-8)大致可分為3類:數(shù)據(jù)傳送指令(如MOV、

24、MVN)、算術(shù)邏輯運算指令(如ADD、SUB、AND)和比較指令(如CMP、TST)。數(shù)據(jù)處理指令只能對寄存器的內(nèi)容進行操作。所有ARM數(shù)據(jù)處理指令均可選擇使用S后綴,以影響狀態(tài)標(biāo)志。比較指令CMP、CMN、TST和TEQ不需要后綴S,它們會直接影響狀態(tài)標(biāo)志。 (1) 數(shù)據(jù)傳送指令 MOV數(shù)據(jù)傳送指令 MOV指令將8位圖立即數(shù)或寄存器(operand2)傳送到目標(biāo)寄存器(Rd),可用于移位運算等操作。指令格式如下:MOVcondS Rd,operand2指令舉例如下:MOVS R3,R1,LSL #2;R3R12,并影響標(biāo)志位MOV PC,LR ;PC = LR,子程序返回 MVN數(shù)據(jù)非傳送指

25、令MVN指令將8位圖立即數(shù)或寄存器(operand2)按位取反后傳送到目標(biāo)寄存器(Rd)。因為其具有取反功能,所以可以加載范圍更廣的立即數(shù)。指令格式如下:MVNcondS Rd,operand2指令舉例如下:MVN R1,#0 xFF ;R10 xFFFFFF00MVN R1,R2 ;將R2取反,結(jié)果存到Rl(2) 算術(shù)邏輯運算指令 ADD加法運算指令 ADD指令將operand2的數(shù)據(jù)與Rn的值相加,結(jié)果保存到Rd寄存器.指令格式如下:ADDcondS Rd,Rn,operand2指令舉例如下:ADDS R1,R1,#1 ;R1R1+1ADDS R3,R1,R2,LSL #2 ;R3R1+R

26、22 SUB減法運算指令SUB指令用寄存器Rn減去operand2,結(jié)果保存到Rd中。 指令格式如下:SUBcondS Rd,Rn,operand2指令舉例如下:SUBS R0,R0,#l ;R0R0-1SUB R6,R7,#0 x10 ;R6R7-0 x10 RSB逆向減法指令RSB指令用寄存器operand2減去Rn,結(jié)果保存到Rd中。指令格式如下:RSBcondS Rd,Rn,operand2指令舉例如下:RSB R3,R1,#0 xFF00 ;R30 xFF00-R1RSBS R1,R2,R2,LSL #2;R1R22- R2R23 ADC帶進位加法指令A(yù)DC指令將operand2的數(shù)

27、據(jù)與Rn的值相加,再加上CPSR中的C條件標(biāo)志位,結(jié)果保存到Rd寄存器。指令格式如下:ADCcondS Rd,Rn,operand2指令舉例如下: ADDS R0,R0,R2 ; 使用ADC實現(xiàn)64位加法,ADC R1,R1,R3 ;(R1、R0)(R1、R0)+(R3、R2) SBC帶進位減法指令SBC指令用寄存器Rn減去operand2,再減去CPSR中的C條件標(biāo)志位的“非”(即若C標(biāo)志清零,則結(jié)果減去1),結(jié)果保存到Rd中。指令格式如下:SBCcondS Rd,Rn,operand2指令舉例如下:SUBS R0,R0,R2 ;使用SBC實現(xiàn)64位減法,SBC R1,R1,R3 ;(R1、

28、R0)(R1、R0)-(R3、R2) RSC帶進位逆向減法指令 RSC 指令用寄存器operand2減去Rn,再減去CPSR中的C條件標(biāo)志位,結(jié)果保存到Rd中。指令格式如下:RSCcondS Rd,Rn,operand2指令舉例如下:RSBS R2,R0,#0RSC R3,R1,#0 ;使用RSC指令實現(xiàn)求64位數(shù)值的負數(shù) AND邏輯“與”操作指令 AND指令將operand2的值與寄存器Rn的值按位邏輯“與”操作,結(jié)果保存到Rd中。指令格式如下:ANDcondS Rd,Rn,operand2指令舉例如下:ANDS R0,R0,#0 x01 ;R0R0&0 x01,取出最低位數(shù)據(jù)AND R2,

29、R1,R3 ;R2R1&R3 ORR邏輯“或”操作指令 ORR指令將operand2的值與寄存器Rn的值按位邏輯“或”操作,結(jié)果保存到Rd中。指令格式如下: ORRcondS Rd,Rn,operand2 指令舉例如下: ORR R0,R0,#0 x0F ;將R0的低4位置1EOR邏輯“異或”操作指令EOR指令將operand2的值與寄存器Rn的值按位邏輯“異或”操作,結(jié)果保存到Rd中。指令格式如下:EORcondS Rd,Rn,operand2指令舉例如下:EOR R1,R1,#0 x0F ;將Rl的低4位取反EORS R0,R5,#0 x01 ;將R0=R50 x01,并影響標(biāo)志位 BIC

30、位清除指令BIC指令將寄存器Rn的值與operand2的值的反碼按位邏輯“與”操作,結(jié)果保存到Rd中。指令格式如下:BICcondS Rd,Rn,operand2指令舉例如下:BIC R1,R1,#0 x0F ;將R1的低4位清零,其它位不變 (3) 比較指令 CMP比較指令CMP指令將寄存器Rn的值減去operand2的值,根據(jù)操作的結(jié)果更新CPSR中的相應(yīng)條件標(biāo)志位,以便后面的指令根據(jù)相應(yīng)的條件標(biāo)志來判斷是否執(zhí)行。指令格式如下:CMPcond Rn,operand2指令舉例如下:CMP R1,#10 ;R1與10比較,設(shè)置相關(guān)標(biāo)志位 CMN負數(shù)比較指令 CMN指令將寄存器Rn的值加上ope

31、rand2的值,根據(jù)操作的結(jié)果更新CPSR中的相應(yīng)條件標(biāo)志位,以便后面的指令根據(jù)相應(yīng)的條件標(biāo)志來判斷是否執(zhí)行。指令格式如下:CMNcond Rn,operand2指令舉例如下:CMN R0,#1 ;R0+1,判斷R0是否為1的補碼。若是,則Z位置1。CMN指令與ADDS指令的區(qū)別在于CMN指令不保存運算結(jié)果。CMN指令可用于負數(shù)比較,比如“CMN R0,#1”指令則表示R0與-1比較。若R0為-1(即1的補碼),則Z置位;否則Z復(fù)位 TST位測試指令TST指令將寄存器Rn的值與operand2的值按位邏輯“與”操作,根據(jù)操作的結(jié)果更新CPSR中的相應(yīng)條件標(biāo)志位,以便后面的指令根據(jù)相應(yīng)的條件標(biāo)志

32、來判斷是否執(zhí)行。指令格式如下:TSTcond Rn,operand2指令舉例如下:TST R0,#0 x01 ;判斷R0的最低位是否為0TST Rl,#0 x0F ;判斷R1的低4位是否為0TST指令與ANDS指令的區(qū)別在于TST指令不保存運算結(jié)果。TST指令通常與EQ、NE條件碼配合使用。當(dāng)所有測試位均為0時,EQ有效。而只要有一個測試位不為0,則NE有效。 TEQ相等測試指令TEQ指令將寄存器Rn的值與operand2的值按位邏輯“異或”操作,根據(jù)操作的結(jié)果更新CPSR中的相應(yīng)條件標(biāo)志位,以便后面的指令根據(jù)相應(yīng)的條件標(biāo)志來判斷是否執(zhí)行。指令格式如下:TEQcond Rn,operand2指

33、令舉例如下:TEQ R0,R1 ;比較R0與R1是否相等(不影響V位和C位)TEQ指令與EORS指令的區(qū)別在于TEQ指令不保存運算結(jié)果。使用TEQ進行相等測試時,常與EQ、NE條件碼配合使用。當(dāng)兩個數(shù)據(jù)相等時,EQ有效;否則NE有效。5. 乘法指令A(yù)RM7TDMI(-S)具有3232乘法指令、3232乘加指令,3232結(jié)果為64位的乘乘加指令。ARM乘法指令如表3-9所列 (1) MUL32位乘法指令MUL指令將Rm和Rs中的值相乘,結(jié)果的低32位保存到Rd中。指令格式如下:MULcondS Rd,Rm,Rs指令舉例如下:MUL R1,R2,R3;R1=R2R3MULS R0,R3,R7 ;R

34、0=R3R7,同時設(shè)置CPSR中的N位和Z位 (2) MLA32位乘加指令MLA指令將Rm和Rs中的值相乘,再將乘積加上第3個操作數(shù),結(jié)果的低32位保存到Rd中。指令格式如下: MLAcondS Rd,Rm,Rs,Rn指令舉例如下: MLA R1,R2,R3,R0 ;R1=R2R3+R0(3) UMULL64位無符號乘法指令UMULL指令將Rm和Rs中的值作無符號數(shù)相乘,結(jié)果的低32位保存到RdLo中,而高32位保存到RdHi中。指令格式如下: UMULLcondS RdLo,RdHi,Rm,Rs指令舉例如下: UMULL R0,R1,R5,R8 ;(R1、R0)R5R8(4) UMLAL64

35、位無符號乘加指令UMLAL指令將Rm和Rs中的值作無符號數(shù)相乘,64位乘積與RdHi、RdLo相加,結(jié)果的低32位保存到RdLo中,而高32位保存到RdHi中。指令格式如下:UMLALcondS RdLo,RdHi,Rm,Rs指令舉例如下:UMLAL R0,R1,R5,R8 ;(R1、R0)R5R8+(R1、R0)(5) SMULL64位有符號乘法指令SMULL指令將Rm和Rs中的值作有符號數(shù)相乘,結(jié)果的低32位保存到RdLo中,而高32位保存到RdHi中。指令格式如下:SMULLcondS RdLo,RdHi,Rm,Rs指令舉例如下:SMULL R2,R3,R7,R6 ;(R3、R2)R7R

36、6(6) SMLAL64位有符號乘加指令SMLAL指令將Rm和Rs中的值作有符號數(shù)相乘,64位乘積與RdHi、RdLo相加,結(jié)果的低32位保存到RdLo中,而高32位保存到RdHi中。指令格式如下:SMLALcondS RdLo,RdHi,Rm,Rs指令舉例如下:SMLAL R2,R3,R7,R6 ;(R3、R2)R7R6+(R3、R2) 6. ARM分支指令在ARM中有兩種方式可以實現(xiàn)程序的跳轉(zhuǎn):一種是使用分支指令直接跳轉(zhuǎn),另一種則是直接向PC寄存器賦值來實現(xiàn)跳轉(zhuǎn)。分支指令有分支指令B、帶連接的分支指令BL、帶狀態(tài)切換的分支指令BX。ARM分支指令見表3-10(1) B分支指令B指令跳轉(zhuǎn)到指

37、定的地址執(zhí)行程序。指令格式如下:Bcond label指令舉例如下:B WAITA ;跳轉(zhuǎn)到WAITA標(biāo)號處B 0 x1234 ;跳轉(zhuǎn)到絕對地址0 x1234處分支指令B限制在當(dāng)前指令的32 MB的范圍內(nèi)。(2) BL帶連接的分支指令BL指令先將下條指令的地址拷貝到R14 (即LR)連接寄存器中,然后跳轉(zhuǎn)到指定地址運行程序。指令格式如下:BLcond label指令舉例如下:BL DELAY分支指令BL限制在當(dāng)前指令的32 MB的范圍內(nèi)。BL指令用于子程序調(diào)用。(3) BX帶狀態(tài)切換的分支指令BX指令跳轉(zhuǎn)到Rm指定的地址執(zhí)行程序。若Rm的位0為1,則跳轉(zhuǎn)時自動將CPSR中的標(biāo)志T置位,即把目標(biāo)

38、地址的代碼解釋為Thumb代碼;若Rm的位0為0,則跳轉(zhuǎn)時自動將CPSR中的標(biāo)志T復(fù)位,即把目標(biāo)地址的代碼解釋為ARM代碼。指令格式如下:BXcond Rm指令舉例如下:ADRL R0,ThumbFun+1BX R0 ;跳轉(zhuǎn)到R0指定的地址,并根據(jù)R0的最低位來切換處理器狀態(tài)7. ARM協(xié)處理器指令A(yù)RM支持協(xié)處理器操作。協(xié)處理器的控制要通過協(xié)處理器命令(見表3-11)實現(xiàn)。(1) CDP協(xié)處理器數(shù)據(jù)操作指令A(yù)RM處理器通過CDP指令通知ARM協(xié)處理器執(zhí)行特定的操作。該操作由協(xié)處理器完成,即對命令參數(shù)的解釋與協(xié)處理器有關(guān),指令的使用取決于協(xié)處理器。若協(xié)處理器不能成功地執(zhí)行該操作,將產(chǎn)生未定義指

39、令異常中斷。 指令格式如下:CDPcond coproc,opcode1,CRd,CRn,CRm,opcode2其中:Coproc 指令操作的協(xié)處理器名.標(biāo)準(zhǔn)名為pn,n為015。Opcode1協(xié)處理器的特定操作碼。CRd 作為目標(biāo)寄存的協(xié)處理器寄存器。CRn 存放第1個操作數(shù)的協(xié)處理器寄存器。CRm 存放第2個操作數(shù)的協(xié)處理器寄存器。opcode2 可選的協(xié)處理器特定操作碼。指令舉例如下:CDP p7,0,c0,c2,c3,0 協(xié)處理器7操作,操作碼為0,可選操作碼為0CDP p6,1,c3,c4,c5 協(xié)處理器6操作,操作碼為1 (2) LDC協(xié)處理器數(shù)據(jù)讀取指令 LDC指令從某一連續(xù)的內(nèi)

40、存單元將數(shù)據(jù)讀取到協(xié)處理器的寄存器中.進行協(xié)處理器數(shù)據(jù)的數(shù)據(jù)傳送,由協(xié)處理器來控制傳送的字?jǐn)?shù).若協(xié)處理器不能成功地執(zhí)行該操作,將產(chǎn)生未定義指令異常中斷.指令格式如下:LDCcondL coproc,CRd,其中:L 可選后綴,指明是長整數(shù)傳送。coproc 指令操作的協(xié)處理器名。標(biāo)準(zhǔn)名為pn,n為015。CRd作為目標(biāo)寄存的協(xié)處理器寄存器。 指定的內(nèi)存地址。指令舉例如下:LDC p5,c2,R2,#4 ;讀取R2+4指向的內(nèi)存單元的數(shù)據(jù),傳送到協(xié)處理器p5的c2寄存器中LDC p6,c2,R1 ;讀取R1指向的內(nèi)存單元的數(shù)據(jù),傳送到協(xié)處理器p6的c2寄存器中 (3) STC協(xié)處理器數(shù)據(jù)寫入指令

41、STC指令將協(xié)處理器的寄存器數(shù)據(jù)寫入到某一連續(xù)的內(nèi)存單元中。進行協(xié)處理器數(shù)據(jù)的數(shù)據(jù)傳送,由協(xié)處理器來控制傳送的字?jǐn)?shù)。若協(xié)處理器不能成功地執(zhí)行該操作,將產(chǎn)生未定義指令異常中斷。指令格式如下:STCcondL coproc,CRd,其中格式說明同 LDC 指令。指令舉例如下:STC p5,c1,R0STC p5,cl,R0,#-0 x04(4) MCR ARM寄存器到協(xié)處理器寄存器的數(shù)據(jù)傳送指令MCR指令將ARM處理器的寄存器中的數(shù)據(jù)傳送到協(xié)處理器的寄存器中。若協(xié)處理器不能成功地執(zhí)行該操作,將產(chǎn)生未定義指令異常中斷。指令格式如下:MCRcond coproc,opcode1,Rd,CRn,CRm,

42、opcode2其中格式說明同 CDP 指令。指令舉例如下:MCR p6,2,R7,cl,c2MCR p7,0,R1,c3,c2,1 (5)MRC協(xié)處理器寄存器到ARM寄存器的數(shù)據(jù)傳送指令MRC指令將協(xié)處理器寄存器中的數(shù)據(jù)傳送到ARM處理器的寄存器中。若協(xié)處理器不能成功地執(zhí)行該操作,將產(chǎn)生未定義指令異常中斷。指令格式如下: MRCcond coproc,opcode1,Rd,CRn,CRm,opcode2其中格式說明同 CDP 指令。指令舉例如下:MRC p5,2,R2,c3,c2MRC p7,0,R0,c1,c2,18ARM雜項指令A(yù)RM雜項指令如表3-12所列。表 3-12 ARM雜項指令助

43、記符說明操作條件碼位置SWI immed_24軟中斷指令產(chǎn)生軟中斷,處理器進入管理模式SWIcondMRS Rd,psr讀狀態(tài)寄存器指令Rdpsr,psr為CPSR或SPSRMRScondMSR psr_fields,Rd #immend_8r寫狀態(tài)寄存器指令Psr_fieldsRd/#immed_8r,psr為CPSR或SPSRMSRcond(1) SWI軟中斷指令SWI指令用于產(chǎn)生軟中斷,從而實現(xiàn)從用戶模式變換到管理模式,CPSR保存到管理模式的SPSR中,執(zhí)行轉(zhuǎn)移到SWI向量。在其它模式下也可使用SWI指令,處理器同樣地切換到管理模式。指令格式如下:SWIcond immed_24其中:

44、 immed_24 24位立即數(shù),值為016 777 215之間的整數(shù)。指令舉例如下:SWI 0 ;軟中斷,中斷立即數(shù)為0SWI 0 xl23456 ;軟中斷,中斷立即數(shù)為0 xl23456 使用SWI指令時,通常使用以下兩種方法進行傳遞參數(shù),SWI異常中斷處理程序就可以提供相關(guān)的服務(wù)。這兩種方法均由用戶軟件協(xié)定。SWI異常中斷處理程序要通過讀取引起軟中斷的SWI指令,以取得24位立即數(shù)。 指令中的24位立即數(shù)指定了用戶請求的服務(wù)類型,參數(shù)通過通用寄存器傳遞。MOV R0,#34 ;設(shè)置子功能號為34SWI 12 ;調(diào)用12號軟中斷 指令中的24位立即數(shù)被忽略,用戶請求的服務(wù)類型由寄存器R0的

45、值決定,參數(shù)通過其它通用寄存器傳遞。MOV R0,#12 ;調(diào)用12號軟中斷MOV R1,#34 ;設(shè)置子功能號為34SWI 0在SWI異常中斷處理程序中,取出SWI立即數(shù)的步驟為:首先確定引起軟中斷的SWI指令是ARM指令還是Thumb指令,這可通過對SPSR訪問得到;然后取得該SWI指令的地址,這可通過訪問LR寄存器得到;接著讀出指令,分解出立即數(shù)。 (2)MRS讀狀態(tài)寄存器指令在ARM處理器中,只有MRS指令可以將狀態(tài)寄存器CPSR或SPSR讀出到通用寄存器中。指令格式如下:MRScond Rd,psr其中: Rd 目標(biāo)寄存器。Rd不允許為R15。psr CPSR或SPSR。指令舉例如下

46、:MRS R1,CPSR ;將CPSR狀態(tài)寄存器讀取,保存到R1中MRS R2,SPSR ;將SPSR狀態(tài)寄存器讀取,保存到R2中 MRS指令讀取CPSR,可用來判斷ALU的狀態(tài)標(biāo)志,或IRQ、FIQ中斷是否允許等。在異常處理程序中,讀SPSR可知道進行異常前的處理器狀態(tài)等。MRS與MSR配合使用,實現(xiàn)CPSR或SPSR寄存器的讀一修改一寫操作,可用來進行處理器模式切換、允許禁止IRQ/FIQ中斷等設(shè)置。另外,當(dāng)進程切換或允許異常中斷嵌套時,也需要使用MRS指令來讀取SPSR狀態(tài)值,并保存起來。(3)MSR寫狀態(tài)寄存器指令 在ARM處理器中,只有MSR指令可以直接設(shè)置狀態(tài)寄存器CPSR或SPS

47、R。指令格式如下:MSRcond psr_fields,#immed_8rMSRcond psr_fields,Rm其中:psr CPSR或SPSR。fields 指定傳送的區(qū)域。fields可以是以下的一種或多種(字母必須為小寫):c 控制域屏蔽字節(jié)(psr70);x 擴展域屏蔽字節(jié)(psr158);s 狀態(tài)域屏蔽字節(jié)(psr2316);f 標(biāo)志域屏蔽字節(jié)(psr3124)。immed_8r 要傳送到狀態(tài)寄存器指定域的立即數(shù),8位。Rm 要傳送到狀態(tài)寄存器指定域的數(shù)據(jù)的源寄存器。 指令舉例如下:MSR CPSRc,#0 xD3 ;CPSR00 xD3,即切換到管理模式MSR CPSRcxsf

48、,R3 ;CPSR=R3只有在特權(quán)模式下才能修改狀態(tài)寄存器。程序中不能通過MSR指令直接修改CPSR中的T控制位來實現(xiàn)ARM狀態(tài)Thumb狀態(tài)的切換,必須使用BX指令完成處理器狀態(tài)的切換(因為BX指令屬分支指令,它會打斷流水線狀態(tài),實現(xiàn)處理器狀態(tài)切換)。MRS與MSR配合使用,實現(xiàn)CPSR或SPSR寄存器的讀修改寫操作,可用來進行處理器模式切換、允許禁止IRQ/FIQ中斷等設(shè)置. 9ARM偽指令A(yù)RM偽指令不是ARM指令集中的指令,只是為了編程方便編譯器定義了偽指令。可以像其它ARM指令一樣使用偽指令,但在編譯時這些指令將被等效的ARM指令代替。ARM偽指令有4條,分別為ADR偽指令、ADRL

49、偽指令、LDR偽指令和NOP偽指令。(1)ADR小范圍地址讀取偽指令 ADR指令將基于PC相對偏移的地址值或基于寄存器相對偏移的地址值讀取到寄存器中。在匯編編譯源程序時,ADR偽指令被編譯器替換成一條合適的指令。通常,編譯器用一條ADD指令或SUB指令來實現(xiàn)該ADR偽指令的功能。若不能用一條指令實現(xiàn),則產(chǎn)生錯誤,編譯失敗。 偽指令格式如下:ADRcond register,expr其中: register 加載的目標(biāo)寄存器。 expr 地址表達式。當(dāng)?shù)刂分凳欠亲謱R時,取值范圍在-255255字節(jié)之間;當(dāng)?shù)刂分凳亲謱R時,取值范圍在-1 0201 020字節(jié)之間。對于基于PC相對偏移的地址值時

50、,給定范圍是相對當(dāng)前指令地址后兩個字處(因為ARM7TDMI為三級流水線)。偽指令舉例如下:LOOP MOV R1,#0 xF0ADR R2,LOOP ;將LOOP的地址放人R2ADR R3,LOOP + 4可以用ADR加載地址實現(xiàn)查表, (2)ADRL中等范圍的地址讀取偽指令A(yù)DRL指令將基于PC相對偏移的地址值或基于寄存器相對偏移的地址值讀取到寄存器中。ADRL比ADR偽指令可以讀取更大范圍的地址。在匯編編譯源程序時,ADRL偽指令被編譯器替換成兩條合適的指令。若不能用兩條指令實現(xiàn)ADRL偽指令功能,則產(chǎn)生錯誤,編譯失敗。偽指令格式如下:ADRLcond register,expr其中:

51、register 加載的目標(biāo)寄存器。 、expr 地址表達式。當(dāng)?shù)刂分凳欠亲謱R時,取值范圍在-64KB64 KB之間;當(dāng)?shù)刂分凳亲謱R時,取值范圍在-256KB256 KB之間。偽指令舉例如下:ADRL R0,DATABUFADRL R1,DATABUF+80DATABUFSPACE 100 ;定義100字節(jié)緩沖區(qū)可以用ADRL加載地址,實現(xiàn)程序跳轉(zhuǎn)(3)LDR大范圍地址讀取偽指令LDR偽指令用于加載32位的立即數(shù)或一個地址值到指定寄存器。在匯編編譯源程序時,LDR偽指令被編譯器替換成一條合適的指令。若加載的常數(shù)未超出MOV或MVN的范圍,則使用MOV或MVN指令代替該LDR偽指令;否則匯編

52、器將常量放入文字池,并使用一條程序相對偏移的LDR指令從文字池讀出常量。 偽指令格式如下:LDRcond register,=expr/labelexpr其中: register 加載的目標(biāo)寄存器。expr 32位立即數(shù)。Labelexpr 基于PC的地址表達式或外部表達式。 偽指令舉例如下:LDR R0,=0 x12345678 ;加載32位立即數(shù)0 x12345678LDR R0,=DATA_BUF+60 ;加載DATA_BUF地址+60LTORG ;聲明文字池偽指令LDR常用于加載芯片外圍功能部件的寄存器地址(32位立即數(shù)),以實現(xiàn)各種控制操作。從PC到文字池的偏移量必須小于4 KB。與

53、ARM指令的LDR相比,偽指令的LDR的參數(shù)有“”符號。(4)NOP空操作偽指令NOP偽指令在匯編時將會被替代成ARM中的空操作,比如可能為“MOV R0,R0”指令等。偽指令格式如下: NOP2.3.3 Thumb 指令集介紹 Thumb指令集可以看作是ARM指令壓縮形式的子集,是針對代碼密度的問題而提出的,它具有16位的代碼密度。Thumb不是一個完整的體系結(jié)構(gòu),不能期望處理器只執(zhí)行Thumb指令而不支持ARM指令集。因此,Thumb指令只需要支持通用功能,必要時可以借助于完善的ARM指令集,比如,所有異常自動進入ARM狀態(tài)。在編寫Thumb指令時,先要使用偽指令CODEl6聲明,而且在A

54、RM指令中要使用BX指令跳轉(zhuǎn)到Thumb指令,以切換處理器狀態(tài)。編寫ARM指令時,則可使用偽指令CODE32聲明。Thumb指令集沒有協(xié)處理器指令、信號量指令以及訪問CPSR或SPSR的指令,沒有乘加指令及64位乘法指令等,且指令的第二操作數(shù)受到限制;除了分支指令B有條件執(zhí)行功能外,其它指令均為無條件執(zhí)行;大多數(shù)Thumb數(shù)據(jù)處理指令采用2地址格式。Thumb指令集與ARM指令集的區(qū)別一般有如下幾點:1. 分支指令程序相對轉(zhuǎn)移,特別是條件跳轉(zhuǎn)與ARM代碼下的跳轉(zhuǎn)相比,在范圍上有更多的限制,轉(zhuǎn)向子程序是無條件的轉(zhuǎn)移。2. 數(shù)據(jù)處理指令數(shù)據(jù)處理指令是對通用寄存器進行操作。在大多數(shù)情況下,操作的結(jié)果

55、須放人其中一個操作數(shù)寄存器中,而不是第3個寄存器中。數(shù)據(jù)處理操作比ARM狀態(tài)的更少。訪問寄存器R8R15受到一定限制。除MOV和ADD指令訪問器R8R15外,其它數(shù)據(jù)處理指令總是更新CPSR中的ALU狀態(tài)標(biāo)志。訪問寄存器R8R15的Thumb數(shù)據(jù)處理指令不能更新CPSR中的ALU狀態(tài)標(biāo)志。3. 單寄存器加載和存儲指令在Thumb狀態(tài)下,單寄存器加載和存儲指令只能訪問寄存器R0R7。4. 多寄存器加載和存儲指令LDM和STM指令可以將任何范圍為R0R7的寄存器子集加載或存儲,多寄存器加載和存儲指令只有LDMIA和STMIA指令。PUSH和POP指令使用堆棧指令R13作為基址實現(xiàn)滿遞減堆棧。除R0

56、R7外,PUSH指令還可以存儲連接寄存器R14,并且POP指令可以加載程序指令PC。 條件碼助記符標(biāo) 志含義EQZ=1相等NEZ=0不相等CS/HSC=1無符號數(shù)大于或等于CC/LOC=0無符號數(shù)小于MIN=1負數(shù)PLN=0正數(shù)或零VSV=1溢出VCV=0沒有溢出HIC=1,Z=0無符號數(shù)大于LSC=0,Z=1無符號數(shù)小于或等于CEN=V有符號數(shù)大于或等于LTN!=V有符號數(shù)小于GTZ=0,N=V有符號數(shù)大于LEZ=1,N!=V有符號數(shù)小于或等于AL任何無條件執(zhí)行(指令默認條件)指令條件碼表返回助記符說明操作條件碼位置LDR Rd,addressing加載字?jǐn)?shù)據(jù)指令Rdaddressing,a

57、ddressing索引LDRcondLDRB Rd,addressing加載無符號字節(jié)數(shù)據(jù)指令Rdaddressing,addressing索引LDR condBLDRT Rd,addressing以用戶模式加載字?jǐn)?shù)據(jù)指令Rdaddressing,addressing索引LDRcondTLDRBT Rd,addressing以用戶模式加載無符號字節(jié)數(shù)據(jù)指令Rdaddressing,addressing索引LDRcondBTLDRH Rd,addressing加載無符號半字?jǐn)?shù)據(jù)指令Rdaddressing,addressing索引LDRcondHLDRSB Rd,addressing加載有符號字節(jié)數(shù)據(jù)指令Rdaddressing,addressing索引LDRcondSBLDRSH Rd,addressing加載有符號半字?jǐn)?shù)據(jù)指令Rdaddressing,addressing索引LDRcondSHARM存儲器訪問指令表STR Rd,addressing存儲字?jǐn)?shù)據(jù)指令addressing Rd,addressing索引STRcpmdSTRB Rd,addressing存儲字節(jié)數(shù)據(jù)指令addressing Rd,addressing索引STRcond BSTRT Rd,addressing以用戶模式存儲字節(jié)數(shù)據(jù)指令addressing Rd,addressing索引STRcondTST

溫馨提示

  • 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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論