版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、周立功單片機(jī)第4章 目錄q1.ARM處置器尋址方式q2.指令集引見(jiàn)qARM指令集qThumb指令集周立功單片機(jī)第4章 目錄q1.ARM處置器尋址方式q2.指令集引見(jiàn)qARM指令集qThumb指令集周立功單片機(jī)第4章 ARM7TDMI(-S)指令系統(tǒng) 簡(jiǎn)介 ARM處置器是基于精簡(jiǎn)指令集計(jì)算機(jī)(RISC)原理設(shè)計(jì)的,指令集和相關(guān)譯碼機(jī)制較為簡(jiǎn)單。ARM7TDMI(-S)具有32位ARM指令集和16位Thumb指令集,ARM指令集效率高,但是代碼密度低;而Thumb指令集具有較高的代碼密度,卻依然堅(jiān)持ARM的大多數(shù)性能上的優(yōu)勢(shì),它是ARM指令集的子集。一切的ARM指令都是可以有條件執(zhí)行的,而Thum
2、b指令僅有一條指令具備條件執(zhí)行功能。ARM程序和Thumb程序可相互調(diào)用,相互之間的形狀切換開(kāi)銷幾乎為零。 周立功單片機(jī)第4章 ARM7TDMI(-S)指令系統(tǒng) ARM指令集與Thumb指令集的關(guān)系Thumb指令集具有靈敏、小巧的特點(diǎn)ARM指令集支持ARM核一切的特性,具有高效、快速的特點(diǎn)周立功單片機(jī)4.1 ARM處置器尋址方式 尋址方式分類 尋址方式是根據(jù)指令中給出的地址碼字段來(lái)實(shí)現(xiàn)尋覓真實(shí)操作數(shù)地址的方式。ARM處置器具有9種根本尋址方式。1.存放器尋址;2.立刻尋址;3.存放器移位尋址;4.存放器間接尋址;5.基址尋址;6.多存放器尋址;7.堆棧尋址;8.塊拷貝尋址;9.相對(duì)尋址。周立功
3、單片機(jī) 操作數(shù)的值在存放器中,指令中的地址碼字段指出的是存放器編號(hào),指令執(zhí)行時(shí)直接取出存放器值來(lái)操作。存放器尋址指令舉例如下: MOV R1,R2 ;將R2的值存入R1 SUB R0,R1,R2 ;將R1的值減去R2的值,結(jié)果保管到R0 0 xAA0 x55R2R14.1 ARM處置器尋址方式 尋址方式分類存放器尋址MOV R1,R20 xAA周立功單片機(jī) 立刻尋址指令中的操作碼字段后面的地址碼部分即是操作數(shù)本身,也就是說(shuō),數(shù)據(jù)就包含在指令當(dāng)中,取出指令也就取出了可以立刻便用的操作數(shù)(這樣的數(shù)稱為立刻數(shù))。立刻尋址指令舉例如下: SUBS R0,R0,#1 ;R0減1,結(jié)果放入R0,并且影響標(biāo)
4、志位MOV R0,#0 xFF000 ;將立刻數(shù)0 xFF000裝入R0存放器 0 x55R0MOV R0,#0 xFF00程序存儲(chǔ)4.1 ARM處置器尋址方式 尋址方式分類立刻尋址MOV R0,#0 xFF000 xFF00從代碼中獲得數(shù)據(jù)周立功單片機(jī) 存放器移位尋址是ARM指令集特有的尋址方式。當(dāng)?shù)?個(gè)操作數(shù)是存放器移位方式時(shí),第2個(gè)存放器操作數(shù)在與第1個(gè)操作數(shù)結(jié)合之前,選擇進(jìn)展移位操作。存放器移位尋址指令舉例如下:MOV R0,R2,LSL #3 ;R2的值左移3位,結(jié)果放入R0, ;即是R0=R28 ANDS R1,R1,R2,LSL R3 ;R2的值左移R3位,然后和R1相 ;“與操
5、作,結(jié)果放入R10 x55R0R20 x014.1 ARM處置器尋址方式 尋址方式分類存放器移位尋址MOV R0,R2,LSL #30 x080 x08邏輯左移3位周立功單片機(jī) 存放器間接尋址指令中的地址碼給出的是一個(gè)通用存放器的編號(hào),所需的操作數(shù)保管在存放器指定地址的存儲(chǔ)單元中,即存放器為操作數(shù)的地址指針。存放器間接尋址指令舉例如下: LDRR1,R2;將R2指向的存儲(chǔ)單元的數(shù)據(jù)讀出;保管在R1中 SWPR1,R1,R2;將存放器R1的值和R2指定的存儲(chǔ);單元的內(nèi)容交換 0 x55R0R2 0 x400000000 xAA0 x400000004.1 ARM處置器尋址方式 尋址方式分類存放器
6、間接尋址LDR R1,R20 xAA周立功單片機(jī) 基址尋址就是將基址存放器的內(nèi)容與指令中給出的偏移量相加,構(gòu)成操作數(shù)的有效地址。基址尋址用于訪問(wèn)基址附近的存儲(chǔ)單元,常用于查表、數(shù)組操作、功能部件存放器訪問(wèn)等?;穼ぶ分噶钆e例如下: LDRR2,R3,#0 x0C ;讀取R3+0 x0C地址上的存儲(chǔ)單元 ;的內(nèi)容,放入R2 STRR1,R0,#-4! ;先R0=R0-4,然后把R1的值存放 ;到保管到R0指定的存儲(chǔ)單元 4.1 ARM處置器尋址方式 尋址方式分類基址尋址0 x55R2R3 0 x400000000 xAA0 x4000000CLDR R2,R3,#0 x0C0 xAA將R3+0
7、x0C作為地址裝載數(shù)據(jù)周立功單片機(jī) 多存放器尋址一次可傳送幾個(gè)存放器值,允許一條指令傳送16個(gè)存放器的任何子集或一切存放器。多存放器尋址指令舉例如下: LDMIAR1!,R2-R7,R12 ;將R1指向的單元中的數(shù)據(jù)讀出到 ;R2R7、R12中(R1自動(dòng)加1) STMIAR0!,R2-R7,R12 ;將存放器R2R7、R12的值保 ;存到R0指向的存儲(chǔ); 單元中 ;(R0自動(dòng)加1)0 x40000000R1R20 x?0 x010 x400000000 x?R3R40 x?R60 x?0 x020 x030 x040 x400000040 x400000080 x4000000C存儲(chǔ)器4.1
8、ARM處置器尋址方式 尋址方式分類多存放器尋址LDR R1!,R2-R4,R6 0 x010 x020 x030 x040 x40000010周立功單片機(jī) 堆棧是一個(gè)按特定順序進(jìn)展存取的存儲(chǔ)區(qū),操作順序?yàn)椤昂筮M(jìn)先出 。堆棧尋址是隱含的,它運(yùn)用一個(gè)專門的存放器(堆棧指針)指向一塊存儲(chǔ)區(qū)域(堆棧),指針?biāo)赶虻拇鎯?chǔ)單元即是堆棧的棧頂。存儲(chǔ)器堆棧可分為兩種: 向上生長(zhǎng):向高地址方向生長(zhǎng),稱為遞增堆棧向下生長(zhǎng):向低地址方向生長(zhǎng),稱為遞減堆棧4.1 ARM處置器尋址方式 尋址方式分類堆棧尋址周立功單片機(jī)4.1 ARM處置器尋址方式 尋址方式分類堆棧尋址棧底棧頂棧區(qū)SP堆棧存儲(chǔ)區(qū)棧頂棧底棧區(qū)SP向下增長(zhǎng)向
9、上增長(zhǎng)0 x123456780 x12345678堆棧壓棧堆棧壓棧周立功單片機(jī)棧頂SP棧頂SP棧底空堆棧棧底滿堆棧 堆棧指針指向最后壓入的堆棧的有效數(shù)據(jù)項(xiàng),稱為滿堆棧;堆棧指針指向下一個(gè)待壓入數(shù)據(jù)的空位置,稱為空堆棧。 4.1 ARM處置器尋址方式 尋址方式分類堆棧尋址0 x123456780 x12345678棧頂SP0 x12345678棧頂SP壓棧壓棧周立功單片機(jī)所以可以組合出四種類型的堆棧方式:滿遞增:堆棧向上增長(zhǎng),堆棧指針指向內(nèi)含有效數(shù)據(jù)項(xiàng)的最高地址。指令如LDMFA、STMFA等; 空遞增:堆棧向上增長(zhǎng),堆棧指針指向堆棧上的第一個(gè)空位置。指令如LDMEA、STMEA等; 滿遞減:堆
10、棧向下增長(zhǎng),堆棧指針指向內(nèi)含有效數(shù)據(jù)項(xiàng)的最低地址。指令如LDMFD、STMFD等;空遞減:堆棧向下增長(zhǎng),堆棧指針向堆棧下的第一個(gè)空位置。指令如LDMED、STMED等。 4.1 ARM處置器尋址方式 尋址方式分類堆棧尋址周立功單片機(jī) 多存放器傳送指令用于將一塊數(shù)據(jù)從存儲(chǔ)器的某一位置拷貝到另一位置。 如:STMIAR0!,R1-R7;將R1R7的數(shù)據(jù)保管到存儲(chǔ)器中。;存儲(chǔ)指針在保管第一個(gè)值之后添加,;增長(zhǎng)方向?yàn)橄蛏显鲩L(zhǎng)。STMIBR0!,R1-R7;將R1R7的數(shù)據(jù)保管到存儲(chǔ)器中。;存儲(chǔ)指針在保管第一個(gè)值之前添加,;增長(zhǎng)方向?yàn)橄蛏显鲩L(zhǎng)。 4.1 ARM處置器尋址方式 尋址方式分類塊拷貝尋址周立功
11、單片機(jī) 相對(duì)尋址是基址尋址的一種變通。由程序計(jì)數(shù)器PC提供基準(zhǔn)地址,指令中的地址碼字段作為偏移量,兩者相加后得到的地址即為操作數(shù)的有效地址。相對(duì)尋址指令舉例如下:BLSUBR1;調(diào)用到SUBR1子程序BEQLOOP;條件跳轉(zhuǎn)到LOOP標(biāo)號(hào)處.LOOP MOV R6,#1.SUBR1. 4.1 ARM處置器尋址方式 尋址方式分類相對(duì)尋址周立功單片機(jī)第4章 目錄q1.ARM處置器尋址方式q2.指令集引見(jiàn)qARM指令集qThumb指令集周立功單片機(jī) 簡(jiǎn)單的ARM程序;文件名:TEST1.S ;功能:實(shí)現(xiàn)兩個(gè)存放器相加 ;闡明:運(yùn)用ARMulate軟件仿真調(diào)試 AREAExample1,CODE,RE
12、ADONLY ;聲明代碼段Example1 ENTRY ;標(biāo)識(shí)程序入口 CODE32 ;聲明32位ARM指令START MOVR0,#0 ;設(shè)置參數(shù) MOVR1,#10LOOPBLADD_SUB ;調(diào)用子程序ADD_SUB BLOOP ;跳轉(zhuǎn)到LOOPADD_SUB ADDSR0,R0,R1 ;R0 = R0 + R1 MOVPC,LR ;子程序前往 END ;文件終了 運(yùn)用“;進(jìn)展注釋標(biāo)號(hào)頂格寫實(shí)踐代碼段聲明文件終了周立功單片機(jī) 簡(jiǎn)單的ARM程序;文件名:TEST1.S ;功能:實(shí)現(xiàn)兩個(gè)存放器相加 ;闡明:運(yùn)用ARMulate軟件仿真調(diào)試 AREAExample1,CODE,READONLY
13、 ;聲明代碼段Example1 ENTRY ;標(biāo)識(shí)程序入口 CODE32 ;聲明32位ARM指令START MOVR0,#0 ;設(shè)置參數(shù) MOVR1,#10LOOPBLADD_SUB ;調(diào)用子程序ADD_SUB BLOOP ;跳轉(zhuǎn)到LOOPADD_SUB ADDSR0,R0,R1 ;R0 = R0 + R1 MOVPC,LR ;子程序前往 END ;文件終了 周立功單片機(jī)第4章 目錄q1.ARM處置器尋址方式q2.指令集引見(jiàn)qARM指令集qThumb指令集周立功單片機(jī)ARM指令小節(jié)目錄1.指令格式2.條件碼3.存儲(chǔ)器訪問(wèn)指令4.數(shù)據(jù)處置指令5.乘法指令6.ARM分支指令7.協(xié)處置器指令8.雜項(xiàng)
14、指令9.偽指令周立功單片機(jī)ARM指令小節(jié)目錄1.指令格式2.條件碼3.存儲(chǔ)器訪問(wèn)指令4.數(shù)據(jù)處置指令5.乘法指令6.ARM分支指令7.協(xié)處置器指令8.雜項(xiàng)指令9.偽指令周立功單片機(jī) ARM指令的根本格式如下:4.2 指令集引見(jiàn) ARM指令集指令格式 S , 其中號(hào)內(nèi)的項(xiàng)是必需的,號(hào)內(nèi)的項(xiàng)是可選的。各項(xiàng)的闡明如下:opcode:指令助記符;:指令助記符;cond:執(zhí)行條件;:執(zhí)行條件;S:能否影響:能否影響CPSR存放器的值;存放器的值;Rd:目的存放器;:目的存放器; Rn:第:第1個(gè)操作數(shù)的存放器;個(gè)操作數(shù)的存放器;operand2:第:第2個(gè)操作數(shù);個(gè)操作數(shù);周立功單片機(jī) ARM指令的根本
15、格式如下:4.2 指令集引見(jiàn) ARM指令集第2個(gè)操作數(shù) S , 靈敏的運(yùn)用第2個(gè)操作數(shù)“operand2可以提高代碼效率。它有如下的方式:#immed_8r常數(shù)表達(dá)式;Rm存放器方式;Rm,shift存放器移位方式;周立功單片機(jī)4.2 指令集引見(jiàn) ARM指令集第2個(gè)操作數(shù)#immed_8r常數(shù)表達(dá)式 該常數(shù)必需對(duì)應(yīng)8位位圖,即一個(gè)8位的常數(shù)經(jīng)過(guò)循環(huán)右移偶數(shù)位得到。循環(huán)右移10位0 x120 0 0 1 0 0 1 00 x000 0 0 0 0 0 0 00 x000 0 0 0 0 0 0 00 x000 0 0 0 0 0 0 00 x000 0 0 0 0 0 0 00 x000 0 0
16、 0 0 0 0 00 x801 0 0 0 0 0 0 00 x040 0 0 0 0 1 0 08位常數(shù)周立功單片機(jī)4.2 指令集引見(jiàn) ARM指令集第2個(gè)操作數(shù)#immed_8r常數(shù)表達(dá)式 該常數(shù)必需對(duì)應(yīng)8位位圖,即一個(gè)8位的常數(shù)經(jīng)過(guò)循環(huán)右移偶數(shù)位得到。例如:MOV R0,#1ANDR1,R2,#0 x0F周立功單片機(jī)4.2 指令集引見(jiàn) ARM指令集第2個(gè)操作數(shù)Rm存放器方式 在存放器方式下,操作數(shù)即為存放器的數(shù)值。例如:SUB R1,R1,R2MOVPC,R0周立功單片機(jī)4.2 指令集引見(jiàn) ARM指令集第2個(gè)操作數(shù)Rm,shift存放器移位方式 將存放器的移位結(jié)果作為操作數(shù),但Rm值堅(jiān)持
17、不變,移位方法如下:周立功單片機(jī)4.2 指令集引見(jiàn) ARM指令集第2個(gè)操作數(shù)LSL移位操作:0LSR移位操作:0ASR移位操作:ROR移位操作:RRX移位操作:C周立功單片機(jī)4.2 指令集引見(jiàn) ARM指令集第2個(gè)操作數(shù)Rm,shift存放器移位方式例如:ADD R1,R1,R1,LSL #3;R1=R1+R1*8=9R1SUB R1,R1,R2,LSR R3;R1=R1-(R2/2R3)周立功單片機(jī)ARM指令小節(jié)目錄1.指令格式2.條件碼3.存儲(chǔ)器訪問(wèn)指令4.數(shù)據(jù)處置指令5.乘法指令6.ARM分支指令7.協(xié)處置器指令8.雜項(xiàng)指令9.偽指令周立功單片機(jī) ARM指令的根本格式如下:4.2 指令集引
18、見(jiàn) ARM指令集條件碼 S , 運(yùn)用條件碼“cond可以實(shí)現(xiàn)高效的邏輯操作,提高代碼效率。 一切的ARM指令都可以條件執(zhí)行,而Thumb指令只需B跳轉(zhuǎn)指令具有條件執(zhí)行 功能。假設(shè)指令不標(biāo)明條件代碼,將默以為無(wú)條件AL執(zhí)行。周立功單片機(jī) 指令條件碼表周立功單片機(jī)4.2 指令集引見(jiàn) ARM指令集條件碼C代碼:If(a b)a+;Elseb+;對(duì)應(yīng)的匯編代碼:CMPR0,R1 ;R0與R1比較ADDHIR0,R0,#1 ;假設(shè)R0R1,那么R0=R0+1ADDLSR1,R1,#1 ;假設(shè)R01,那么R1=R1+1例如:周立功單片機(jī)ARM指令小節(jié)目錄1.指令格式2.條件碼3.存儲(chǔ)器訪問(wèn)指令4.數(shù)據(jù)處置
19、指令5.乘法指令6.ARM分支指令7.協(xié)處置器指令8.雜項(xiàng)指令9.偽指令周立功單片機(jī)4.2 指令集引見(jiàn) ARM指令集存儲(chǔ)器訪問(wèn)指令 ARM處置器是典型的RISC處置器,對(duì)存儲(chǔ)器的訪問(wèn)只能運(yùn)用加載和存儲(chǔ)指令實(shí)現(xiàn)。ARM處置器是馮諾依曼存儲(chǔ)構(gòu)造,程序空間、RAM空間及I/O映射空間一致編址,除對(duì)RAM操作以外,對(duì)外圍IO、程序數(shù)據(jù)的訪問(wèn)均要經(jīng)過(guò)加載/存儲(chǔ)指令進(jìn)展。 存儲(chǔ)器訪問(wèn)指令分為單存放器操作指令和多存放器操作指令。周立功單片機(jī) ARM存儲(chǔ)器訪問(wèn)指令單存放器加載周立功單片機(jī) ARM存儲(chǔ)器訪問(wèn)指令單存放器存儲(chǔ) LDR/STR指令用于對(duì)內(nèi)存變量的訪問(wèn)、內(nèi)存緩沖區(qū)數(shù)據(jù)的訪問(wèn)、查表、外圍部件的控制操作等
20、。假設(shè)運(yùn)用LDR指令加載數(shù)據(jù)到PC存放器,那么實(shí)現(xiàn)程序跳轉(zhuǎn)功能,這樣也就實(shí)現(xiàn)了程序散轉(zhuǎn)。 一切單存放器加載/存儲(chǔ)指令可分為“字和無(wú)符號(hào)字節(jié)加載存儲(chǔ)指令和“半字和有符號(hào)字節(jié)加載存儲(chǔ)指令。周立功單片機(jī)LDR和STR字和無(wú)符號(hào)字節(jié)加載/存儲(chǔ)指令 LDR指令用于從內(nèi)存中讀取單一字或字節(jié)數(shù)據(jù)存入存放器中,STR指令用于將存放器中的單一字或字節(jié)數(shù)據(jù)保管到內(nèi)存。指令格式如下: ARM存儲(chǔ)器訪問(wèn)指令單存放器存儲(chǔ) LDRcondTRd, ;將指定地址上的字?jǐn)?shù)據(jù)讀入Rd STRcondTRd, ;將Rd中的字?jǐn)?shù)據(jù)存入指定地址 LDRcondBTRd, ;將指定地址上的字節(jié)數(shù)據(jù)讀入Rd STRcondBTRd, ;
21、將Rd中的字節(jié)數(shù)據(jù)存入指定地址 其中,T為可選后綴。假設(shè)指令有T,那么即使處置器是在特權(quán)方式下,存儲(chǔ)系統(tǒng)也將訪問(wèn)看成是在用戶方式下進(jìn)展的。T在用戶方式下無(wú)效,不能與前索引偏移一同運(yùn)用T。 周立功單片機(jī) ARM存儲(chǔ)器訪問(wèn)指令單存放器存儲(chǔ)LDR和STR字和無(wú)符號(hào)字節(jié)加載/存儲(chǔ)指令編碼指令執(zhí)行的條件碼I為0時(shí),偏移量為12位立刻數(shù),為1時(shí),偏移量為存放器移位P表示前/后變址U表示加/減B為1表示字節(jié)訪問(wèn),為0表示字訪問(wèn)W表示回寫為指令的尋址方式Rd為源/目的存放器Rn為基址存放器L用于區(qū)別加載L為1或存儲(chǔ)L為0周立功單片機(jī) ARM存儲(chǔ)器訪問(wèn)指令單存放器存儲(chǔ)LDR和STR字和無(wú)符號(hào)字節(jié)加載/存儲(chǔ)指令
22、LDR/STR指令尋址非常靈敏,它由兩部分組成,其中一部分為一個(gè)基址存放器,可以為任一個(gè)通用存放器;另一部分為一個(gè)地址偏移量。地址偏移量有以下3種格式: 立刻數(shù)。立刻數(shù)可以是一個(gè)無(wú)符號(hào)的數(shù)值。這個(gè)數(shù)據(jù)可以加到基址存放器,也可以從基址存放器中減去這個(gè)數(shù)值。 如:LDR R1,R0,#0 x12 存放器。存放器中的數(shù)值可以加到基址存放器,也可以從基址存放器中減去這個(gè)數(shù)值。 如:LDR R1,R0,R2 存放器及移位常數(shù)。存放器移位后的值可以加到基址存放器,也可以從基址存放器中減去這個(gè)數(shù)值。 如:LDR R1,R0,R2,LSL #2 周立功單片機(jī) ARM存儲(chǔ)器訪問(wèn)指令單存放器存儲(chǔ) 從尋址方式的地址
23、計(jì)算方法分,加載/存儲(chǔ)指令有以下4種格式: 零偏移。如:LDR Rd,Rn 前 索 引 偏 移 。如 : L D R Rd,Rn,#0 x04!程序相對(duì)偏移。如:LDR Rd,labe1 后 索 引 偏 移 。如 : L D R Rd,Rn,#0 x04留意:大多數(shù)情況下,必需保證字?jǐn)?shù)據(jù)操作的地址是32位對(duì)齊的。LDR和STR字和無(wú)符號(hào)字節(jié)加載/存儲(chǔ)指令周立功單片機(jī)LDR和STR半字和有符號(hào)字節(jié)加載/存儲(chǔ)指令 這類LDR/STR指令可加載有符號(hào)半字或字節(jié),可加載/存儲(chǔ)無(wú)符號(hào)半字。偏移量格式、尋址方式與加載/存儲(chǔ)字和無(wú)符號(hào)字節(jié)指令一樣。 ARM存儲(chǔ)器訪問(wèn)指令單存放器存儲(chǔ) LDRcondSB Rd
24、, ;將指定地址上的有符號(hào)字節(jié)讀入Rd LDRcondSH Rd, ;將指定地址上的有符號(hào)半字讀入Rd LDRcondH Rd, ;將指定地址上的半字?jǐn)?shù)據(jù)讀入Rd STRcondH Rd, ;將Rd中的半字?jǐn)?shù)據(jù)存入指定地址留意:1.有符號(hào)位半字/字節(jié)加載是指用符號(hào)位加載擴(kuò)展到32位,無(wú)符號(hào)半字加載是指用零擴(kuò)展到32位;2.半字讀寫的指定地址必需為偶數(shù),否那么將產(chǎn)生不可靠的結(jié)果;周立功單片機(jī) ARM存儲(chǔ)器訪問(wèn)指令單存放器存儲(chǔ)LDR和STR半字和有符號(hào)字節(jié)加載/存儲(chǔ)指令編碼指令執(zhí)行的條件碼I為0時(shí),偏移量為12位立刻數(shù),為1時(shí),偏移量為存放器移位P表示前/后變址U表示加/減W表示回寫為指令的尋址方
25、式Rd為源/目的存放器Rn為基址存放器L用于區(qū)別加載L為1或存儲(chǔ)L為0S為1表示有符號(hào)訪問(wèn),為0表示無(wú)符號(hào)訪問(wèn)H為1表示半字訪問(wèn),為0表示字節(jié)訪問(wèn)周立功單片機(jī)LDR和STR指令運(yùn)用例如:1.加載/存儲(chǔ)字和無(wú)符號(hào)字節(jié)指令LDRR2,R5;將R5指向地址的字?jǐn)?shù)據(jù)存入R2STRR1,R0,#0 x04;將R1的數(shù)據(jù)存儲(chǔ)到R0+0 x04地址LDRB R3,R2,#1 ;將R2指向地址的字節(jié)數(shù)據(jù)存入R3,R2R2+1STRB R6,R7 ;將R7指向地址的字節(jié)數(shù)據(jù)存入R62.加載/存儲(chǔ)半字和有符號(hào)字節(jié)指令LDRSB R1,R0,R3 ;將R0+R3地址上的字節(jié)數(shù)據(jù)存入R1,;高24位用符號(hào)擴(kuò)展LDRH
26、 R6,R2,#2 ;將R2指向地址的半字?jǐn)?shù)據(jù)存入R6,高16位用0擴(kuò)展;讀出后,R2=R2+2STRH R1,R0,#2! ;將R1的半字?jǐn)?shù)據(jù)保管到R0+2地址,;只修正低2字節(jié)數(shù)據(jù),R0=R0+2 ARM存儲(chǔ)器訪問(wèn)指令單存放器存儲(chǔ)周立功單片機(jī) ARM存儲(chǔ)器訪問(wèn)指令多存放器存取 多存放器加載/存儲(chǔ)指令可以實(shí)如今一組存放器和一塊延續(xù)的內(nèi)存單元之間傳輸數(shù)據(jù)。LDM為加載多個(gè)存放器;STM為存儲(chǔ)多個(gè)存放器。允許一條指令傳送16個(gè)存放器的任何子集或一切存放器。它們主要用于現(xiàn)場(chǎng)維護(hù)、數(shù)據(jù)復(fù)制、常數(shù)傳送等。周立功單片機(jī) ARM存儲(chǔ)器訪問(wèn)指令多存放器存取 多存放器加載/存儲(chǔ)指令格式如下: LDMcond
27、Rn!,reglist STMcond Rn!,reglistcond:指令執(zhí)行的條件;方式:控制地址的增長(zhǎng)方式,一共有8種方式;!:表示在操作終了后,將最后的地址寫回Rn中;reglist :表示存放器列表,可以包含多個(gè)存放器,它們運(yùn)用“,隔開(kāi),如R1,R2,R6-R9,存放器由小到大陳列;:參與該后綴后,進(jìn)展數(shù)據(jù)傳送且存放器列表不包含PC時(shí),加載/存儲(chǔ)的存放器是用戶方式下的,而不是當(dāng)前方式的存放器。假設(shè)在LDM指令且存放器列表中包含有PC時(shí)運(yùn)用,那么除了正常的多存放器傳送外,還將SPSR也拷貝到CPSR中,這可用于異常處置前往。留意:該后綴不允許在用戶方式或系統(tǒng)方式下運(yùn)用。周立功單片機(jī) A
28、RM存儲(chǔ)器訪問(wèn)指令多存放器存取LDM和STM多存放器加載/存儲(chǔ)指令編碼指令執(zhí)行的條件碼S對(duì)應(yīng)于指令中的符號(hào)P表示前/后變址U表示加/減W表示回寫存放器列表Rn為基址存放器L用于區(qū)別加載L為1或存儲(chǔ)L為0周立功單片機(jī) ARM存儲(chǔ)器訪問(wèn)指令多存放器存取 多存放器加載/存儲(chǔ)指令的8種方式如下表所示,右邊四種為堆棧操作、左邊四種為數(shù)據(jù)傳送操作。 進(jìn)展數(shù)據(jù)復(fù)制時(shí),先設(shè)置好源數(shù)據(jù)指針和目的指針,然后運(yùn)用塊拷貝尋址指令LDMIA/STMIA、LDMIB/STMIB、LDMDA/STMDA、LDMDB/STMDB進(jìn)展讀取和存儲(chǔ) 。 進(jìn)展堆棧操作操作時(shí),要先設(shè)置堆棧指針SP,然后運(yùn)用堆棧尋址指令STMFD/LD
29、MFD 、STMED/LDMED、STMFA/LDMFA和STMEA/LDMEA實(shí)現(xiàn)堆棧操作。周立功單片機(jī) ARM存儲(chǔ)器訪問(wèn)指令多存放器存取數(shù)據(jù)塊傳送指令操作過(guò)程如右圖所示,其中R1為指令執(zhí)行前的基址存放器,R1那么為指令執(zhí)行后的基址存放器。R5R6R7R1 R1 指令STMIA R1!,R5-R74008H4004H4000H4014H4010H400CHR5R6R7R1 R1 指令STMDA R1!,R5-R74008H4004H4000H4014H4010H400CHR5R6R7R1 R1 指令STMIB R1!,R5-R74008H4004H4000H4014H4010H400CHR5
30、R6R7R1 R1 指令STMDB R1!,R5-R74008H4004H4000H4014H4010H400CH周立功單片機(jī) ARM存儲(chǔ)器訪問(wèn)指令多存放器存取;運(yùn)用數(shù)據(jù)塊傳送指令進(jìn)展堆棧操作STMDAR0!,R5-R6. . .LDMIBR0!,R5-R6;運(yùn)用堆棧指令進(jìn)展堆棧操作STMEDR0!,R5-R6. . .LDMEDR0!,R5-R6 兩段代碼的執(zhí)行結(jié)果是一樣的,但是運(yùn)用堆棧指令的壓棧和出棧操作編程很簡(jiǎn)單只需前后一致即可,而運(yùn)用數(shù)據(jù)塊指令進(jìn)展壓棧和出棧操作那么需求思索空與滿、加與減對(duì)應(yīng)的問(wèn)題。 堆棧操作詳見(jiàn)“4.1 尋址方式堆棧尋址和數(shù)據(jù)塊傳送指令類似,也有4種方式,它們之間的關(guān)
31、系如下表所示:周立功單片機(jī) ARM存儲(chǔ)器訪問(wèn)指令存放器和存儲(chǔ)器交換指令 SWP指令用于將一個(gè)內(nèi)存單元(該單元地址放在存放器Rn中)的內(nèi)容讀取到一個(gè)存放器Rd中,同時(shí)將另一個(gè)存放器Rm的內(nèi)容寫入到該內(nèi)存單元中。運(yùn)用SWP可實(shí)現(xiàn)信號(hào)量操作。 指令格式如下:SWPcondB Rd,Rm,Rn 其中,B為可選后綴,假設(shè)有B,那么交換字節(jié),否那么交換32位字;Rd用于保管從存儲(chǔ)器中讀入的數(shù)據(jù);Rm的數(shù)據(jù)用于存儲(chǔ)到存儲(chǔ)器中,假設(shè)Rm與Rn一樣,那么為存放器與存儲(chǔ)器內(nèi)容進(jìn)展交換;Rn為要進(jìn)展數(shù)據(jù)交換的存儲(chǔ)器地址,Rn不能與Rd和Rm一樣。 周立功單片機(jī) ARM存儲(chǔ)器訪問(wèn)指令存放器和存儲(chǔ)器交換指令SWP和SW
32、PB存放器和存儲(chǔ)器交換指令編碼指令執(zhí)行的條件碼B用于區(qū)別無(wú)符號(hào)字節(jié)B為1或字B為0Rm源存放器Rd目的存放器Rn為基址存放器SWP指令運(yùn)用例如:SWPR1,R1,R0;將R1的內(nèi)容與R0指向的存儲(chǔ)單元的內(nèi)容進(jìn)展交換 SWPB R1,R2,R0;將R0指向的存儲(chǔ)單元內(nèi)的容讀取一字節(jié)數(shù)據(jù)到R1中;(高24位清零),并將R2的內(nèi)容寫入到該內(nèi)存單元中;(最低字節(jié)有效) 周立功單片機(jī)ARM指令小節(jié)目錄1.指令格式2.條件碼3.存儲(chǔ)器訪問(wèn)指令4.數(shù)據(jù)處置指令5.乘法指令6.ARM分支指令7.協(xié)處置器指令8.雜項(xiàng)指令9.偽指令周立功單片機(jī)4.2 指令集引見(jiàn) ARM指令集ARM數(shù)據(jù)處置指令 數(shù)據(jù)處置指令大致可
33、分為3類: 數(shù)據(jù)傳送指令;算術(shù)邏輯運(yùn)算指令;比較指令。 數(shù)據(jù)處置指令只能對(duì)存放器的內(nèi)容進(jìn)展操作,而不能對(duì)內(nèi)存中的數(shù)據(jù)進(jìn)展操作。一切ARM數(shù)據(jù)處置指令均可選擇運(yùn)用S后綴,并影響形狀標(biāo)志。 周立功單片機(jī) ARM數(shù)據(jù)處置指令指令編碼指令執(zhí)行的條件碼I用于區(qū)別立刻數(shù)I為1和存放器移位I為0opcode數(shù)據(jù)處置指令操作碼第二操作數(shù)Rd目的存放器Rn第一操作數(shù)存放器S設(shè)置條件碼,與指令中的S位對(duì)應(yīng)帶進(jìn)位加法ADC0101帶進(jìn)位減法指令SBC0110帶進(jìn)位逆向減法指令RSC0111位測(cè)試指令TST1000相等測(cè)試指令TEQ1001比較指令CMP1010負(fù)數(shù)比較指令CMN1011邏輯或操作指令ORR1100數(shù)
34、據(jù)傳送MOV1101位去除指令BIC1110數(shù)據(jù)非傳送MVN1111加法運(yùn)算指令A(yù)DD0100逆向減法指令RSB0011減法運(yùn)算指令SUB0010邏輯異或操作指令EOR0001邏輯與操作指令A(yù)ND0000闡明指令助記符操作碼opcode操作碼功能表周立功單片機(jī) ARM數(shù)據(jù)處置指令數(shù)據(jù)傳送周立功單片機(jī) ARM數(shù)據(jù)處置指令數(shù)據(jù)傳送 MOV指令將8位圖立刻數(shù)參看“第2操作數(shù):#immed_8r常數(shù)表達(dá)式 或存放器傳送到目的存放器Rd,可用于移位運(yùn)算等操作。指令格式如下: MOVcondS Rd,operand2 MOV指令舉例如下: MOVR1,#0 x10;R1=0 x10 MOVR0,R1;R0
35、=R1 MOVSR3,R1,LSL #2;R3=R12,并影響標(biāo)志位 MOVPC,LR;PC=LR,子程序前往 周立功單片機(jī) ARM數(shù)據(jù)處置指令數(shù)據(jù)傳送 MVN指令將8位圖立刻數(shù)參看“第2操作數(shù):#immed_8r常數(shù)表達(dá)式 或存放器operand2按位取反后傳送到目的存放器Rd,由于其具有取反功能,所以可以裝載范圍更廣的立刻數(shù)。指令格式如下: MVNcondS Rd,operand2 MVN指令舉例如下: MVN R1,#0 xFF;R1=0 xFFFFFF00 MVN R1,R2;將R2取反,結(jié)果存到R1周立功單片機(jī) ARM數(shù)據(jù)處置指令算術(shù)運(yùn)算周立功單片機(jī) ARM數(shù)據(jù)處置指令算術(shù)運(yùn)算 加法
36、運(yùn)算指令A(yù)DD指令將operand2的值與Rn的值相加,結(jié)果保管到Rd存放器。指令格式如下: ADDcondS Rd,Rn,operand2 運(yùn)用例如: ADDS R1,R1,#1;R1=R1+1,并影響標(biāo)志位 ADD R1,R1,R2;R1=R1+R2 周立功單片機(jī) ARM數(shù)據(jù)處置指令算術(shù)運(yùn)算 減法運(yùn)算指令SUB指令用存放器Rn減去operand2,結(jié)果保管到Rd中。指令格式如下: SUBcondS Rd,Rn,operand2 運(yùn)用例如: SUBS R0,R0,#1;R0=R0-1 ,并影響標(biāo)志位 SUBS R2,R1,R2;R2=R1-R2 ,并影響標(biāo)志位 周立功單片機(jī) ARM數(shù)據(jù)處置指
37、令算術(shù)運(yùn)算 逆向減法運(yùn)算指令RSB指令將operand2的值減去Rn,結(jié)果保管到Rd中。指令格式如下: RSBcondS Rd,Rn,operand2 運(yùn)用例如: RSB R3,R1,#0 xFF00 ;R3=0 xFF00-R1 RSBS R1,R2,R2,LSL #2;R1=(R22)-R2=R23 周立功單片機(jī) ARM數(shù)據(jù)處置指令算術(shù)運(yùn)算 帶進(jìn)位加法指令A(yù)DC將operand2的值與Rn的值相加,再加上CPSR中的C條件標(biāo)志位,結(jié)果保管到Rd存放器。指令格式如下: ADCcondS Rd,Rn,operand2 運(yùn)用例如運(yùn)用ADC實(shí)現(xiàn)64位加法,結(jié)果存于R1、R0中: ADDS R0,R
38、0,R2 ;R0等于低32位相加,并影響標(biāo)志位 ADC R1,R1,R3;R1等于高32位相加,并加上低位進(jìn)位周立功單片機(jī) ARM數(shù)據(jù)處置指令算術(shù)運(yùn)算 帶進(jìn)位減法指令SBC用存放器Rn減去operand2,再減去CPSR中的C條件標(biāo)志位的非(即假設(shè)C標(biāo)志清零,那么結(jié)果減去1),結(jié)果保管到Rd中。指令格式如下: SBCcondS Rd,Rn,operand2 運(yùn)用例如運(yùn)用SBC實(shí)現(xiàn)64位減法,結(jié)果存于R1、R0中: SUBS R0,R0,R2 ; 低32位相減,并影響標(biāo)志位 SBC R1,R1,R3;高32位相減,并減去低位借位周立功單片機(jī) ARM數(shù)據(jù)處置指令算術(shù)運(yùn)算 帶進(jìn)位逆向減法指令RSC指
39、令用存放器operand2減去Rn,再減去CPSR中的C條件標(biāo)志位,結(jié)果保管到Rd中。指令格式如下: RSCcondS Rd,Rn,operand2 運(yùn)用例如運(yùn)用RSC指令實(shí)現(xiàn)求64位數(shù)值的負(fù)數(shù) : RSBS R2,R0,#0 RSC R3,R1,#0周立功單片機(jī) ARM數(shù)據(jù)處置指令邏輯運(yùn)算指令周立功單片機(jī) ARM數(shù)據(jù)處置指令邏輯運(yùn)算指令 邏輯與操作指令A(yù)ND指令將operand2的值與存放器Rn的值按位作邏輯“與操作,結(jié)果保管到Rd中。指令格式如下: ANDcondS Rd,Rn,operand2 運(yùn)用例如: ANDS R0,R0,#0 x01 ;R0=R0&0 x01,取出最低位數(shù)
40、據(jù) AND R2,R1,R3;R2=R1&R3 周立功單片機(jī) ARM數(shù)據(jù)處置指令邏輯運(yùn)算指令 邏輯或操作指令ORR指令將operand2的值與存放器Rn的值按位作邏輯“或操作,結(jié)果保管到Rd中。指令格式如下: ORRcondS Rd,Rn, operand2 運(yùn)用例如: ORR R0,R0,#0 x0F;將R0的低4位置1 MOVR1,R2,LSR #24 ;運(yùn)用ORR指令將R2的高8位 ORRR3,R1,R3,LSL #8;數(shù)據(jù)移入到R3低8位中 周立功單片機(jī) ARM數(shù)據(jù)處置指令邏輯運(yùn)算指令 邏輯異或操作指令EOR指令將operand2的值與存放器Rn的值按位作邏輯“異或操作,結(jié)果保
41、管到Rd中。指令格式如下: EORcondS Rd,Rn, operand2 運(yùn)用例如: EOR R1,R1,#0 x0F;將R1的低4位取反 EOR R2,R1,R0;R2=R1R0 EORSR0,R5,#0 x01; 將R5和0 x01進(jìn)展邏輯異或,;結(jié)果保管到R0,并影響標(biāo)志位 周立功單片機(jī) ARM數(shù)據(jù)處置指令邏輯運(yùn)算指令 位去除指令BIC指令將存放器Rn的值與operand2的值的反碼按位作邏輯“與操作,結(jié)果保管到Rd中。指令格式如下: BICcondS Rd,Rn, operand2 運(yùn)用例如: BIC R1,R1,#0 x0F;將R1的低4位清零,其它位不變 BICR1,R2,R3
42、;將R3的反碼和R2相邏輯“與,;結(jié)果保管到R1中周立功單片機(jī) ARM數(shù)據(jù)處置指令比較指令周立功單片機(jī) ARM數(shù)據(jù)處置指令比較指令 比較指令CMP指令將存放器Rn的值減去operand2的值,根據(jù)操作的結(jié)果更新CPSR中的相應(yīng)條件標(biāo)志位,以便后面的指令根據(jù)相應(yīng)的條件標(biāo)志來(lái)判別能否執(zhí)行。指令格式如下: CMPcondRn, operand2 運(yùn)用例如: CMP R1,#10 ; R1與10比較,設(shè)置相關(guān)標(biāo)志位 CMP R1,R2; R1與R2比較,設(shè)置相關(guān)標(biāo)志位 周立功單片機(jī) ARM數(shù)據(jù)處置指令比較指令 比較指令CMP指令將存放器Rn的值減去operand2的值,根據(jù)操作的結(jié)果更新CPSR中的相
43、應(yīng)條件標(biāo)志位,以便后面的指令根據(jù)相應(yīng)的條件標(biāo)志來(lái)判別能否執(zhí)行。指令格式如下: CMPcondRn, operand2 留意:CMP指令與SUBS指令的區(qū)別在于CMP指令不保管運(yùn)算結(jié)果。在進(jìn)展兩個(gè)數(shù)據(jù)的大小判別時(shí),常用CMP指令及相應(yīng)的條件碼來(lái)操作。 周立功單片機(jī) ARM數(shù)據(jù)處置指令比較指令 負(fù)數(shù)比較指令CMN指令運(yùn)用存放器Rn的值加上operand2的值,根據(jù)操作的結(jié)果更新CPSR中的相應(yīng)條件標(biāo)志位,以便后面的指令根據(jù)相應(yīng)的條件標(biāo)志來(lái)判別能否執(zhí)行。指令格式如下: CMNcondRn, operand2 運(yùn)用例如: CMN R0,#1 ; R0+1,判別R0能否為1的補(bǔ)碼;假設(shè)是,那么設(shè)置Z標(biāo)志
44、位周立功單片機(jī) ARM數(shù)據(jù)處置指令比較指令 負(fù)數(shù)比較指令CMN指令運(yùn)用存放器Rn的值加上operand2的值,根據(jù)操作的結(jié)果更新CPSR中的相應(yīng)條件標(biāo)志位,以便后面的指令根據(jù)相應(yīng)的條件標(biāo)志來(lái)判別能否執(zhí)行。指令格式如下: CMPcondRn, operand2留意:CMN指令與ADDS指令的區(qū)別在于CMN指令不保管運(yùn)算結(jié)果。CMN指令可用于負(fù)數(shù)比較,比如CMN R0,#1指令那么表示R0與-1比較,假設(shè)R0為-1(即1的補(bǔ)碼),那么Z置位;否那么Z復(fù)位。 周立功單片機(jī) ARM數(shù)據(jù)處置指令比較指令 位測(cè)試指令TST指令將存放器Rn的值與operand2的值按位作邏輯“與操作,根據(jù)操作的結(jié)果更新CP
45、SR中的相應(yīng)條件標(biāo)志位,以便后面的指令根據(jù)相應(yīng)的條件標(biāo)志來(lái)判別能否執(zhí)行。指令格式如下: TSTcond Rn, operand2 運(yùn)用例如: TSTR0,#0 x01; 判別R0的最低位能否為0 TSTR1,#0 x0F; 判別R1的低4位能否為0 周立功單片機(jī) ARM數(shù)據(jù)處置指令比較指令 位測(cè)試指令TST指令將存放器Rn的值與operand2的值按位作邏輯“與操作,根據(jù)操作的結(jié)果更新CPSR中的相應(yīng)條件標(biāo)志位,以便后面的指令根據(jù)相應(yīng)的條件標(biāo)志來(lái)判別能否執(zhí)行。指令格式如下: TSTcond Rn, operand2留意:TST指令與ANDS指令的區(qū)別在于TST指令不保管運(yùn)算結(jié)果。TST指令通常
46、與EQ、NE條件碼配合運(yùn)用,當(dāng)一切測(cè)試位均為0時(shí),EQ有效,而只需有一個(gè)測(cè)試位不為0,那么NE有效。 周立功單片機(jī) ARM數(shù)據(jù)處置指令比較指令 相等測(cè)試指令TEQ指令將存放器Rn的值與operand2的值按位作邏輯“異或操作,根據(jù)操作的結(jié)果更新CPSR中的相應(yīng)條件標(biāo)志位,以便后面的指令根據(jù)相應(yīng)的條件標(biāo)志來(lái)判別能否執(zhí)行。指令格式如下: TEQcond Rn, operand2 運(yùn)用例如: TEQ R0,R1; 比較R0與R1能否相等 (不影響V位和C位)周立功單片機(jī) ARM數(shù)據(jù)處置指令比較指令 相等測(cè)試指令TEQ指令將存放器Rn的值與operand2的值按位作邏輯“異或操作,根據(jù)操作的結(jié)果更新C
47、PSR中的相應(yīng)條件標(biāo)志位,以便后面的指令根據(jù)相應(yīng)的條件標(biāo)志來(lái)判別能否執(zhí)行。指令格式如下: TEQcond Rn, operand2留意:TEQ指令與EORS指令的區(qū)別在于TEQ指令不保管運(yùn)算結(jié)果。運(yùn)用TEQ進(jìn)展相等測(cè)試時(shí),常與EQ、NE條件碼配合運(yùn)用。當(dāng)兩個(gè)數(shù)據(jù)相等時(shí),EQ有效;否那么NE有效。 周立功單片機(jī)ARM指令小節(jié)目錄1.指令格式2.條件碼3.存儲(chǔ)器訪問(wèn)指令4.數(shù)據(jù)處置指令5.乘法指令6.ARM分支指令7.協(xié)處置器指令8.雜項(xiàng)指令9.偽指令周立功單片機(jī)4.2 指令集引見(jiàn) ARM指令集乘法指令 ARM7TDMI具有三種乘法指令,分別為:3232位乘法指令;32 32位乘加指令;32 32
48、位結(jié)果為64位的乘/乘加指令。周立功單片機(jī) ARM指令乘法指令乘法指令編碼指令執(zhí)行的條件碼Opcode乘法指令操作碼S設(shè)置條件碼,與指令中的S位對(duì)應(yīng)Rm為被乘數(shù)存放器Rd/RdLo為MLA指令相加的存放器或64位乘法指令的目的存放器低32位Rn/RdHi為目的存放器或64位乘法指令的目的存放器高32位Rs為乘數(shù)存放器64位有符號(hào)乘加指令SMLAL11164位有符號(hào)乘法指令SMULL11064位無(wú)符號(hào)乘加指令UMLAL10164位無(wú)符號(hào)乘法指令UMULL10032位乘加指令MLA00132位乘法指令MUL000闡明指令助記符操作碼opcode操作碼功能表周立功單片機(jī) ARM指令乘法指令周立功單片
49、機(jī) ARM指令乘法指令 32位乘法指令MUL指令將Rm和Rs中的值相乘,結(jié)果的低32位保管到Rd中。指令格式如下:MULcondS Rd,Rm,Rs 運(yùn)用例如: MUL R1,R2,R3 ;R1=R2R3 MULS R0,R3,R7 ;R0=R3R7,同時(shí)影響CPSR中的N位和Z位 周立功單片機(jī) ARM指令乘法指令 32位乘加指令MLA指令將Rm和Rs中的值相乘,再將乘積加上第3個(gè)操作數(shù),結(jié)果的低32位保管到Rd中。指令格式如下: MLAcondS Rd,Rm,Rs,Rn 運(yùn)用例如: MLA R1,R2,R3,R0; R1=R2R3+R0周立功單片機(jī) ARM指令乘法指令 64位無(wú)符號(hào)乘法指令U
50、MULL指令將Rm和Rs中的值作無(wú)符號(hào)數(shù)相乘,結(jié)果的低32位保管到RdLo中,而高32位保管到RdHi中。指令格式如下: UMULLcondS RdLo,RdHi,Rm,Rs 運(yùn)用例如: UMULL R0,R1,R5,R8; (R1、R0)=R5R8 周立功單片機(jī) ARM指令乘法指令 64位無(wú)符號(hào)乘加指令UMLAL指令將Rm和Rs中的值作無(wú)符號(hào)數(shù)相乘,64位乘積與RdHi、RdLo相加,結(jié)果的低32位保管到RdLo中,而高32位保管到RdHi中。指令格式如下: UMLALcondS RdLo,RdHi,Rm,Rs 運(yùn)用例如: UMLAL R0,R1,R5,R8;(R1、R0)=R5R8+(R1
51、、R0) 周立功單片機(jī) ARM指令乘法指令 64位有符號(hào)乘法指令SMULL指令將Rm和Rs中的值作有符號(hào)數(shù)相乘,結(jié)果的低32位保管到RdLo中,而高32位保管到RdHi中。指令格式如下: SMULLcondS RdLo,RdHi,Rm,Rs 運(yùn)用例如: SMULLR2,R3,R7,R6; (R3、R2)=R7R6 周立功單片機(jī) ARM指令乘法指令 64位有符號(hào)乘加指令SMLAL指令將Rm和Rs中的值作有符號(hào)數(shù)相乘,64位乘積與RdHi、RdLo相加,結(jié)果的低32位保管到RdLo中,而高32位保管到RdHi中。指令格式如下: SMLALcondS RdLo,RdHi,Rm,Rs 運(yùn)用例如: SM
52、LALR2,R3,R7,R6; (R3、R2)=R7R6+(R3、R2) 周立功單片機(jī)ARM指令小節(jié)目錄1.指令格式2.條件碼3.存儲(chǔ)器訪問(wèn)指令4.數(shù)據(jù)處置指令5.乘法指令6.ARM分支指令7.協(xié)處置器指令8.雜項(xiàng)指令9.偽指令周立功單片機(jī)4.2 指令集引見(jiàn) ARM指令集分支指令 在ARM中有兩種方式可以實(shí)現(xiàn)程序的跳轉(zhuǎn),一種是運(yùn)用分支指令直接跳轉(zhuǎn),另一種那么是直接向PC存放器賦值實(shí)現(xiàn)跳轉(zhuǎn)。 分支指令有以下三種:分支指令B;帶鏈接的分支指令BL;帶形狀切換的分支指令BX。周立功單片機(jī) ARM分支指令指令編碼分支指令B/BL指令編碼格式指令執(zhí)行的條件碼L區(qū)別B指令L為0和BL指令L為124位有符號(hào)
53、立刻數(shù)偏移量分支指令BX指令編碼格式指令執(zhí)行的條件碼Rm目的地址存放器,該存放器裝載跳轉(zhuǎn)地址周立功單片機(jī) ARM指令分支指令周立功單片機(jī) ARM指令分支指令 分支指令B指令,該指令跳轉(zhuǎn)范圍限制在當(dāng)前指令的32M字節(jié)地址內(nèi)(ARM指令為字對(duì)齊,最低2位地址固定為0)。指令格式如下:Bcond Label 運(yùn)用例如: B WAITA; 跳轉(zhuǎn)到WAITA標(biāo)號(hào)處 B0 x1234; 跳轉(zhuǎn)到絕對(duì)地址0 x1234處 周立功單片機(jī)BL LabelxxxxxxLabelxxxMOV PC,LRAddr1Addr2xxxxxxLRPC ARM指令分支指令 帶鏈接的分支指令BL指令適用于子程序調(diào)用,運(yùn)用該指令后
54、,下一條指令的地址被拷貝到R14(即LR) 銜接存放器中,然后跳轉(zhuǎn)到指定地址運(yùn)轉(zhuǎn)程序。跳轉(zhuǎn)范圍限制在當(dāng)前指令的32M字節(jié)地址內(nèi)。指令格式如下:BLcond LabelAddr1LabelAddr2Addr21.當(dāng)程序執(zhí)行到BL跳轉(zhuǎn)指令時(shí),硬件將下一條指令的地址Addr2裝入LR存放器,并把跳轉(zhuǎn)地址裝入程序計(jì)數(shù)器PC2. 程序跳轉(zhuǎn)到目的地址Label繼續(xù)執(zhí)行,當(dāng)子程序執(zhí)行終了后,將LR存放器內(nèi)容存入PC,前往調(diào)用函數(shù)繼續(xù)執(zhí)行周立功單片機(jī) ARM指令分支指令 帶鏈接的分支指令BL指令適用于子程序調(diào)用,運(yùn)用該指令后,下一條指令的地址被拷貝到R14(即LR) 銜接存放器中,然后跳轉(zhuǎn)到指定地址運(yùn)轉(zhuǎn)程序。
55、跳轉(zhuǎn)范圍限制在當(dāng)前指令的32M字節(jié)地址內(nèi)。指令格式如下:BLcond Label 運(yùn)用例如: BL DELAY; 調(diào)用子程序DELAY周立功單片機(jī) ARM指令分支指令 帶形狀切換的分支指令BX指令,該指令可以根據(jù)跳轉(zhuǎn)地址Rm的最低位來(lái)切換處置器形狀。其跳轉(zhuǎn)范圍限制在當(dāng)前指令的32M字節(jié)地址內(nèi)(ARM指令為字對(duì)齊,最低2位地址固定為0)。指令格式如下:BXcond Rm周立功單片機(jī) ARM指令分支指令 帶形狀切換的分支指令BX指令,該指令可以根據(jù)跳轉(zhuǎn)地址Rm的最低位來(lái)切換處置器形狀。其跳轉(zhuǎn)范圍限制在當(dāng)前指令的32M字節(jié)地址內(nèi)(ARM指令為字對(duì)齊,最低2位地址固定為0)。指令格式如下:BXcond
56、 Rm 運(yùn)用例如: ADRL R0,ThumbFun+1 ;將Thumb程序的入口地址加1存入R0 BX R0 ; 跳轉(zhuǎn)到R0指定的地址, ;并根據(jù)R0的最低位來(lái)切換處置器形狀周立功單片機(jī)ARM指令小節(jié)目錄1.指令格式2.條件碼3.存儲(chǔ)器訪問(wèn)指令4.數(shù)據(jù)處置指令5.乘法指令6.ARM分支指令7.協(xié)處置器指令8.雜項(xiàng)指令9.偽指令周立功單片機(jī)4.2 指令集引見(jiàn) ARM指令集協(xié)處置器指令 ARM內(nèi)核支持協(xié)處置器操作,協(xié)處置器的控制要經(jīng)過(guò)協(xié)處置器命令實(shí)現(xiàn)。ARM內(nèi)核與協(xié)處置器的關(guān)系A(chǔ)RM內(nèi)核協(xié)處置器A協(xié)處置器B握手信號(hào)數(shù)據(jù)地址總線周立功單片機(jī) ARM指令協(xié)處置器指令周立功單片機(jī) ARM協(xié)處置器指令數(shù)
57、據(jù)操作指令 ARM處置器經(jīng)過(guò)CDP指令通知ARM協(xié)處置器執(zhí)行特定的操作。該操作由協(xié)處置器完成,即對(duì)命令的參數(shù)的解釋與協(xié)處置器有關(guān),指令的運(yùn)用取決于協(xié)處置器。假設(shè)協(xié)處置器不能勝利地執(zhí)行該操作,將產(chǎn)生未定義指令異常中斷。指令格式如下: 指令執(zhí)行的條件碼協(xié)處置器的特定操作碼存放第1個(gè)源操作數(shù)的協(xié)處置器存放器作為目的存放器的協(xié)處置器存放器指令操作的協(xié)處置器名可選的協(xié)處置器特定操作碼存放第2個(gè)源操作數(shù)的協(xié)處置器存放器CDPcond coproc,opcode1,CRd,CRn,CRm,opcode2CDPcond coproc,opcode1,CRd,CRn,CRm,opcode2數(shù)據(jù)操作指令編碼周立功
58、單片機(jī) ARM協(xié)處置器指令數(shù)據(jù)操作指令 ARM處置器經(jīng)過(guò)CDP指令通知ARM協(xié)處置器執(zhí)行特定的操作。該操作由協(xié)處置器完成,即對(duì)命令的參數(shù)的解釋與協(xié)處置器有關(guān),指令的運(yùn)用取決于協(xié)處置器。假設(shè)協(xié)處置器不能勝利地執(zhí)行該操作,將產(chǎn)生未定義指令異常中斷。指令格式如下: CDPcond coproc,opcode1,CRd,CRn,CRm,opcode2 運(yùn)用例如: CDP p7,0,c0,c2,c3,0;對(duì)協(xié)處置器7操作,操作碼為0,;可選操作碼為0 CDP p6,1,c3,c4,c5;對(duì)協(xié)處置器6操作,操作碼為1 周立功單片機(jī) ARM協(xié)處置器指令數(shù)據(jù)存取指令 協(xié)處置器數(shù)據(jù)存取指令LDC/STC指令可以
59、將某一延續(xù)內(nèi)存單元的數(shù)據(jù)讀取到協(xié)處置器的存放器中,或者將協(xié)處置器的存放器數(shù)據(jù)寫入到某一延續(xù)的內(nèi)存單元中,傳送的字?jǐn)?shù)由協(xié)處置器來(lái)控制。假設(shè)協(xié)處置器不能勝利地執(zhí)行該操作,將產(chǎn)生未定義指令異常中斷。LDCcondLcoproc, CRd, 數(shù)據(jù)存儲(chǔ)指令格式STCcondLcoproc, CRd, 數(shù)據(jù)讀取指令格式周立功單片機(jī) ARM協(xié)處置器指令數(shù)據(jù)存取指令 協(xié)處置器數(shù)據(jù)存取指令LDC/STC指令可以將某一延續(xù)內(nèi)存單元的數(shù)據(jù)讀取到協(xié)處置器的存放器中,或者將協(xié)處置器的存放器數(shù)據(jù)寫入到某一延續(xù)的內(nèi)存單元中,傳送的字?jǐn)?shù)由協(xié)處置器來(lái)控制。假設(shè)協(xié)處置器不能勝利地執(zhí)行該操作,將產(chǎn)生未定義指令異常中斷。數(shù)據(jù)操作指令
60、編碼指令執(zhí)行的條件碼P表示前/后變址U表示加/減W表示回寫N表示數(shù)據(jù)大小L表示該指令是讀取為0還是寫入為18位立刻數(shù)偏移協(xié)處置器編號(hào)協(xié)處置器中的目的存放器基址存放器周立功單片機(jī) ARM協(xié)處置器指令數(shù)據(jù)存取指令 協(xié)處置器數(shù)據(jù)存取指令LDC/STC指令可以將某一延續(xù)內(nèi)存單元的數(shù)據(jù)讀取到協(xié)處置器的存放器中,或者將協(xié)處置器的存放器數(shù)據(jù)寫入到某一延續(xù)的內(nèi)存單元中,傳送的字?jǐn)?shù)由協(xié)處置器來(lái)控制。假設(shè)協(xié)處置器不能勝利地執(zhí)行該操作,將產(chǎn)生未定義指令異常中斷。 運(yùn)用例如: LDC p5,c2,R2,#4 ;讀取R2+4指向的內(nèi)存單元的數(shù)據(jù), ;傳送到協(xié)處置器p5的c2存放器中 STC p5,c1,R0 ;將協(xié)處置器p5的C1存放
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GA/T 2145-2024法庭科學(xué)涉火案件物證檢驗(yàn)實(shí)驗(yàn)室建設(shè)技術(shù)規(guī)范
- 2025-2030年中國(guó)固定電話芯片行業(yè)并購(gòu)重組擴(kuò)張戰(zhàn)略制定與實(shí)施研究報(bào)告
- 新形勢(shì)下連接器行業(yè)可持續(xù)發(fā)展戰(zhàn)略制定與實(shí)施研究報(bào)告
- 2025-2030年中國(guó)整合營(yíng)銷傳播服務(wù)行業(yè)開(kāi)拓第二增長(zhǎng)曲線戰(zhàn)略制定與實(shí)施研究報(bào)告
- 新形勢(shì)下聯(lián)合辦公行業(yè)轉(zhuǎn)型升級(jí)戰(zhàn)略制定與實(shí)施研究報(bào)告
- 2025-2030年中國(guó)煤炭檢測(cè)實(shí)驗(yàn)分析儀器行業(yè)商業(yè)模式創(chuàng)新戰(zhàn)略制定與實(shí)施研究報(bào)告
- 網(wǎng)絡(luò)工程師工作總結(jié)計(jì)劃及建議
- 全球新藥研發(fā)進(jìn)展月報(bào)-第45期-2024年12月刊
- 建設(shè)局部門預(yù)算執(zhí)行情況匯報(bào)范文
- 在國(guó)有企業(yè)2024年歲末年初安全生產(chǎn)工作會(huì)議上的講話
- 新人教版一年級(jí)數(shù)學(xué)下冊(cè)全冊(cè)導(dǎo)學(xué)案
- 2025年中考語(yǔ)文復(fù)習(xí)之現(xiàn)代文閱讀:非連續(xù)性文本閱讀(10題)
- GB/T 9755-2024合成樹(shù)脂乳液墻面涂料
- 商業(yè)咨詢報(bào)告范文模板
- 2024年度軟件定制開(kāi)發(fā)合同(ERP系統(tǒng))3篇
- 家族族譜模板
- 家譜修編倡議書(shū)范文
- 高中體育與健康人教版全一冊(cè) 形意強(qiáng)身功 課件
- (正式版)JBT 10437-2024 電線電纜用可交聯(lián)聚乙烯絕緣料
- 教科版三年級(jí)上冊(cè)科學(xué)期末測(cè)試卷(二)【含答案】
- 國(guó)家開(kāi)放大學(xué)《土木工程力學(xué)(本)》章節(jié)測(cè)試參考答案
評(píng)論
0/150
提交評(píng)論