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

下載本文檔

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

文檔簡介

1、第1頁/共126頁要求了解指令系統(tǒng)的格式掌握ARM 微處理器指令的尋址方式掌握一些常用的ARM 指令的使用方法 第2頁/共126頁3.1 ARM指令系統(tǒng)版本概念 指令:是規(guī)定計算機進行某種操作的命令。 指令系統(tǒng):計算機能夠執(zhí)行的各種指令的集合。第3頁/共126頁1.版本1(v1) v1在ARM1中使用,但從未商業(yè)化。26位尋址空間,其指令主要有:1) 基本的數據處理指令(無乘法指令)2) 字、字節(jié)和半字存儲器訪問指令3) 分支指令(包括帶鏈接的分支指令)4) 軟件中斷指令第4頁/共126頁2.版本2(v2)v2仍是26位尋址空間,在v1的基礎上增加的內容有:1) 乘法和乘法加指令2) 支持協(xié)處

2、理器3) 快速中斷模式中的分組寄存器4) 交換式加載/存儲指令。第5頁/共126頁3.版本3(v3) V3將尋址范圍擴展到32位,但兼容26位尋址。在v2的基礎上增加的內容有:1) 設置了專用的當前程序狀態(tài)寄存器CPSR、增加了程序狀態(tài)保存寄存器SPSR2) 增加了中止異常和未定義指令異常兩種處理器模式3) 增加了訪問CPSR、SPSR的指令MRS和MSR4) 修改了異常返回指令的功能第6頁/共126頁4.版本4(v4) V4是32位尋址方式,但不再兼容26位尋址,在v3的基礎上增加的內容有:1) 半字加載/存儲指令2) 在T變量中轉換到Thumb狀態(tài)的指令3) 增加了在使用用戶模式寄存器的特

3、權處理器模式第7頁/共126頁5.版本5(v5) V5對v4指令做了必要的修改和擴展,并且增加了指令,具體變化為:1) 改進在T變量中ARM/Thumb狀態(tài)之間的切換效率2) 對于T和非T變量使用相同的代碼生成技術3) 增加了計數前導零指令4) 增加了軟件斷點指令5) 對乘法指令設置標志做了嚴格定義。6) 將流水線的級數從3級(如ARM7TDMI使用的)增加到5級;7) 并改變存儲器接口來使用分開的指令與數據存儲器。 第8頁/共126頁6.版本6 (v6) V6對v5指令做了必要的修改和擴展,并且增加了指令, 2001年發(fā)布,首先在ARM11處理器中使用(2002年春季發(fā)布),具體變化為:1)

4、 ARM體系版本6的新架構在降低耗電量的同時,還強化了圖形處理性能。2) 增加了多媒體處理功能:通過追加有效進行多媒體處理的SIMD功能,將語音及圖像的處理功能提高到了原機型的4倍。3) V6版本還支持多微處理器內核。第9頁/共126頁3.3 ARM處理器的尋址方式 尋址方式分類 尋址方式是根據指令中給出的地址碼字段來實現尋找真實操作數地址的方式。ARM處理器具有9種基本尋址方式。1.寄存器尋址;2.立即尋址;3.寄存器偏移尋址;4.寄存器間接尋址;5.基址尋址;6.多寄存器尋址;7.堆棧尋址;8.塊拷貝尋址;9.相對尋址。第10頁/共126頁 操作數在寄存器中,指令中的地址碼字段指出的是寄存

5、器編號,指令執(zhí)行時直接取出寄存器值來操作。舉例如下: MOV R1,R2 ;將R2的值存入R1 SUB R0,R1,R2 ;將R1的值減去R2的值,結果保存到R0 0 xAA0 x55R2R1 尋址方式分類1.寄存器尋址MOV R1,R20 xAA第11頁/共126頁 立即尋址指令中的地址碼部分即是操作數本身,也就是說,數據就包含在指令當中,取出指令也就取出了可以立即使用的操作數(這樣的數稱為立即數)。舉例如下: SUBSR0,R0,#1 ;R0減1,結果放入R0,并且影響標志位MOVR0, #0 xFF00 ;將立即數0 xFF00裝入R0寄存器在以上兩條指令中,第二個源操作數即為立即數,要

6、求以“”為前綴,對于以十六進制表示的立即數,還要求在“”后加上“0 x”。0 x55R0MOV R0,#0 xFF00程序存儲 尋址方式分類2.立即尋址MOV R0,#0 xFF000 xFF00從代碼中獲得數據第12頁/共126頁十六進制數:后加十六進制數:后加0 x0 x或或&,&,如如 #0 x3f,#&3f.#0 x3f,#&3f.二進制數:二進制數: 后加后加 0b, 0b, 如如 #0b1011#0b1011 十進制數:十進制數: # #后加后加 0d0d或缺省或缺省, ,如如#0d678,#789#0d678,#789第13頁/共126頁 寄存器偏

7、移尋址是ARM指令集特有的尋址方式。當第2個操作數是寄存器偏移方式時,第2個寄存器操作數在與第1個操作數結合之前,先進行移位操作。第二操作數形式為: OPCODE Rd, Rn, Rm,其中: Rd為目標寄存器, Rn為第一個操作數寄存器 Rm 為第二操作數寄存器 shift 指定移位類型和移位位數有兩種形式: 5位立即數(其值小于32) 寄存器 (用Rs表示)(其值小于32)0 x55R0R2 0 x01 尋址方式分類3.寄存器偏移尋址MOV R0,R2,LSL #30 x080 x08邏輯左移3位第14頁/共126頁 在指令執(zhí)行時,將寄存器移位后的內容作為第二操在指令執(zhí)行時,將寄存器移位后

