版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第2部分 嵌入式系統(tǒng)(xtng)硬件設計7/19/20221哈爾濱工業(yè)大學(威海) 通信(tng xn)工程系共六十三頁第六節(jié)ARM7TDMI(-S)指令系統(tǒng)(zh ln x tn)有什么(shn me)用?7/19/20222哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁目錄(ml)1.ARM處理器尋址方式(fngsh)2.指令集介紹ARM指令集Thumb指令集7/19/20223哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁目錄(ml)1.ARM處理器尋址方式(fngsh)2.指令集介紹ARM指令集Thumb指令集7/19/20224哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁ARM7TDMI
2、(-S)指令系統(tǒng)(zh ln x tn)簡介(jin ji)1、ARM處理器是基于精簡指令集計算機(RISC)原理設計的,指令集和相關譯碼機制較為簡單。 2、ARM7TDMI(-S)具有32位ARM指令集和16位Thumb指令集,ARM指令集效率高,但是代碼密度低;而Thumb指令集具有較高的代碼密度,卻仍然保持ARM的大多數(shù)性能上的優(yōu)勢,它是ARM指令集的子集。3、所有的ARM指令都是可以有條件執(zhí)行的,而Thumb指令僅有一條指令具備條件執(zhí)行功能。4、ARM程序和Thumb程序可相互調用,相互之間的狀態(tài)切換開銷幾乎為零。 B label 跳轉指令 7/19/20225哈爾濱工業(yè)大學(威海)
3、通信工程系共六十三頁ARM7TDMI(-S)指令系統(tǒng)(zh ln x tn)ARM指令集與Thumb指令集的關系(gun x)Thumb指令集具有靈活、小巧的特點ARM指令集支持ARM核所有的特性,具有高效、快速的特點7/19/20226哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁1. ARM處理器尋址方式(fngsh)尋址方式(fngsh)分類 尋址方式是根據(jù)指令中給出的地址碼字段來實現(xiàn)尋找真實操作數(shù)地址的方式。ARM處理器具有9種基本尋址方式。1.寄存器尋址;2.立即尋址;3.寄存器移位尋址;4.寄存器間接尋址;5.基址尋址;6.多寄存器尋址;7.堆棧尋址;8.塊拷貝尋址;9.相對尋址。7
4、/19/20227哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁 操作數(shù)的值在寄存器中,指令中的地址碼字段指出的是寄存器編號,指令執(zhí)行時直接取出寄存器值來操作。寄存器尋址指令舉例如下(rxi): MOV R1,R2 ;將R2的值存入R1 SUB R0,R1,R2 ;將R1的值減去R2的值,結果保存到R0 0 xAA0 x55R2R11. ARM處理器尋址方式(fngsh)尋址方式分類寄存器尋址MOV R1,R20 xAA7/19/20228哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁 立即尋址指令中的操作碼字段后面的地址碼部分即是操作數(shù)本身,也就是說,數(shù)據(jù)就包含在指令當中,取出指令也就取出了可以
5、(ky)立即使用的操作數(shù)(這樣的數(shù)稱為立即數(shù))。立即尋址指令舉例如下: MOVR0,#0 xFF000 ;將立即數(shù)0 xFF000裝入R0寄存器 0 x55R0MOV R0,#0 xFF00程序存儲1. ARM處理器尋址方式(fngsh)尋址方式分類立即尋址MOV R0,#0 xFF000 xFF00從代碼中獲得數(shù)據(jù)7/19/20229哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁 寄存器移位尋址是ARM指令集特有的尋址方式。當?shù)?個操作數(shù)是寄存器移位方式時,第2個寄存器操作數(shù)在與第1個操作數(shù)結合之前,選擇進行移位操作。寄存器移位尋址指令舉例如下(rxi):MOVR0,R2,LSL #3 ;R2
6、的值左移3位,結果放入R0, ;即是R0=R28 ANDSR1,R1,R2,LSL R3 ;R2的值左移R3位,然后和R1相 ;“與”操作,結果放入R10 x55R0R20 x011. ARM處理器尋址方式(fngsh)尋址方式分類寄存器移位尋址MOV R0,R2,LSL #30 x080 x08邏輯左移3位7/19/202210哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁 寄存器間接尋址指令中的地址碼給出的是一個通用寄存器的編號,所需的操作數(shù)保存在寄存器指定地址的存儲單元(cn ch dn yun)中,即寄存器為操作數(shù)的地址指針。寄存器間接尋址指令舉例如下: LDRR1,R2;將R2指向的存
7、儲單元的數(shù)據(jù)讀出;保存在R1中 SWPR1,R1,R2;將寄存器R1的值和R2指定的存儲;單元的內容交換 0 x55R0R20 x400000000 xAA0 x400000001. ARM處理器尋址方式(fngsh)尋址方式分類寄存器間接尋址LDR R0,R20 xAA7/19/202211哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁 基址(j zh)尋址就是將基址寄存器的內容與指令中給出的偏移量相加,形成操作數(shù)的有效地址。基址尋址用于訪問基址附近的存儲單元,常用于查表、數(shù)組操作、功能部件寄存器訪問等。基址尋址指令舉例如下: LDRR2,R3,#0 x0C ;讀取R3+0 x0C地址上的存儲
8、單元 ;的內容,放入R2 STRR1,R0,#-4! ;先R0=R0-4,然后把R1的值寄存 ;到保存到R0指定的存儲單元 1. ARM處理器尋址方式(fngsh)尋址方式分類基址尋址0 x55R2R30 x400000000 xAA0 x4000000CLDR R2,R3,#0 x0C0 xAA將R3+0 x0C作為地址裝載數(shù)據(jù)7/19/202212哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁 多寄存器尋址一次可傳送(chun sn)幾個寄存器值,允許一條指令傳送16個寄存器的任何子集或所有寄存器。多寄存器尋址指令舉例如下: LDMIAR1!,R2-R7,R12 ;將R1指向的單元中的數(shù)據(jù)讀
9、出到 ;R2R7、R12中(R1自動加1) STMIAR0!,R2-R7,R12 ;將寄存器R2R7、R12的值保 ;存到R0指向的存儲; 單元中 ;(R0自動加1)0 x40000000R1R20 x?0 x010 x400000000 x?R3R40 x?R60 x?0 x020 x030 x040 x400000040 x400000080 x4000000C存儲器1. ARM處理器尋址方式(fngsh)尋址方式分類多寄存器尋址LDMIA R1!,R2-R4,R6 0 x010 x020 x030 x040 x400000007/19/202213哈爾濱工業(yè)大學(威海) 通信工程系共六十
10、三頁 堆棧是一個按特定順序進行存取的存儲區(qū),操作順序為“后進先出” 。堆棧尋址是隱含的,它使用一個專門的寄存器(堆棧指針(zhzhn)指向一塊存儲區(qū)域(堆棧),指針所指向的存儲單元即是堆棧的棧頂。存儲器堆??煞譃閮煞N: 向上生長:向高地址方向生長,稱為遞增堆棧向下生長:向低地址方向生長,稱為遞減堆棧1. ARM處理器尋址方式(fngsh)尋址方式分類堆棧尋址7/19/202214哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁1. ARM處理器尋址方式(fngsh)尋址方式(fngsh)分類堆棧尋址棧底棧頂棧區(qū)SP堆棧存儲區(qū)棧頂棧底棧區(qū)SP向下增長向上增長0 x123456780 x1234567
11、8堆棧壓棧堆棧壓棧7/19/202215哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁棧頂SP棧頂SP棧底空堆棧棧底滿堆棧 堆棧指針指向最后壓入的堆棧的有效數(shù)據(jù)項,稱為滿堆棧;堆棧指針指向下一個待壓入數(shù)據(jù)(shj)的空位置,稱為空堆棧。 1. ARM處理器尋址方式(fngsh)尋址方式分類堆棧尋址0 x123456780 x12345678 棧頂SP0 x12345678棧頂SP壓棧壓棧7/19/202216哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁所以可以組合出四種類型的堆棧方式:滿遞增:堆棧向上增長,堆棧指針指向內含有效數(shù)據(jù)項的最高地址。指令(zhlng)如LDMFA、STMFA等; 空遞
12、增:堆棧向上增長,堆棧指針指向堆棧上的第一個空位置。指令如LDMEA、STMEA等; 滿遞減:堆棧向下增長,堆棧指針指向內含有效數(shù)據(jù)項的最低地址。指令如LDMFD、STMFD等;空遞減:堆棧向下增長,堆棧指針向堆棧下的第一個空位置。指令如LDMED、STMED等。 1. ARM處理器尋址方式(fngsh)尋址方式分類堆棧尋址7/19/202217哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁異常的入口和出口(ch ku)處理 如果異常處理程序已經把返回(fnhu)地址拷貝到堆棧,那么可以使用一條多寄存器傳送指令來恢復用戶寄存器并實現(xiàn)返回(fnhu)。SUB LR,LR,#4;計算返回地址STMF
13、D SP!,R0-R3,LR ;保存使用到的寄存器. . .LDMFD SP!,R0-R3,PC;中斷返回中斷處理代碼的開始部分和退出部分回顧異常入口和出口操作注意:中斷返回指令的寄存器列表(其中必須包括PC)后的“”符號表示這是一條特殊形式的指令。這條指令在從存儲器中裝載PC的同時(PC是最后恢復的),CPSR也得到恢復。這里使用的堆棧指針SP(R13)是屬于異常模式的寄存器,每個異常模式有自己的堆棧指針。這個堆棧指針應必須在系統(tǒng)啟動時初始化。 7/19/202218哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁 用于將一塊數(shù)據(jù)從存儲器的某一位置拷貝到另一位置。 如:STMIAR0!,R1-R
14、7;將R1R7的數(shù)據(jù)保存到存儲器中。;存儲指針在保存第一個值之后增加,;增長方向(fngxing)為向上增長。STMIBR0!,R1-R7;將R1R7的數(shù)據(jù)保存到存儲器中。;存儲指針在保存第一個值之前增加,;增長方向為向上增長。 1. ARM處理器尋址方式(fngsh)尋址方式分類塊拷貝尋址R20 x010 x?R10 x02R3R40 x03R60 x040 x?0 x?0 x?R1+4R1+8R1+C存儲器STMIA R1!,R2-R4,R6 0 x010 x020 x030 x047/19/202219哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁 相對尋址是基址尋址的一種變通。由程序計數(shù)
15、器PC提供基準地址,指令中的地址碼字段作為(zuwi)偏移量,兩者相加后得到的地址即為操作數(shù)的有效地址。1. ARM處理器尋址方式(fngsh)尋址方式分類相對尋址7/19/202220哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁相對(xingdu)尋址 例如(lr): BLSubroutine_A ;跳轉到子程序Subroutine_A處執(zhí)行 Subroutine_A MOVPC,LR;從子程序返回0 x2100000 偏移量為0 x0100 PC0 x2100100 PC執(zhí)行7/19/202221哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁目錄(ml)1.ARM處理器尋址方式(fngsh)
16、2.指令集介紹ARM指令集Thumb指令集7/19/202222哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁簡單(jindn)的ARM程序;文件名:TEST1.S ;功能:實現(xiàn)兩個寄存器相加 ;說明:使用(shyng)ARMulate軟件仿真調試 AREAExample1,CODE,READONLY ;聲明代碼段Example1 ENTRY ;標識程序入口 CODE32 ;聲明32位ARM指令START MOVR0,#0 ;設置參數(shù) MOVR1,#10LOOPBLADD_SUB ;調用子程序ADD_SUB BLOOP ;跳轉到LOOPADD_SUB ADDSR0,R0,R1 ;R0 = R0
17、+ R1 MOVPC,LR ;子程序返回 END ;文件結束 使用“;”進行注釋標號頂格寫實際代碼段聲明文件結束7/19/202223哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁簡單(jindn)的ARM程序;文件名:TEST1.S ;功能:實現(xiàn)兩個(lin )寄存器相加 ;說明:使用ARMulate軟件仿真調試 AREAExample1,CODE,READONLY ;聲明代碼段Example1 ENTRY ;標識程序入口 CODE32 ;聲明32位ARM指令START MOVR0,#0 ;設置參數(shù) MOVR1,#10LOOPBLADD_SUB ;調用子程序ADD_SUB BLOOP ;跳轉到
18、LOOPADD_SUB ADDSR0,R0,R1 ;R0 = R0 + R1 MOVPC,LR ;子程序返回 END ;文件結束 7/19/202224哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁目錄(ml)1.ARM處理器尋址方式(fngsh)2.指令集介紹ARM指令集Thumb指令集7/19/202225哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁ARM指令(zhlng)小節(jié)目錄1.指令格式(g shi)2.條件碼3.存儲器訪問指令4.數(shù)據(jù)處理指令5.乘法指令6.ARM分支指令7.協(xié)處理器指令8.雜項指令9.偽指令7/19/202226哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁ARM指令
19、(zhlng)小節(jié)目錄1.指令格式2.條件(tiojin)碼3.存儲器訪問指令4.數(shù)據(jù)處理指令5.乘法指令6.ARM分支指令7.協(xié)處理器指令8.雜項指令9.偽指令7/19/202227哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁 ARM指令的基本(jbn)格式如下:2. 指令集介紹(jisho)ARM指令集指令格式 S , 其中號內的項是必須的,號內的項是可選的。各項的說明如下:opcode:指令助記符;cond:執(zhí)行條件;S:是否影響CPSR寄存器的值;Rd:目標寄存器; Rn:第1個操作數(shù)的寄存器;operand2:第2個操作數(shù);操作碼;指令助記符,如LDR、MOV等可選的條件碼;執(zhí)行條件
20、,如EQ、NE等。可選后綴;若指定“S”,則根據(jù)指令執(zhí)行結果更新CPSR中的條件代碼標志目標寄存器第一個操作數(shù),必須是寄存器 7/19/202228哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁 ARM指令(zhlng)的基本格式如下:2. 指令集介紹(jisho)ARM指令集第2個操作數(shù) S , 靈活的使用第2個操作數(shù)“operand2”能夠提高代碼效率。它有如下的形式:#immed_8r常數(shù)表達式;Rm寄存器方式;Rm,shift寄存器移位方式;7/19/202229哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁2. 指令集介紹(jisho)ARM指令集第2個操作數(shù)#immed_8r常數(shù)表達式
21、 該常數(shù)必須對應8位位圖,即一個(y )8位的常數(shù)通過循環(huán)右移偶數(shù)位得到。循環(huán)右移10位0 x12000100100 x00000000000 x00000000000 x00000000000 x00000000000 x00000000000 x80100000000 x04000001008位常數(shù)7/19/202230哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁2. 指令集介紹(jisho)ARM指令集第2個操作數(shù)#immed_8r常數(shù)(chngsh)表達式 該常數(shù)必須對應8位位圖,即一個8位的常數(shù)通過循環(huán)右移偶數(shù)位得到。例如:MOVR0,#1ANDR1,R2,#0 x0F 合法常量:0
22、 x3FC、0、0 xF0000000、200、0 xF0000001。 非法常量 : 0 xlFE、511、0 xFFFF、0 x1010、0 xF0000010、0 x102。 7/19/202231哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁2. 指令集介紹(jisho)ARM指令集第2個操作數(shù)Rm寄存器方式 在寄存器方式下,操作數(shù)即為寄存器的數(shù)值(shz)。例如:SUBR1,R1,R2MOVPC,R07/19/202232哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁2. 指令集介紹(jisho)ARM指令集第2個操作數(shù)Rm,shift寄存器移位方式 將寄存器的移位結果作為(zuwi)操
23、作數(shù),但Rm值保持不變,移位方法如下:操作碼說明操作碼說明ASR #n算術右移n位ROR #n循環(huán)右移n位LSL #n邏輯左移n位RRX帶擴展的循環(huán)右移1位LSR #n邏輯右移n位Type RsType為移位的一種類型,Rs為偏移量寄存器,低8位有效。7/19/202233哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁2. 指令集介紹(jisho)ARM指令集第2個操作數(shù)LSL移位(y wi)操作:0LSR移位操作:0ASR移位操作:ROR移位操作:RRX移位操作:C7/19/202234哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁NZCVIM0M1M2M3M4TF. . .31 30 29 2
24、8 27 26 8 7 6 5 4 3 2 1 0條件(tiojin)代碼標志保留(boli)控制位溢出標志 Overflow進位或借位擴展 Carry零 Zero負或小于 NegativeIRQ禁止 InterruptFIQ禁止 Fast狀態(tài)位 Thumb模式位 ModeNZCVIM0M1M2M3M4TFCPSR寄存器的格式7/19/202235哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁2. 指令集介紹(jisho)ARM指令集第2個操作數(shù)Rm,shift寄存器移位(y wi)方式例如:ADDR1,R1,R1,LSL #3;R1=R1+R1*8=9R1SUBR1,R1,R2,LSR R3;
25、R1=R1-(R2/2R3)7/19/202236哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁ARM指令小節(jié)(xioji)目錄1.指令格式2.條件碼3.存儲器訪問(fngwn)指令4.數(shù)據(jù)處理指令5.乘法指令6.ARM分支指令7.協(xié)處理器指令8.雜項指令9.偽指令7/19/202237哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁 ARM指令(zhlng)的基本格式如下:2. 指令集介紹(jisho)ARM指令集條件碼 S , 使用條件碼“cond”可以實現(xiàn)高效的邏輯操作,提高代碼效率。 所有的ARM指令都可以條件執(zhí)行,而Thumb指令只有B(跳轉)指令具有條件執(zhí)行 功能。 如果指令不標明條件代
26、碼,將默認為無條件(AL)執(zhí)行。7/19/202238哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁操作碼條件助記符標志含義0000EQZ=1相等0001NEZ=0不相等0010CS/HSC=1無符號數(shù)大于或等于0011CC/LOC=0無符號數(shù)小于0100MIN=1負數(shù)0101PLN=0正數(shù)或零0110VSV=1溢出0111VCV=0沒有溢出1000HIC=1,Z=0無符號數(shù)大于1001LSC=0,Z=1無符號數(shù)小于或等于1010GEN=V有符號數(shù)大于或等于 1011LTN!=V有符號數(shù)小于 1100GTZ=0,N=V有符號數(shù)大于 1101LEZ=1,N!=V有符號數(shù)小于或等于 1110AL任何
27、無條件執(zhí)行 (指令默認條件) 1111NV任何從不執(zhí)行(不要使用) 指令(zhlng)條件碼表7/19/202239哈爾濱工業(yè)大學(威海) 通信(tng xn)工程系共六十三頁NZCVIM0M1M2M3M4TF. . .31 30 29 28 27 26 8 7 6 5 4 3 2 1 0條件(tiojin)代碼標志保留(boli)控制位溢出標志 Overflow進位或借位擴展 Carry零 Zero負或小于 NegativeIRQ禁止 InterruptFIQ禁止 Fast狀態(tài)位 Thumb模式位 ModeNZCVIM0M1M2M3M4TFCPSR寄存器的格式7/19/202240哈爾濱工業(yè)
28、大學(威海) 通信工程系共六十三頁2. 指令集介紹(jisho)ARM指令集條件(tiojin)碼C代碼:If(a b)a+;Elseb+;對應的匯編代碼:CMPR0,R1 ;R0與R1比較ADDHIR0,R0,#1 ;若R0R1,則R0=R0+1ADDLSR1,R1,#1 ;若R0R1,則R1=R1+1示例:7/19/202241哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁ARM指令(zhlng)小節(jié)目錄1.指令格式2.條件碼3.存儲器訪問指令4.數(shù)據(jù)處理指令5.乘法指令6.ARM分支(fnzh)指令7.協(xié)處理器指令8.雜項指令9.偽指令7/19/202242哈爾濱工業(yè)大學(威海) 通信工程
29、系共六十三頁2. 指令集介紹(jisho)ARM指令集存儲器訪問(fngwn)指令 ARM處理器是典型的RISC處理器,對存儲器的訪問只能使用加載和存儲指令實現(xiàn)。ARM處理器是馮諾依曼存儲結構,程序空間、RAM空間及I/O映射空間統(tǒng)一編址,除對RAM操作以外,對外圍IO、程序數(shù)據(jù)的訪問均要通過加載/存儲指令進行。 存儲器訪問指令分為單寄存器操作指令和多寄存器操作指令。7/19/202243哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁助記符說明操作條件碼位置LDR Rd,addressing 加載字數(shù)據(jù)Rdaddressing,addressing索引LDRcondLDRB Rd,address
30、ing 加載無符號字節(jié)數(shù)據(jù)Rdaddressing,addressing索引LDRcondBLDRT Rd,addressing以用戶模式加載字數(shù)據(jù)Rdaddressing,addressing索引LDRcondTLDRBT Rd, addressing 以用戶模式加載無符號字節(jié)數(shù)據(jù)Rdaddressing,addressing索引LDRcondBTLDRH Rd, addressing 加載無符號半字數(shù)據(jù)Rdaddressing,addressing索引LDRcondHLDRSB Rd, addressing 加載有符號字節(jié)數(shù)據(jù)Rdaddressing,addressing索引LDRcond
31、SBLDRSH Rd, addressing加載有符號半字數(shù)據(jù) Rdaddressing,addressing索引 LDRcondSH ARM存儲器訪問(fngwn)指令單寄存器加載7/19/202244哈爾濱工業(yè)大學(威海) 通信(tng xn)工程系共六十三頁助記符說明操作條件碼位置STR Rd, addressing 存儲字數(shù)據(jù)addressingRd,addressing索引STRcondSTRB Rd,addressing 存儲字節(jié)數(shù)據(jù)addressingRd,addressing索引STRcondBSTRT Rd,addressing 以用戶模式存儲字數(shù)據(jù)addressingRd,
32、 addressing索引STRcondTSTRBT Rd,addressing 以用戶模式存儲字節(jié)數(shù)據(jù)addressingRd,addressing索引STRcondBTSTRH Rd,addressing 存儲半字數(shù)據(jù)addressing Rd,addressing索引STRcondHARM存儲器訪問(fngwn)指令單寄存器存儲 LDR/STR指令用于對內存變量的訪問、內存緩沖區(qū)數(shù)據(jù)的訪問、查表、外圍部件的控制(kngzh)操作等。若使用LDR指令加載數(shù)據(jù)到PC寄存器,則實現(xiàn)程序跳轉功能,這樣也就實現(xiàn)了程序跳轉。 所有單寄存器加載/存儲指令可分為“字和無符號字節(jié)加載存儲指令”和“半字和有
33、符號字節(jié)加載存儲指令。7/19/202245哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁LDR和STR字和無符號字節(jié)加載/存儲(cn ch)指令 LDR指令用于從內存中讀取單一字或字節(jié)數(shù)據(jù)存入寄存器中,STR指令用于將寄存器中的單一字或字節(jié)數(shù)據(jù)保存到內存。指令格式如下:ARM存儲器訪問(fngwn)指令單寄存器存儲 LDRcondTRd, ;將指定地址上的字數(shù)據(jù)讀入Rd STRcondTRd, ;將Rd中的字數(shù)據(jù)存入指定地址 LDRcondBTRd, ;將指定地址上的字節(jié)數(shù)據(jù)讀入Rd STRcondBTRd, ;將Rd中的字節(jié)數(shù)據(jù)存入指定地址 其中,T為可選后綴。若指令有T,那么即使處理器是在
34、特權模式下,存儲系統(tǒng)也將訪問看成是在用戶模式下進行的。T在用戶模式下無效,不能與前索引偏移一起使用T。 7/19/202246哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁ARM存儲器訪問(fngwn)指令單寄存器存儲LDR和STR字和無符號字節(jié)(z ji)加載/存儲指令編碼指令執(zhí)行的條件碼I為0時,偏移量為12位立即數(shù),為1時,偏移量為寄存器移位P表示前/后變址U表示加/減B為1表示字節(jié)訪問,為0表示字訪問W表示回寫為指令的尋址方式Rd為源/目標寄存器Rn為基址寄存器L用于區(qū)別加載(L為1)或存儲(L為0)7/19/202247哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁ARM存儲器訪問(fn
35、gwn)指令單寄存器存儲LDR和STR字和無符號字節(jié)加載/存儲指令 LDR/STR指令尋址非常靈活,它由兩部分組成,其中一部分為一個基址寄存器,可以為任一個通用寄存器;另一部分為一個地址偏移量。地址偏移量有以下3種格式: 立即數(shù)。立即數(shù)可以是一個無符號的數(shù)值(shz)。這個數(shù)據(jù)可以加到基址寄存器,也可以從基址寄存器中減去這個數(shù)值(shz)。 如:LDR R1,R0,#0 x12 寄存器。寄存器中的數(shù)值可以加到基址寄存器,也可以從基址寄存器中減去這個數(shù)值。 如:LDR R1,R0,R2 寄存器及移位常數(shù)。寄存器移位后的值可以加到基址寄存器,也可以從基址寄存器中減去這個數(shù)值。 如:LDR R1,R
36、0,R2,LSL #2 7/19/202248哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁ARM存儲器訪問(fngwn)指令單寄存器存儲 從尋址方式的地址計算方法分,加載/存儲指令有以下4種格式: 零偏移(pin y)。如:LDR Rd,Rn 前索引偏移。如:LDR Rd,Rn,#0 x04!程序相對偏移。如:LDR Rd,labe1 后索引偏移。如:LDR Rd,Rn,#0 x04注意:大多數(shù)情況下,必須保證字數(shù)據(jù)操作的地址是32位對齊的。LDR和STR字和無符號字節(jié)加載/存儲指令7/19/202249哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁LDR和STR半字和有符號字節(jié)(z ji)加載
37、/存儲指令 這類LDR/STR指令可加載有符號半字或字節(jié),可加載/存儲無符號半字。偏移量格式、尋址方式與加載/存儲字和無符號字節(jié)指令相同。 ARM存儲器訪問(fngwn)指令單寄存器存儲 LDRcondSB Rd, ;將指定地址上的有符號字節(jié)讀入Rd LDRcondSH Rd, ;將指定地址上的有符號半字讀入Rd LDRcondH Rd, ;將指定地址上的半字數(shù)據(jù)讀入Rd STRcondH Rd, ;將Rd中的半字數(shù)據(jù)存入指定地址注意:1.有符號位半字/字節(jié)加載是指用符號位加載擴展到32位,無符號半字加載是指用零擴展到32位;2.半字讀寫的指定地址必須為偶數(shù),否則將產生不可靠的結果;7/19/
38、202250哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁ARM存儲器訪問指令(zhlng)單寄存器存儲LDR和STR半字和有符號(fho)字節(jié)加載/存儲指令編碼指令執(zhí)行的條件碼I為0時,偏移量為12位立即數(shù),為1時,偏移量為寄存器移位P表示前/后變址U表示加/減W表示回寫為指令的尋址方式Rd為源/目標寄存器Rn為基址寄存器L用于區(qū)別加載(L為1)或存儲(L為0)S為1表示有符號訪問,為0表示無符號訪問H為1表示半字訪問,為0表示字節(jié)訪問7/19/202251哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁LDR和STR指令應用示例:1.加載/存儲字和無符號字節(jié)指令LDRR2,R5;將R5指向地址的
39、字數(shù)據(jù)存入(cn r)R2STRR1,R0,#0 x04;將R1的數(shù)據(jù)存儲到R0+0 x04地址LDRBR3,R2,#1 ;將R2指向地址的字節(jié)數(shù)據(jù)存入R3,R2R2+1STRBR6,R7 ;將R7指向地址的字節(jié)數(shù)據(jù)存入R62.加載/存儲半字和有符號字節(jié)指令LDRSB R1,R0,R3;將R0+R3地址上的字節(jié)數(shù)據(jù)存入R1,;高24位用符號擴展LDRH R6,R2,#2;將R2指向地址的半字數(shù)據(jù)存入R6,高16位用0擴展;讀出后,R2=R2+2STRH R1,R0,#2!;將R1的半字數(shù)據(jù)保存到R0+2地址,;只修改低2字節(jié)數(shù)據(jù),R0=R0+2ARM存儲器訪問指令(zhlng)單寄存器存儲7/
40、19/202252哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁助記符說明操作條件碼位置LDMmode Rn!,reglist 多寄存器加載reglistRn.,Rn回寫等LDMcondmodeSTMmode Rn!,reglist 多寄存器存儲Rn.reglist,Rn回寫等STMcondmodeARM存儲器訪問(fngwn)指令多寄存器存取 多寄存器加載/存儲指令可以實現(xiàn)在一組寄存器和一塊連續(xù)的內存單元之間傳輸數(shù)據(jù)。LDM為加載多個寄存器;STM為存儲多個寄存器。允許一條指令傳送16個寄存器的任何子集或所有寄存器。它們主要用于現(xiàn)場保護、數(shù)據(jù)復制、常數(shù)(chngsh)傳遞等。7/19/2022
41、53哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁ARM存儲器訪問(fngwn)指令多寄存器存取 多寄存器加載/存儲指令格式如下: LDMcond Rn!,reglist STMcond Rn!,reglistcond:指令執(zhí)行的條件;模式:控制地址的增長方式,一共有8種模式;!:表示在操作結束后,將最后的地址寫回Rn中;reglist :表示寄存器列表,可以包含多個寄存器,它們使用“,”隔開,如R1,R2,R6-R9,寄存器由小到大排列;:加入該后綴后,進行數(shù)據(jù)傳送(chun sn)且寄存器列表不包含PC時,加載/存儲的寄存器是用戶模式下的,而不是當前模式的寄存器。若在LDM指令且寄存器列表中
42、包含有PC時使用,那么除了正常的多寄存器傳送外,還將SPSR也拷貝到CPSR中,這可用于異常處理返回。注意:該后綴不允許在用戶模式或系統(tǒng)模式下使用。7/19/202254哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁ARM存儲器訪問(fngwn)指令多寄存器存取LDM和STM多寄存器加載/存儲(cn ch)指令編碼指令執(zhí)行的條件碼S對應于指令中的”符號P表示前/后變址U表示加/減W表示回寫寄存器列表Rn為基址寄存器L用于區(qū)別加載(L為1)或存儲(L為0)7/19/202255哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁ARM存儲器訪問(fngwn)指令多寄存器存取 多寄存器加載/存儲指令(zhl
43、ng)的8種模式如下表所示,右邊四種為堆棧操作、左邊四種為數(shù)據(jù)傳送操作。模式說明模式說明IA每次傳送后地址加4FD滿遞減堆棧IB每次傳送前地址加4ED空遞減堆棧DA每次傳送后地址減4FA滿遞增堆棧DB每次傳送前地址減4EA空遞增堆棧數(shù)據(jù)塊傳送操作堆棧操作 進行數(shù)據(jù)復制時,先設置好源數(shù)據(jù)指針和目標指針,然后使用塊拷貝尋址指令LDMIA/STMIA、LDMIB/STMIB、LDMDA/STMDA、LDMDB/STMDB進行讀取和存儲 。 進行堆棧操作操作時,要先設置堆棧指針(SP),然后使用堆棧尋址指令STMFD/LDMFD 、STMED/LDMED、STMFA/LDMFA和STMEA/LDMEA
44、實現(xiàn)堆棧操作。7/19/202256哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁ARM存儲器訪問(fngwn)指令多寄存器存取數(shù)據(jù)塊傳送指令(zhlng)操作過程如右圖所示,其中R1為指令執(zhí)行前的基址寄存器,R1則為指令執(zhí)行后的基址寄存器。R5R6R7R1 R1 指令STMIA R1!,R5-R74008H4004H4000H4014H4010H400CHR5R6R7R1 R1 指令STMDA R1!,R5-R74008H4004H4000H4014H4010H400CHR5R6R7R1 R1 指令STMIB R1!,R5-R74008H4004H4000H4014H4010H400CHR5R
45、6R7R1 R1 指令STMDB R1!,R5-R74008H4004H4000H4014H4010H400CHSTMEASTMFASTMEDSTMFDLDMDBLDMDALDMIBLDMIA7/19/202257哈爾濱工業(yè)大學(威海) 通信工程系共六十三頁ARM存儲器訪問(fngwn)指令多寄存器存取數(shù)據(jù)塊傳送存儲堆棧操作壓棧說明數(shù)據(jù)塊傳送加載堆棧操作出棧說明STMDASTMED空遞減LDMDALDMFA滿遞減STMIASTMEA空遞增LDMIALDMFD滿遞增STMDBSTMFD滿遞減LDMDBLDMEA空遞減STMIBSTMFA滿遞增LDMIBLDMED空遞增;使用數(shù)據(jù)塊傳送指令進行(jnxng)堆棧操作STMDAR0!,R5-R6. . .LDMIBR0!,R5-R6;使用堆棧
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 合同管理培訓合同:上海項目實踐與招投標(2025版)
- 二零二五年度智慧城市建設名義合伙人合同3篇
- 2025年度農民工勞動合同電子化管理方案及實施細則3篇
- 二零二五年度農業(yè)產業(yè)鏈金融服務創(chuàng)新合同-@-1
- 2025版企業(yè)內部設備維修承包合同規(guī)范文本4篇
- 2025年度排洪渠項目監(jiān)理合同模板3篇
- 二零二五年度人工智能核心算法軟件知識產權獨家轉讓合同3篇
- 二零二五年度全新品牌專賣店開設服務合同范本4篇
- 2025年度票據(jù)代理業(yè)務委托合同范本6篇
- 2025年度苗圃技術員崗位聘用合同修訂版
- 勞務派遣勞務外包服務方案(技術方案)
- GB/T 43391-2023市場、民意和社會調查調查報告編制指南
- 拔罐技術操作考核評分標準
- 戒賭法律協(xié)議書范本
- 競選市級三好學生PPT
- 2024屆甘肅省蘭州市五十一中生物高一上期末檢測模擬試題含解析
- 高標準農田建設上圖入庫(技術培訓)
- 火災隱患整改登記表
- 天津華寧KTC101說明書
- 【智慧校園】-智慧校園系統(tǒng)方案
- 外研版高中新教材英語單詞表(必修一)
評論
0/150
提交評論