嵌入式體系結構及接口技術:第3章 ARM指令集尋址方式_第1頁
嵌入式體系結構及接口技術:第3章 ARM指令集尋址方式_第2頁
嵌入式體系結構及接口技術:第3章 ARM指令集尋址方式_第3頁
嵌入式體系結構及接口技術:第3章 ARM指令集尋址方式_第4頁
嵌入式體系結構及接口技術:第3章 ARM指令集尋址方式_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1TM第第3章章ARM指令集尋址方式指令集尋址方式ARM指令指令尋址方式尋址方式可分為四大類:可分為四大類:數據處理指令尋址數據處理指令尋址Load/Store指令的尋址指令的尋址批量批量Load/Store指令的尋址指令的尋址協(xié)處理指令尋址。協(xié)處理指令尋址。2TM2本章內容本章內容31 ARM指令的編碼格式指令的編碼格式32 數據處理指令尋址方式數據處理指令尋址方式33 Load/Store指令尋址指令尋址34 批量批量Load/Store指令尋址方式指令尋址方式35 協(xié)處理器指令尋址方式協(xié)處理器指令尋址方式3TM3一般編碼格式一般編碼格式n每條每條ARM指令占有指令占有4個字節(jié),其指令長度

2、為個字節(jié),其指令長度為32位位cond(bit31:28)指令執(zhí)行的條件碼;type(bit27:26)指令類型碼 cond(bit31:28)指令執(zhí)行的條件碼;type(bit27:26)指令類型碼 cond(bit31:28)指令執(zhí)行的條件碼;type(bit27:26)指令類型碼 cond(bit31:28)指令執(zhí)行的條件碼;type(bit27:26)指令類型碼 cond(bit31:28)指令執(zhí)行的條件碼;type(bit27:26)指令類型碼 cond(bit31:28)指令執(zhí)行的條件碼;type(bit27:26)指令類型碼 cond(bit31:28) 指令執(zhí)行的條件碼指令執(zhí)行

3、的條件碼type(bit27:26) 指令類型碼指令類型碼(表表3-1) I ( bit25)第二操作數類型標志碼第二操作數類型標志碼(針對數據處針對數據處 理指令:立即數、寄存器或寄存器移位理指令:立即數、寄存器或寄存器移位)opcode(bit24:21)指令操作碼)指令操作碼S (bit20)決定指令的操作結果是否影響決定指令的操作結果是否影響CPSR Rn (bit19:16)包含第一個操作數的寄存器編碼;包含第一個操作數的寄存器編碼;Rd (bit15:12)目標寄存器編碼;目標寄存器編碼;operand2(bit11:0)指令第二個操作數。)指令第二個操作數。4TM4nARM匯編指

4、令語法格式:匯編指令語法格式:S ,例:例:ADDS R0,R1,R25TM5指令條件碼指令條件碼n0000 EQ 相等相等 Z=1n0001 NE 不相等不相等 Z=0n0010 CS/HS 無符號大于等于無符號大于等于 C=1n0011 CC/LO 無符號小于無符號小于 C=0n0100 MI 負數負數 N=1n0101 PL 非負數非負數 N=0n0110 VS 上溢出上溢出 V=1n0111 VC 沒有上溢出沒有上溢出 V=0n1000 HI 無符號數大于無符號數大于 C=1且且Z=0n1001 LS 無符號小于等于無符號小于等于 C=0或或Z=1n1010 GE 有符號數大于等于有符

5、號數大于等于 N=1且且V=1 或或 N=0且且V=0 n1011 LT 有符號數小于有符號數小于 N=1且且V=0 或或 N=0且且V=1n1100 GT 有符號數大于有符號數大于 Z=0且且N=Vn1101 LE 有符號數小于有符號數小于/等于等于 Z=1或或N!=Vn1110 AL 無條件執(zhí)行無條件執(zhí)行 6TM63.2 數據處理指令尋址方式數據處理指令尋址方式n數據處理指令第數據處理指令第2操作數的構成方式操作數的構成方式立即數立即數寄存器寄存器寄存器移位寄存器移位7TM7n立即數方式立即數方式 每個立即數由一個每個立即數由一個8位的常數進行位的常數進行32位循環(huán)右位循環(huán)右移偶數位得到,