8、的內容作為第二操作數參與運算。作數參與運算。舉例如下:MOV R0,R2,LSL #3 ;R2的值左移3位,結果放入R0,即R0=R28 ANDR1,R1,R2,LSL R3 ;R2的值左移R3位,然后和R1相“與”操作,結果放入R1第15頁/共126頁 ADD R3,R2,R1,LSR #2 ADD R3,R2,R1,LSR R0 ;R3R2+(R1右移2位);R3R2+(R1右移R0位)第16頁/共126頁第二操作數移位方式第二操作數移位方式 (自學課本(自學課本52面)面)共有共有6種移位方式:種移位方式: LSL 邏輯左移邏輯左移 LSR 邏輯右移邏輯右移 ASL 算術左移算術左移 A

9、SR 算術右移算術右移 ROR 循環(huán)右移循環(huán)右移 RRX 帶擴展的循環(huán)右移帶擴展的循環(huán)右移第17頁/共126頁 指令中的地址碼給出的是一個通用寄存器的編號,所需的操作數保存在寄存器指定地址的存儲單元中,即寄存器為操作數的地址指針。舉例如下: LDRR0,R2;將R2指向的存儲單元的數據讀出,保存在R0中 STR R0,R1;將R0的內容存儲到以R1值為地址的存儲單元中0 x55R0R2 0 x400000000 xAA0 x40000000 尋址方式分類4.寄存器間接尋址LDR R0,R20 xAA第18頁/共126頁 基址尋址就是將基址寄存器的內容與指令中給出的偏移量相加,形成操作數的有效地

10、址。(寄存器間接尋址是偏移量為零的基址尋址。)舉例如下: LDRR2,R3,#0 x0C ;讀取R3+0 x0C地址的存儲單元的內容,加載到R2中 尋址方式分類5.基址尋址0 x55R2R3 0 x400000000 xAA0 x4000000CLDR R2,R3,#0 x0C0 xAA第19頁/共126頁有三種加偏址的方式有三種加偏址的方式(1)前變址模式前變址模式(不修改基址寄存器):(不修改基址寄存器): 先基址先基址+偏址,生成操作數地址,做指令指定的操作。偏址,生成操作數地址,做指令指定的操作。也叫前索引偏移。也叫前索引偏移。0 x05R10 x200基址寄存器0 x200R00 x

11、05源 寄存器偏移量120 x20CSTR r0,r1,#12第20頁/共126頁(2)自動變址模式(修改基址寄存器): 先基址+偏移,生成操作數地址,做指令指定的操作。然后自動修改基址寄存器。例:LDR R0,R1,4! ;讀取存儲單元中R1+4地址中的內容,加載到R0中, R1R14 ! 表示更新基址寄存器第21頁/共126頁(3)后變址模式(修改基址寄存器): 基址寄存器不加偏移作為操作數地址。 完成指令操作后,用(基址+偏移)的值修改基址寄存器。 即先用基地址傳數,然后修改基地址(基址+偏移), 也叫后索引偏移。0 x5r10 x200原基址寄存器0 x200r00 x5源 寄存器偏移

12、量120 x20cr10 x20c更新基址寄存器例: STR r0,r1,#12第22頁/共126頁 多寄存器尋址一次可傳送幾個寄存器值,允許一條指令傳送16個寄存器的任何子集或所有寄存器。舉例如下: 0 x40000000R1R2 0 x?0 x010 x400000000 x?R3R4 0 x?R6 0 x?0 x020 x030 x040 x400000040 x400000080 x4000000C內容 地址 尋址方式分類6.多寄存器尋址LDMIA R1!,R2-R4,R6 0 x010 x020 x030 x040 x40000010第23頁/共126頁 堆棧是一個按“后進先出” 進

13、行存取的存儲區(qū),堆棧尋址使用一個專門的寄存器(堆棧指針SP)指向一塊存儲區(qū)域(堆棧),指針所指向的存儲單元即是堆棧的棧頂。存儲器堆??煞譃閮煞N: 向上生長:向高地址方向生長,稱為遞增堆棧向下生長:向低地址方向生長,稱為遞減堆棧 尋址方式分類7.堆棧尋址第24頁/共126頁 尋址方式分類堆棧尋址棧底棧頂遞增堆棧SP堆棧存儲區(qū)棧頂棧底遞減堆棧SP向下增長向上增長0 x123456780 x12345678堆棧壓棧堆棧壓棧第25頁/共126頁根據堆棧指針指向的數據位置的不同,可分為:根據堆棧指針指向的數據位置的不同,可分為: 滿堆棧滿堆棧 堆棧指針指向最后壓入堆棧的有效數據項,稱為滿堆棧指針指向最后

14、壓入堆棧的有效數據項,稱為滿堆棧;堆棧; 空堆??斩褩6褩V羔樦赶蛳乱粋€待壓入數據的空位置,稱為空堆棧。堆棧指針指向下一個待壓入數據的空位置,稱為空堆棧。 第26頁/共126頁棧頂SP棧頂SP棧底空堆棧棧底滿堆棧 尋址方式分類堆棧尋址0 x123456780 x12345678棧頂SP0 x12345678棧頂SP壓棧壓棧第27頁/共126頁,可以組合出四種類型的堆棧方式:滿遞增: Full Ascending 堆棧向上增長,堆棧指針指向內含有效數據項的最高地址。指令如LDMFA、STMFA等; 空遞增: Empty Ascending 堆棧向上增長,堆棧指針指向堆棧上的第一個空位置。指令如L

15、DMEA、STMEA等; 滿遞減: Full Descending 堆棧向下增長,堆棧指針指向內含有效數據項的最低地址。指令如LDMFD、STMFD等;空遞減:Empty Descending 堆棧向下增長,堆棧指針向堆棧下的第一個空位置。指令如LDMED、STMED等。 尋址方式分類堆棧尋址第28頁/共126頁 尋址方式分類8.塊拷貝(多寄存器)尋址 把存儲器中的一個數據塊加載到多個寄存器中,或者是把多個寄存器中的內容保存到存儲器中。 塊拷貝尋址也叫多寄存器尋址。 塊拷貝尋址操作中的寄存器,可以是R0-R15這16個寄存器的子集(一部分),或是所有寄存器第29頁/共126頁四種尋址操作 LD

16、MIA / STMIAIncrement After(先傳送,后地址加4)LDMIB / STMIB Increment Before(先地址加4 ,后傳送)LDMDA / STMDADecrement After(先傳送,后地址減4)LDMDB / STMDBDecrement Before (先地址減4,后傳送)第30頁/共126頁第31頁/共126頁第32頁/共126頁第33頁/共126頁第34頁/共126頁第35頁/共126頁第36頁/共126頁第37頁/共126頁第38頁/共126頁第39頁/共126頁第40頁/共126頁第41頁/共126頁第42頁/共126頁(1)ARM數據處理指

17、令的功能主要完成寄存器中數據的算術和邏輯運算操作。(2)ARM數據處理指令的特點1.操作數來源:所有的操作數要么來自寄存器,要么來自立即數,不會來自存儲器。2.操作結果:如果有結果,則結果一定是為32位寬、或64位寬(長乘法指令),并且放在一個或兩個寄存器中,不會寫入存儲器。3.有第二個操作數(除了乘法指令) Operand2 :切記其三種形式的尋址:立即數、寄存器、寄存器偏移。4.乘法指令的操作數:全部是寄存器。第43頁/共126頁第44頁/共126頁第45頁/共126頁如果指令帶有如果指令帶有S后綴(除了比較指令以外),同時又以后綴(除了比較指令以外),同時又以PC為目標寄存器進行為目標寄

18、存器進行操作操作,在異常,在異常模式下:則操作的同時從模式下:則操作的同時從SPSR恢復恢復CPSR。比如比如: movs pc, #0 xff; cpsr = spsr, pc = 0 xff adds pc, r1, #0 xffffff00 ; cpsr = spsr, pc = r1 + 0 xffffff00 ands pc, r1, r2; cpsr = spsr, pc = r1 & r2; n在在user或者或者system模式:會產生不可預料的結果,因為在這兩種模式下沒模式:會產生不可預料的結果,因為在這兩種模式下沒有有SPSR。第46頁/共126頁1) 算術運算指令

19、一、加減運算指令(1) ADD加法運算指令指令格式:ADDcondS Rd,Rn,operand2ADD指令將operand2的數據與Rn的值相加,結果保存到Rd寄存器。舉例:ADDS R1,R1,#1 ;R1R1+1ADDS R3,R1,R2,LSL #2; R3R1+R22 第47頁/共126頁第48頁/共126頁第49頁/共126頁(4) SBC帶進位減法指令帶進位減法指令指令格式指令格式SBCcondS Rd,Rn,operand2 SBC指令用寄存器指令用寄存器Rn減去減去operand2,再減去,再減去CPSR中的中的C條件標志位的反碼,結果保存到條件標志位的反碼,結果保存到Rd中

20、。中。舉例:舉例:SUBS R4,R0,R2 ;使用;使用SBC實現實現64位減法,位減法,SBC R5,R1,R3 ;(R5,R4)(R1,R0)-(R3,R2)第50頁/共126頁(5) RSB反向減法指令反向減法指令 指令格式如下:指令格式如下:RSBcondS Rd,Rn,operand2 RSB指令用寄存器指令用寄存器operand2減去減去Rn,結果保存到,結果保存到Rd中。中。 舉例如下:舉例如下:RSB R3,R1,#0 xFF00 ;R30 xFF00-R1RSBS R1,R2,R2,LSL #2 ;R1R22-R2 ;(R1 =R23)第51頁/共126頁第52頁/共126

21、頁助記符助記符說明說明操作操作條件碼位置條件碼位置MUL Rd,Rm,RsMUL Rd,Rm,Rs3232位乘法指令位乘法指令RdRdRmRm* *Rs (RdRs (RdRm)Rm)MULcondSMULcondSMLA Rd,Rm,Rs,RnMLA Rd,Rm,Rs,Rn3232位乘加指令位乘加指令RdRdRmRm* *Rs+Rn Rs+Rn (Rd(RdRm)Rm)MLAcondSMLAcondSUMULL RdLo,RdHi,Rm,RsUMULL RdLo,RdHi,Rm,Rs6464位無符號乘法指位無符號乘法指令令(RdLo,RdHi) (RdLo,RdHi) RmRm* *Rs R

22、s UMULLcondSUMULLcondS UMLAL RdLo,RdHi,Rm,RsUMLAL RdLo,RdHi,Rm,Rs6464位無符號乘加指位無符號乘加指令令(RdLo,RdHi) (RdLo,RdHi) RmRm* *Rs+(RdLo,RdHi)Rs+(RdLo,RdHi)UMLALcondSUMLALcondS SMULL RdLo,RdHi,Rm,RsSMULL RdLo,RdHi,Rm,Rs6464位有符號乘法指位有符號乘法指令令(RdLo,RdHi) (RdLo,RdHi) RmRm* *RsRsSMULLcondSSMULLcondS SMLAL RdLo,RdHi,R