6、其中循環(huán)右移的位數由一個移偶數位得到,其中循環(huán)右移的位數由一個4位二位二進制數的兩倍表示。即:進制數的兩倍表示。即:=immed_8進行進行32位循環(huán)右移(位循環(huán)右移(2*rotate_4)位)位例:例: 0 xff, 0 x104為合法的立即數為合法的立即數 0 x101, 0 x102為不合法的立即數為不合法的立即數3.2 數據處理指令尋址方式數據處理指令尋址方式8TM8n寄存器方式寄存器方式操作數即為寄存器中的數值操作數即為寄存器中的數值如如:MOV R3,R2 ADD R0,R1,R23.2 數據處理指令尋址方式數據處理指令尋址方式9TM9n寄存器移位方式寄存器移位方式操作數為寄存器的

7、數值做相應的移位而操作數為寄存器的數值做相應的移位而得到。在得到。在ARM指令中移位操作包括指令中移位操作包括邏輯左移邏輯左移、邏輯右移、算術左移、算術右移、循環(huán)右、邏輯右移、算術左移、算術右移、循環(huán)右移和帶擴展的循環(huán)右移。移和帶擴展的循環(huán)右移。 3.2 數據處理指令尋址方式數據處理指令尋址方式10TM10乘法器乘法器ARM7TDMI 內核內核指令指令解碼解碼地址地址自增器自增器nRESETnMREQSEQABORTnIRQnFIQnRWMAS1:0LOCKnCPICPACPBnWAITMCLKnOPCBIGENDISYNCnTRANSnM4:0D31:0桶形桶形移位器移位器32 位位 ALU

8、DBE寫數據寫數據 寄存器寄存器讀數據讀數據 寄存器寄存器地址寄存器地址寄存器寄存器寄存器A31:0ABE及及控制控制 邏輯邏輯PC Update解碼站解碼站指令指令 解碼解碼IncrementerPCABusBBusALUBus11TM113.2 數據處理指令尋址方式數據處理指令尋址方式12TM122. 具體尋址類型具體尋址類型 (5種類型種類型)1) 第二操作數為立即數第二操作數為立即數匯編語法格式:匯編語法格式:#例如:例如:MOV R0, #0 xFC03.2 數據處理指令尋址方式數據處理指令尋址方式13TM132)第二操作數為寄存器)第二操作數為寄存器匯編語法格式:匯編語法格式:例:

9、例:ADD R0,R1,R23.2 數據處理指令尋址方式數據處理指令尋址方式14TM143)第二操作數為寄存器移位方式,且移位的位數為一個)第二操作數為寄存器移位方式,且移位的位數為一個5位的立即數位的立即數匯編語法格式:匯編語法格式:, #可用的移位類型:可用的移位類型:LSL、LSR、ASR、ROR例如:例如:MOV R0,R0,LSL #2可用的最大可用的最大值是多少?值是多少?3.2 數據處理指令尋址方式數據處理指令尋址方式15TM154)第二操作數為寄存器移位方式,且移位數值放在)第二操作數為寄存器移位方式,且移位數值放在寄存器中寄存器中n匯編語法格式:匯編語法格式:, 可用的移位類

10、型:可用的移位類型:LSL、LSR、ASR、ROR例如:例如:ADD R0,R1,R2,ASR R33.2 數據處理指令尋址方式數據處理指令尋址方式16TM165)第二操作數為寄存器進行)第二操作數為寄存器進行RRX移位得到移位得到n匯編語法格式:匯編語法格式:,RRXnRm中的數值進行帶擴展的循環(huán)右移一位中的數值進行帶擴展的循環(huán)右移一位3.2 數據處理指令尋址方式數據處理指令尋址方式17TM17寄存器移位構造第二操作數有什么用呢?寄存器移位構造第二操作數有什么用呢?1.在邏輯運算中實現寄存器移位操作。在邏輯運算中實現寄存器移位操作。MOV R1,R1 LSL #42.實現特殊的算術運算:實現