23、m,RsSMLAL RdLo,RdHi,Rm,Rs6464位有符號乘加指位有符號乘加指令令(RdLo,RdHi) (RdLo,RdHi) RmRm* *Rs+(RdLo,RdHi)Rs+(RdLo,RdHi)SMLALcondSSMLALcondS 第53頁/共126頁第54頁/共126頁第55頁/共126頁第56頁/共126頁第57頁/共126頁第58頁/共126頁第59頁/共126頁第60頁/共126頁第61頁/共126頁第62頁/共126頁第63頁/共126頁第64頁/共126頁第65頁/共126頁第66頁/共126頁 寄存器之間傳送。寄存器之間傳送。 立即數傳送到寄存器中。立即數傳送到

24、寄存器中。 實現單純的移位操作。實現單純的移位操作。 MOV Rd,Rd,LSL,#3 實現子程序調用、從子程序中返回。當實現子程序調用、從子程序中返回。當PC寄存器作為寄存器作為目標寄存器時可以實現程序跳轉。目標寄存器時可以實現程序跳轉。 實現把當前處理器模式的實現把當前處理器模式的SPSR寄存器內容復制到寄存器內容復制到CPSR中。中。第67頁/共126頁第68頁/共126頁第69頁/共126頁第70頁/共126頁第71頁/共126頁第72頁/共126頁第73頁/共126頁第74頁/共126頁(2)TEQ測試相等指令測試相等指令 指令格式如下:指令格式如下:TEQcond Rn,opera

25、nd2 TEQ指令將寄存器指令將寄存器Rn的值與的值與operand2的值按位邏輯的值按位邏輯“異異或或”操作,根據操作的結果更新操作,根據操作的結果更新CPSR中的相應條件標志位,以中的相應條件標志位,以便后面的指令根據相應的條件標志來判斷是否執(zhí)行。便后面的指令根據相應的條件標志來判斷是否執(zhí)行。舉例如下:舉例如下:TEQ R0,R1 ;比較;比較R0與與R1是否相等是否相等 ;(不影響不影響V位和位和C位位) 注:使用注:使用TEQ進行相等測試時,常與進行相等測試時,常與EQ、NE條件碼配合使用。條件碼配合使用。當兩個數據相等時,當兩個數據相等時,EQ有效;否則有效;否則NE有效。有效。第7

26、5頁/共126頁操作碼24:21助記符意 義效 果0000AND邏輯位與Rd = Rn AND Op20001EOR邏輯位異或Rd = Rn EOR Op20010SUB減Rd = Rn - Op20011RSB反向減Rd = Op2 Rn0100ADD加Rd = Rn + Op20101ADC帶進位加Rd = Rn + Op2 + C0110SBC帶進位減Rd = Rn - Op2 + C -10111RSC反向帶進位減Rd = Op2 - Rn + C -11000TST測試根據Rn AND Op2設置條件碼1001TEQ測試相等根據Rn EOR Op2設置條件1010CMP比較根據Rn

27、- Op2設置條件碼1011CMN負數比較根據Rn + Op2設置條件碼1100ORR邏輯位或Rd = Rn OR Op21101MOV傳送Rd = Op21110BIC位清零Rd = Rn AND NOT Op21111MVN求反Rd = NOT Op2第76頁/共126頁n當處理器工作在ARMARM狀態(tài)時,幾乎所有的指令均根據CPSRCPSR中條件碼的狀態(tài)和指令的條件域有條件的執(zhí)行。當指令的執(zhí)行條件滿足時,指令被執(zhí)行,否則指令被忽略。n每一條ARMARM指令包含4 4位的條件碼,位于指令的最高4 4位31:2831:28。條件碼共有1616種,每種條件碼可用兩個字符表示,這兩個字符可以添加

28、在指令助記符的后面和指令同時使用。例如,跳轉指令B B可以加上后綴EQEQ變?yōu)锽EQBEQ表示“相等則跳轉”,即當CPSRCPSR中的Z Z標志置位時發(fā)生跳轉。第77頁/共126頁條件碼后綴標 志含 義0000EQZ置位相等0001NEZ清零不相等0010CSC置位無符號數大于或等于0011CCC清零無符號數小于0100MIN置位負數0101PLN清零正數或零0110VSV置位溢出0111VCV清零未溢出ARM微處理器指令的條件域第78頁/共126頁條件碼后綴標 志含 義1001LSC清零Z置位無符號數小于或等于1010GEN等于V帶符號數大于或等于1011LTN不等于V帶符號數小于1100G

29、TZ清零且(N等于V)帶符號數大于1101LEZ置位或(N不等于V)帶符號數小于或等于1110AL任何無條件執(zhí)行ARM微處理器指令的條件域第79頁/共126頁n習題:LDR R0,=SRCLDR R1,=DSTMOV R2,#05COPY: LDMIA R0!,R3-R10 STMIA R1!,R3-R10 SUBS R2,R2,#01 BNE COPY 第80頁/共126頁第81頁/共126頁ARM微處理器用加載/存儲指令訪問存儲器,實現在寄存器和存儲器之間傳送數據。 加載指令用于將存儲器中的數據加載到寄存器中。 存儲指令則用于將寄存器中的數據存儲到存儲器中。 由于ARM處理器對外設寄存器、

30、I/O映射空間與存儲器統(tǒng)一編址,因此,對外圍設備的I/O操作也用此類指令。 第82頁/共126頁 基本的加載基本的加載/存儲指令僅有存儲指令僅有5條,分為條,分為3種:種:LDR和和STR,單寄存器加載,單寄存器加載/存儲指令存儲指令LDM和和STM,多寄存器加載,多寄存器加載/存儲指令存儲指令SWP,寄存器和存儲器數據交換指令,寄存器和存儲器數據交換指令第83頁/共126頁 單寄存器加載單寄存器加載/存儲指令是存儲指令是ARM在寄存器和存在寄存器和存儲器間傳送單個字節(jié)和字的最靈活方式。儲器間傳送單個字節(jié)和字的最靈活方式。 根據傳送數據的類型不同,單個寄存器存取指令又根據傳送數據的類型不同,單

31、個寄存器存取指令又可以分為以下兩類:可以分為以下兩類: 單字和無符號字節(jié)的加載單字和無符號字節(jié)的加載/存儲指令存儲指令半字和有符號字節(jié)的加載半字和有符號字節(jié)的加載/存儲指令存儲指令1)單寄存器的存取指令第84頁/共126頁(1)單字和無符號字節(jié)的加載存儲指令)單字和無符號字節(jié)的加載存儲指令 LDR:從存儲器中取從存儲器中取32位字或位字或8位無符號字節(jié)數據放入寄存器;位無符號字節(jié)數據放入寄存器;LDRcond Rd, ;加載指定地址上的字數據,放入;加載指定地址上的字數據,放入Rd中。中。LDRcondB Rd, ;加載字節(jié)數據到;加載字節(jié)數據到Rd中中, ; Rd最低字節(jié)有效最低字節(jié)有效 ,

32、高,高24位為位為0。第85頁/共126頁 STR:將寄存器中的將寄存器中的32位字或位字或8位無符號字節(jié)數據保存到存位無符號字節(jié)數據保存到存儲器中。儲器中。STRcond Rd, ;將;將Rd中字數據,到指定地址的存儲單元。中字數據,到指定地址的存儲單元。STRcondB Rd, ;將;將Rd中最低字節(jié)為傳送數據,存儲到指定地址的存儲中最低字節(jié)為傳送數據,存儲到指定地址的存儲單元中。單元中。第86頁/共126頁(2)半字和有符號字節(jié)的加載存儲指令半字和有符號字節(jié)的加載存儲指令這類這類LDR/STR指令可實現半字(有符號和無符號)、有指令可實現半字(有符號和無符號)、有符號字節(jié)數據的傳送。符號

33、字節(jié)數據的傳送。第87頁/共126頁LDR condH Rd, ;加載指定地址上的無符號半字數據到Rd的低16位,高16位清零。 LDR condSH Rd, ;加載指定地址上的有符號半字到Rd中低16位,高16位用符號位擴展。 LDR condSB Rd, ;加載指定地址上有符號字節(jié)到Rd中,高24位用符號位擴展 STRcondH Rd, ;存儲Rd中的低16位半字數據。 第88頁/共126頁兩點說明:兩點說明: 符符 號號 位位有符號字節(jié)或有符號半字的加載,用有符號字節(jié)或有符號半字的加載,用“符號位符號位”擴展到擴展到32位;無位;無符號半字傳送是用符號半字傳送是用0擴展到擴展到32位。位

34、。 地址對齊地址對齊對半字傳送的地址必須為偶數。非半字對齊的半字加載將使對半字傳送的地址必須為偶數。非半字對齊的半字加載將使Rd內內容不可靠;非半字對齊的半字存儲將使指定地址的容不可靠;非半字對齊的半字存儲將使指定地址的2字節(jié)存儲內容不可靠。字節(jié)存儲內容不可靠。第89頁/共126頁舉例舉例LDRSB R1,R0,R3 (前變址模式)(前變址模式) ;將;將R0+R3地址上的字節(jié)數據加載到地址上的字節(jié)數據加載到R1,高高24位用符位用符號位擴展。號位擴展。LDRSH R1,R9 ;將;將R9地址上的半字數據讀出到地址上的半字數據讀出到R1,高,高16位用位用符號位擴展。符號位擴展。LDRH R6

35、,R2,#2 (后變址模式)(后變址模式) ;將;將R2地址上的半字數據讀出到地址上的半字數據讀出到R6,高,高16位用零位用零擴展,然后修改擴展,然后修改R2=R2+2。STRH R1,R0,#2! (自動變址模式)(自動變址模式) ;將;將R1的數據保存到的數據保存到R0+2地址中,只存儲地址中,只存儲R1的低的低2字節(jié)數據,并且修改字節(jié)數據,并且修改R0=R0+2。第90頁/共126頁 LDM和和STM指令可以實現在一組寄存器和一塊連續(xù)的內存指令可以實現在一組寄存器和一塊連續(xù)的內存單元之間存單元之間存/取數據。取數據。主要用于現場保護、數據復制、常數傳遞等。LDM為加載多個寄存器為加載多

36、個寄存器 STM為存儲多個寄存器為存儲多個寄存器這兩條指令,允許傳送這兩條指令,允許傳送16個寄存器個寄存器R0-R15的任何子集的任何子集或所有寄存器。或所有寄存器。 指令格式指令格式LDMcond Rn!, STMcond Rn!,2)多寄存器的存取指令第91頁/共126頁指令格式說明指令格式說明(1)Rn:表示基址寄存器,裝有傳送數據的初始地址,表示基址寄存器,裝有傳送數據的初始地址,Rn不允許為不允許為R15(即(即PC)。)。(2)Rn后綴后綴“!”:表示最后的地址寫回到:表示最后的地址寫回到Rn中。中。(3)Reglist:表示寄存器列表,可包含多個序號連續(xù)表示寄存器列表,可包含多