11、特殊的算術運算:ADD R1,R2,R2 LSL #13.2 數據處理指令尋址方式數據處理指令尋址方式18TM183.3 Load/Store指令尋址指令尋址nLoad/Store指令是對內存進行存儲指令是對內存進行存儲/加載數據加載數據操作的指令,根據訪問的數據格式的不同,操作的指令,根據訪問的數據格式的不同,將這類指令的尋址分為將這類指令的尋址分為字、無符號字節(jié)的字、無符號字節(jié)的Load/Store指令尋址指令尋址,半字、有符號字節(jié)半字、有符號字節(jié)Load/Store指令尋址兩大類指令尋址兩大類。 19TM19地址計算方法地址計算方法 1寄存器間接尋址寄存器間接尋址 寄存器間接尋址就是以寄

12、存器中的值作為操作寄存器間接尋址就是以寄存器中的值作為操作數的地址,而操作數本身存放在存儲器中。例如以數的地址,而操作數本身存放在存儲器中。例如以下指令:下指令: LDR R0,R1 ;R0 R1 STR R0,R1 ;R1 R0 20TM202.基址加變址尋址基址加變址尋址 將寄存器的內容與指令中給出的將寄存器的內容與指令中給出的地址偏移量地址偏移量相加相加,從而得到一個操作數的有效地址。,從而得到一個操作數的有效地址。n前變址法前變址法:基地址寄存器中的值和地址偏移量先作加:基地址寄存器中的值和地址偏移量先作加減運算,生成的操作數作為內存訪問的地址。減運算,生成的操作數作為內存訪問的地址。

13、n后變址法后變址法:將基地址寄存器中的值直接作為內存訪問:將基地址寄存器中的值直接作為內存訪問的地址進行操作,內存訪問完畢后基地址寄存器中的的地址進行操作,內存訪問完畢后基地址寄存器中的值和地址偏移量作加減運算,并更新基地址寄存器。值和地址偏移量作加減運算,并更新基地址寄存器。21TM212.基址加變址尋址基址加變址尋址 例如:例如:LDR R0,R1,#4LDR R0,R1,#4!LDR R0,R1,#4LDR R0,R1,R222TM22字、無符號字節(jié)尋址字、無符號字節(jié)尋址匯編指令語法格式為:匯編指令語法格式為:nLDR BT,nSTR BT,23TM2324TM241Addressing

14、_mode中的偏移量為立即數中的偏移量為立即數n前變址不回寫形式:前變址不回寫形式:,#+/-n前變址回寫形式:前變址回寫形式:,#+/-!n后變址回寫形式:后變址回寫形式:,#+/-25TM25n偏移量為立即數的指令編碼類型偏移量為立即數的指令編碼類型n例例3-1LDR R0,R1,#4;LDR R0,R1,#-4;LDR R0,R1,#4!;LDR R0,R1,#4;26TM262Addressing_mode中的偏移量為寄存器的值中的偏移量為寄存器的值n前變址不回寫形式前變址不回寫形式:,+/-n前變址回寫形式:前變址回寫形式:,+/-!n后變址回寫形式:后變址回寫形式:,+/-27TM

15、27n偏移量為寄存器的指令編碼類型對應關系偏移量為寄存器的指令編碼類型對應關系例例3-2LDR R0,R1,R2LDR R0,R1,-R2LDR R0,R1,R2!LDR R0,R1 ,R228TM283Addressing_mode中偏移量通過寄存器移位得到中偏移量通過寄存器移位得到n前變址不回寫形式:前變址不回寫形式:,+/-,#shift_amount n前變址回寫形式:前變址回寫形式:,+/-,#shift_amount!n后變址回寫形式:后變址回寫形式:,+/-,#shift_amount29TM29n偏移量為移位寄存器的指令編碼類型對應關系偏移量為移位寄存器的指令編碼類型對應關系例

16、例3-3LDR R0,R1,R2,LSL #2LDR R0,R1,R2,LSL #2!LDR R0,R1,R2,LSL #230TM30字、無符號字節(jié)尋址字、無符號字節(jié)尋址偏移量的提供形式偏移量的提供形式偏移量的作用時間偏移量的作用時間立即數立即數前變址不回寫前變址不回寫寄存器寄存器前變址回寫前變址回寫寄存器移位寄存器移位后變址回寫后變址回寫31TM31半字、有符號字節(jié)尋址半字、有符號字節(jié)尋址n這類指令可用來這類指令可用來加載有符號字節(jié)、加載有符加載有符號字節(jié)、加載有符號半字、號半字、加載加載/存儲無符號半字。存儲無符號半字。nLoad/Store指令對半字、有符號字節(jié)操作指指令對半字、有符號

17、字節(jié)操作指令編碼格式如下:令編碼格式如下:為什么要區(qū)分為什么要區(qū)分有無符號有無符號32TM32n加載有符號字節(jié)到寄存器:加載有符號字節(jié)到寄存器:LDR SB ,n加載有符號半字到寄存器:加載有符號半字到寄存器:LDR SH ,n加載無符號半字到寄存器:加載無符號半字到寄存器:LDR H ,n存儲無符號半字到內存:存儲無符號半字到內存:STR H ,半字、有符號字節(jié)尋址半字、有符號字節(jié)尋址33TM331Addressing_mode中的偏移量為立即數中的偏移量為立即數n前變址不回寫形式:前變址不回寫形式:,#+/-n前變址回寫形式:前變址回寫形式:,#+/-!n后變址回寫形式:后變址回寫形式:,

18、#+/-半字、有符號字節(jié)尋址半字、有符號字節(jié)尋址34TM34n偏移量為立即數的指令編碼類型偏移量為立即數的指令編碼類型n例例3-4LDRSB R0,R1,#4LDRH R2,R1,#-4STRH R0,R1,#4!LDRSH R0,R1,#4半字、有符號字節(jié)尋址半字、有符號字節(jié)尋址35TM352Addressing_mode偏移量為寄存器的值偏移量為寄存器的值n前變址不回寫形式前變址不回寫形式:,+/-n前變址回寫形式:前變址回寫形式:,+/-!n后變址回寫形式:后變址回寫形式:,+/-半字、有符號字節(jié)尋址半字、有符號字節(jié)尋址36TM36n偏移量為寄存器值的指令編碼類型對應關系偏移量為寄存器值

19、的指令編碼類型對應關系n例例3-5LDRSB R0,R1,R5LDRH R2,R1,-R5STRH R0,R1,R5!LDRSH R0,R1,R5半字、有符號字節(jié)尋址半字、有符號字節(jié)尋址37TM37偏移量的提供形式偏移量的提供形式偏移量的作用時間偏移量的作用時間立即數立即數前變址不回寫前變址不回寫寄存器寄存器前變址回寫前變址回寫后變址回寫后變址回寫半字、有符號字節(jié)尋址半字、有符號字節(jié)尋址38TM383.4 批量批量Load/Store指令尋址方式指令尋址方式nARM指令系統(tǒng)提供了批量指令系統(tǒng)提供了批量Load/Store指令尋指令尋址方式,即通常所說的多寄存器尋址,也就址方式,即通常所說的多寄

20、存器尋址,也就是一次可以傳送幾個寄存器的值,允許一條是一次可以傳送幾個寄存器的值,允許一條指令最多傳送指令最多傳送16個寄存器。個寄存器。39TM39編碼格式編碼格式n批量加載:批量加載:LDM !, n批量存儲:批量存儲:STM !, 40TM40nregister_list表示要加載或存儲的寄存器列表,表示要加載或存儲的寄存器列表,bit15:0可以表示可以表示16個寄存器,如果某位為個寄存器,如果某位為1,則,則該位的位置作為寄存器的編號,此寄存器參預加載該位的位置作為寄存器的編號,此寄存器參預加載或存儲?;虼鎯ΑS用于恢復用于恢復CPSR和強制用戶位。當程序計數器和強制用戶位。當程序