37、個序號連續(xù)的或者分離的寄存器,用的或者分離的寄存器,用“,”分開。分開。格式例子:格式例子:R1,R2,R6R9列表寄存器和存儲器地址的關系規(guī)則:列表寄存器和存儲器地址的關系規(guī)則:編號低的寄存器對應于存儲器中低地址單元,編號高的編號低的寄存器對應于存儲器中低地址單元,編號高的寄存器對應于存儲器中高地址單元。寄存器對應于存儲器中高地址單元。第92頁/共126頁(4)后綴)后綴“”說明說明寄存器列表不包含寄存器列表不包含PC:使用后綴使用后綴“”進行數據傳送進行數據傳送時,加載存儲的是用戶模式的寄存器,而不是當前模時,加載存儲的是用戶模式的寄存器,而不是當前模式的寄存器。式的寄存器。寄存器列表包含

38、有寄存器列表包含有PC:除了正常的多寄存器傳送外,除了正常的多寄存器傳送外,還要將還要將SPSR拷貝到拷貝到CPSR中。中。該用法可用于異常處理返回。該用法可用于異常處理返回。禁用情況:禁用情況:后綴后綴“”不允許在用戶模式或系統(tǒng)模式下使不允許在用戶模式或系統(tǒng)模式下使用。用。 (因為它們沒有(因為它們沒有SPSR )(5)地址字對齊)地址字對齊 這些指令尋址是字對齊的,即忽略地址位這些指令尋址是字對齊的,即忽略地址位1:0。第93頁/共126頁(6)關于模式項)關于模式項LDM/STM的主要用途是現場保護、數據復制和參數傳送的主要用途是現場保護、數據復制和參數傳送等。其模式有如下等。其模式有如

39、下8種(前面種(前面4種用于數據塊的傳輸(種用于數據塊的傳輸(為存儲為存儲操作操作), 后面后面4種是堆棧操作)種是堆棧操作): IA: 先傳、后地址加先傳、后地址加4; IB: 先地址加先地址加4 、后傳;、后傳; DA:先傳、后地址減:先傳、后地址減4; DB:先地址減:先地址減4 、后傳;、后傳; FD: 滿遞減堆棧,先地址減滿遞減堆棧,先地址減4、后傳,與、后傳,與DB對應;對應; ED: 空遞減堆棧,先傳、后地址減空遞減堆棧,先傳、后地址減4,與,與DA對應;對應; FA: 滿遞增堆棧,先地址加滿遞增堆棧,先地址加4、后傳,與、后傳,與IB對應;對應; EA: 空遞增堆棧,先傳、后地

40、址加空遞增堆棧,先傳、后地址加4,與,與IA對應。對應。第94頁/共126頁ARM存儲器訪問指令多寄存器存取 多寄存器加載/存儲指令的8種模式如下表所示,右邊四種為堆棧操作、左邊四種為數據傳送操作。模式說明模式說明IA每次傳送后地址加4FD滿遞減堆棧IB每次傳送前地址加4ED空遞減堆棧DA每次傳送后地址減4FA滿遞增堆棧DB每次傳送前地址減4EA空遞增堆棧數據塊傳送操作堆棧操作 進行數據復制時,先設置好源數據指針和目標指針,然后使用塊拷貝尋址指令LDMIA/STMIA、LDMIB/STMIB、LDMDA/STMDA、LDMDB/STMDB進行讀取和存儲 。 進行堆棧操作操作時,要先設置堆棧指針

41、(SP),然后使用堆棧尋址指令STMFD/LDMFD 、STMED/LDMED、STMFA/LDMFA和STMEA/LDMEA實現堆棧操作。第95頁/共126頁ARM存儲器訪問指令多寄存器存取數據塊傳送指令操作過程如右圖所示,其中R1為指令執(zhí)行前的基址寄存器,R1則為指令執(zhí)行后的基址寄存器。R5R6R7R1 R1 指令STMIA R1!,R5-R74008H4004H4000H4014H4010H400CHR5R6R7R1 R1 指令STMDA R1!,R5-R74008H4004H4000H4014H4010H400CHR5R6R7R1 R1 指令STMIB R1!,R5-R74008H40

42、04H4000H4014H4010H400CHR5R6R7R1 R1 指令STMDB R1!,R5-R74008H4004H4000H4014H4010H400CH第96頁/共126頁ARM存儲器訪問指令多寄存器存取數據塊傳送存儲堆棧操作壓棧說明數據塊傳送加載堆棧操作出棧說明STMDASTMED空遞減LDMDALDMFA滿遞減STMIASTMEA空遞增LDMIALDMFD滿遞增STMDBSTMFD滿遞減LDMDBLDMEA空遞減STMIBSTMFA滿遞增LDMIBLDMED空遞增;使用數據塊傳送指令進行堆棧操作STMDAR0!,R5-R6. . .LDMIBR0!,R5-R6;使用堆棧指令進行

43、堆棧操作STMEDR13!,R5-R6. . .LDMEDR13!,R5-R6 兩段代碼的執(zhí)行結果是一樣的,但是使用堆棧指令的壓棧和出棧操作編程很簡單(只要前后一致即可),而使用數據塊指令進行壓棧和出棧操作則需要考慮空與滿、加與減對應的問題。 堆棧操作(詳見“4.1 尋址方式堆棧尋址”)和數據塊傳送指令類似,也有4種模式,它們之間的關系如下表所示:第97頁/共126頁應用舉例應用舉例LDMIA R0!,R3 - R9 ;加載;加載R0指向地址上的多字數據,保存到指向地址上的多字數據,保存到R3R9中,中,R0值更新。值更新。STMIA R1!,R3 - R9 ;將;將R3R9的數據存儲到的數據

44、存儲到R1指向的地址上,指向的地址上,R1值更值更新新 。STMFD SP!,R0 - R7,LR ;現場保存,將;現場保存,將R0R7、LR入棧,入棧,SP值更新值更新 。LDMFD SP!,R0 - R7,PC ;恢復現場,包括;恢復現場,包括CPSR,異常處理返回,異常處理返回,SP值更新。值更新。第98頁/共126頁3)單寄存器交換指令()單寄存器交換指令(SWP)SWP指令用于將一個存儲單元指令用于將一個存儲單元(該單元地址放在寄存該單元地址放在寄存器器Rn中中)的內容讀取到一個寄存器的內容讀取到一個寄存器Rd中,同時將另一個寄中,同時將另一個寄存器存器Rm的內容寫入到該存儲單元中。

45、的內容寫入到該存儲單元中。指令格式指令格式SWPcondB Rd,Rm,RnB為可選后綴為可選后綴,若有,若有B,則交換字節(jié),否則交換,則交換字節(jié),否則交換32位字位字Rd為被加載的目標寄存器為被加載的目標寄存器Rm的數據用于存儲到的數據用于存儲到Rn所指的地址中所指的地址中 若若Rm與與Rd相同相同,則為寄存器與存儲器內容進行交換,則為寄存器與存儲器內容進行交換Rn為要進行數據交換的存儲器地址,為要進行數據交換的存儲器地址,Rn不能與不能與Rd和和Rm相同。相同。第99頁/共126頁指令舉例指令舉例 SWP R1,R1,R0 ;將;將R1的內容與的內容與R0指向的存儲單元的指向的存儲單元的內

46、容進行交換。內容進行交換。 SWPB R1,R2,R0 ;將;將R0指向的存儲單元的內容讀取指向的存儲單元的內容讀取1字字節(jié)數據到節(jié)數據到R1中中(高高24位清零位清零),并將,并將R2的內容寫入的內容寫入到該內存單元中到該內存單元中(最低字節(jié)有效最低字節(jié)有效) 第100頁/共126頁第101頁/共126頁 主要由兩種類型指令組成,1.狀態(tài)寄存器操作指令: MRS:讀程序狀態(tài)寄存器指令 MSR:寫程序狀態(tài)寄存器指令 2.異常中斷操作指令: SWI: 軟件中斷指令 BKPT:斷點指令(v5T體系) 第102頁/共126頁 ARM指令集雜項指令 ARM指令集中有三條指令作為雜項指令,在實際應用中這

47、三條指令非常重要。它們如下所示:助記符說明操作條件碼位置SWI immed_24軟中斷指令產生軟中斷,處理器進入管理模式SWIcondMRS Rd,psr讀狀態(tài)寄存器指令Rdpsr,psr為CPSR或SPSRMRScondMSR psr_fields,Rd/#immed_8r寫狀態(tài)寄存器指令psr_fieldsRd/#immed_8r,psr為CPSR或SPSRMSRcond第103頁/共126頁1.程序狀態(tài)寄存器處理指令程序狀態(tài)寄存器處理指令 ARM指令中有兩條指令,用于在狀態(tài)寄存器和通指令中有兩條指令,用于在狀態(tài)寄存器和通用寄存器之間傳送數據。修改狀態(tài)寄存器一般是通過用寄存器之間傳送數據。

48、修改狀態(tài)寄存器一般是通過“讀取修改寫回讀取修改寫回”三個步驟的操作來實現的三個步驟的操作來實現的. 第104頁/共126頁 1)MRS讀狀態(tài)寄存器指令讀狀態(tài)寄存器指令 指令格式如下:指令格式如下:MRScond Rd,psr ; Rd psr 把狀態(tài)寄存器把狀態(tài)寄存器psr(CPSR或或SPSR)的內容傳送到目)的內容傳送到目標寄存器中。標寄存器中。其中:其中: Rd 目標寄存器。目標寄存器。Rd不允許為不允許為R15。 psr CPSR或或SPSR。 注意:在注意:在ARM處理器中,只有處理器中,只有MRS指令可以將狀態(tài)寄存指令可以將狀態(tài)寄存器器CPSR或或SPSR讀出到通用寄存器中。讀出到

49、通用寄存器中。第105頁/共126頁指令舉例如下:指令舉例如下:MRS R1,CPSR ; R1 CPSRMRS R2,SPSR ; R2 SPSRMRS與與MSR指令的應用目的:指令的應用目的: 獲得獲得CPSR或或SPSR的狀態(tài):的狀態(tài): 用用MRS指令讀取指令讀取CPSR,可用來判斷,可用來判斷ALU的狀態(tài)標志,或的狀態(tài)標志,或IRQ、FIQ中斷是否允許等。中斷是否允許等。 用用MRS指令在異常處理程序中,讀指令在異常處理程序中,讀SPSR可知道進行異可知道進行異常前的處理器狀態(tài)等。常前的處理器狀態(tài)等。 CPSR或或SPSR進行修改:進行修改: MRS與與MSR配合使用,實現配合使用,實

50、現CPSR或或SPSR寄存器的寄存器的讀讀修改修改寫操作,可用來進行處理器模式切換、允許寫操作,可用來進行處理器模式切換、允許禁止禁止IRQ/FIQ中斷等設置。中斷等設置。第106頁/共126頁2) MSR寫狀態(tài)寄存器指令寫狀態(tài)寄存器指令 在在ARM處理器中,只有處理器中,只有MSR指令可以直接設置狀態(tài)寄指令可以直接設置狀態(tài)寄存器存器CPSR或或SPSR。 指令格式如下:指令格式如下:MSRcond psr_fields,#immedMSRcond psr_fields,Rm其中:其中: psr: CPSR或或SPSR。 immed: 要傳送到狀態(tài)寄存器指定域的要傳送到狀態(tài)寄存器指定域的8位立