21、計數器PC包含在包含在LDM指令的指令的register_list中,且中,且S為為1時,則時,則當前模式的當前模式的SPSR被拷貝到被拷貝到CPSR中,使處理器的中,使處理器的程序返回和狀態(tài)的恢復成為一個原子操作。如果程序返回和狀態(tài)的恢復成為一個原子操作。如果register_list中不包含程序計數器中不包含程序計數器PC,S為為1則加載則加載或存儲的是用戶模式下的寄存器組?;虼鎯Φ氖怯脩裟J较碌募拇嫫鹘M。41TM41n注意事項:注意事項:* 指令中寄存器和連續(xù)內存地址單元的對應關指令中寄存器和連續(xù)內存地址單元的對應關系:系:編號低的寄存器對應內存低地址單元,編號低的寄存器對應內存低地址單

22、元,編號高的寄存器對應內存高地址單元。編號高的寄存器對應內存高地址單元。42TM42內存操作內存操作 批量批量Load/Store指令在實現寄存器組和連續(xù)內存單指令在實現寄存器組和連續(xù)內存單元中數據傳遞時,地址的變化方式(元中數據傳遞時,地址的變化方式(addr_mode)有以下四種:有以下四種:n后增后增IA (Increment After) :每次數據傳送后地址加:每次數據傳送后地址加4; n先增先增IB (Increment Before) :每次數據傳送前地址加:每次數據傳送前地址加4 ; n后減后減DA (Decrement After) :每次數據傳送后地址減:每次數據傳送后地址

23、減4 ; n先減先減DB (Decrement Before) :每次數據傳送前地址減:每次數據傳送前地址減4 ; 43TM43內存操作內存操作 nLDMIA R0,R2,R3,R5,R7nSTMDB R1!,R0,R2-R5 練習:練習:1、將、將src開始的開始的6個字復制到個字復制到dest開始的存儲單元中開始的存儲單元中2、將、將src開始的開始的6個字讀入后分別乘以個字讀入后分別乘以2再存回到原來的存儲單再存回到原來的存儲單元中。元中。44TM44堆棧操作堆棧操作1. 根據堆棧指針指向位置的不同可以分為滿規(guī)模和空堆棧:根據堆棧指針指向位置的不同可以分為滿規(guī)模和空堆棧:n滿堆棧(滿堆棧

24、(Full Stack):當堆棧指針指向最后壓入堆棧的數據時;當堆棧指針指向最后壓入堆棧的數據時;n空堆棧(空堆棧(Empty Stack): 當堆棧指針指向下一個將要放入數據的空位置時;當堆棧指針指向下一個將要放入數據的空位置時;2. 根據堆棧的生成方式,又可以分為遞增堆棧和遞減堆棧:根據堆棧的生成方式,又可以分為遞增堆棧和遞減堆棧:n遞增堆棧(遞增堆棧(Ascending Stack) :當堆棧由低地址向高地址生成時;當堆棧由低地址向高地址生成時;n遞減堆棧(遞減堆棧(Decending Stack) :當堆棧由高地址向低地址生成時;當堆棧由高地址向低地址生成時;45TM45堆棧操作堆棧操

25、作四種類型的堆棧工作方式:四種類型的堆棧工作方式:n滿遞增堆棧(滿遞增堆棧(FA)n滿遞減堆棧(滿遞減堆棧(FD)n空遞增堆棧(空遞增堆棧(EA)n空遞減堆棧(空遞減堆棧(ED)46TM46堆棧操作堆棧操作nSTMFD R13!,R0,R3-R10,LRnLDMFD R13!,R0,R3-R10,PCnSTMDB R1!,R0,R2-R5nLDMFD R13!,R0-R3,R12,PCnLDMFD R13!,R0-R3,R12練習:用堆棧操作完成下面的處理練習:用堆棧操作完成下面的處理1、將、將src開始的開始的6個字復制到個字復制到dest開始的存儲單元中開始的存儲單元中2、將、將src開始的開始的6個字讀入后分別乘以個字讀入后分別乘以

溫馨提示

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

評論

0/150

提交評論