51、即數。位立即數。 Rm: 要傳送到狀態(tài)寄存器指定域的數據的源寄存器。要傳送到狀態(tài)寄存器指定域的數據的源寄存器。第107頁/共126頁 fields 指定傳送的區(qū)域。指定傳送的區(qū)域。fields可以是以下的一種或多種可以是以下的一種或多種(字母必須為小寫字母必須為小寫): c 控制域控制域 (psr70); x 擴展域擴展域(psr158);(暫未用暫未用) s 狀態(tài)域狀態(tài)域 (psr2316);(暫未用暫未用) f 標志位域標志位域 (psr3124)。程序狀態(tài)寄存器分域圖15 8 7 0保留保留IFTmodex(擴展域)(擴展域)c(控制域)(控制域)31 24 23 16NZCVQ保留保留

52、保留保留f(標志位域)(標志位域) s(狀態(tài)域)(狀態(tài)域) 第108頁/共126頁指令舉例如下:指令舉例如下:MSR CPSR_f,#0 xf0 ;CPSR31:280 xf(0b1111) ;即;即N,Z,C,V均被置均被置1。修改狀態(tài)寄存器一般是通過修改狀態(tài)寄存器一般是通過“讀取修改寫回讀取修改寫回”三個步驟的三個步驟的操作來實現的。操作來實現的。CPSR的讀的讀修改修改寫操作舉例如下:寫操作舉例如下: 例例1:設置進位位:設置進位位CMRSR0, CPSR ;R0CPSRORR R0,R0,#0 x20000000 ;置置1進位位進位位CMSRCPSR_f, R0 ;CPSR_fR031

53、:24 第109頁/共126頁例例2:從管理模式切換到:從管理模式切換到IRQ模式模式MRS R0, CPSR ;R0CPSRBICR0,R0,#0 x1f ;低低5位清零位清零ORR R0,R0,#0 x12 ;設置為設置為IRQ模式模式MSR CPSR_c, R0 ;傳送回傳送回CPSR第110頁/共126頁注注 意:意: 控制域的修改問題:控制域的修改問題:只有在特權模式下才能修改狀態(tài)寄存器的只有在特權模式下才能修改狀態(tài)寄存器的控制域控制域7:0,以實現處理器模式轉換,或設置開,以實現處理器模式轉換,或設置開/關異常中關異常中斷斷 。 T控制位的修改問題:控制位的修改問題:程序中不能通過

54、程序中不能通過MSR指令,直接修指令,直接修改改CPSR中的中的T控制位來實現控制位來實現ARM狀態(tài)狀態(tài)Thumb狀態(tài)的切換,狀態(tài)的切換,必須使用必須使用BX指令完成處理器狀態(tài)的切換。指令完成處理器狀態(tài)的切換。 用戶模式下能夠修改的位:用戶模式下能夠修改的位:在用戶模式只能修改在用戶模式只能修改“標志位標志位域域”,不能對,不能對CPSR23:0做修改。做修改。 S后綴的使用問題:后綴的使用問題:在在MRS/MSR指令中不可以使用指令中不可以使用S后綴。后綴。第111頁/共126頁二、異常中斷產生指令二、異常中斷產生指令 SWI: 軟件中斷指令軟件中斷指令 BKPT:斷點指令(:斷點指令(v5

55、T及以上體系)及以上體系)第112頁/共126頁1)SWI軟件中斷指令軟件中斷指令 SWISWI指令用于產生SWISWI異常,使得CPUCPU模式變換到管理模式,并且將CPSRCPSR保存到管理模式的SPSRSPSR中,然后程序跳轉到SWISWI異常入口。不影響條件碼標志。 該指令主要用于用戶程序調用操作系統(tǒng)的系統(tǒng)服務,操作系統(tǒng)在SWISWI異常處理程序中進行相應的系統(tǒng)服務。 第113頁/共126頁 指令格式如下:指令格式如下: SWI 說明:說明: 主要用于用戶程序調用操作系統(tǒng)的主要用于用戶程序調用操作系統(tǒng)的API。 參數傳遞通常有兩種方法:參數傳遞通常有兩種方法: 指令中的指令中的24bi

56、t立即數指定立即數指定API號,其它參數號,其它參數通過寄存器傳遞。通過寄存器傳遞。 忽略指令中的忽略指令中的24bit立即數,立即數,r0指定指定API號,號,其它參數通過其它寄存器傳遞。其它參數通過其它寄存器傳遞。第114頁/共126頁SWI指令舉例:指令舉例: 軟中斷號在指令中,不傳遞其它參數軟中斷號在指令中,不傳遞其它參數SWI10;中斷號為;中斷號為10SWI0 x123456;中斷號為;中斷號為0 x123456 軟中斷號在指令中,其它參數在寄存器中傳遞軟中斷號在指令中,其它參數在寄存器中傳遞MOVR0,#34;準備參數;準備參數SWI12;調用;調用12號軟中斷號軟中斷 不用指令中的立即數,軟中斷號和其它參數都在寄存器中傳遞不用指令中的立即數,軟中斷號和其它參數都在寄存器中傳遞MOVR0,#12;準備中斷號;準備中斷號MO

溫馨提示

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

最新文檔

評論

0/150

提交評論