版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
制作:王亮講解:張嫻靜熊祝青ARM指令的尋址方式ARM指令系統(tǒng)132
ARM指令系統(tǒng)概述
ARM指令的尋址方式
ARM指令集4
Thumb指令集ARM指令系統(tǒng)概述ARM指令的基本匯編格式
Opcode{cond}{S}Rd,Rn{,operand2}助記符可選條件后綴可選標志位后綴目標寄存器第1操作數(shù)寄存器第2操作數(shù)LDRR0,[R1];R0[R1]ADDSR2,R1,#1;R2R1+1,影響CPSRSUBNESR2,R1,R0;R2R1-R0WhileNE,影響CPSR
什么是尋址方式尋找操作數(shù)地址的方式或尋找操作數(shù)的方式稱為尋址方式。如在計算2+3=?時,需先找到2和3的地址,才能把它們?nèi)〕鰜磉M行加法操作,尋找2和3的地址的方式即尋址方式。ARM有哪些尋址方式?ARM指令的尋址方式ARM指令的尋址方式ARM的尋址方式立即尋址寄存器尋址寄存器移位尋址寄存器間接尋址基址加偏址尋址堆棧尋址塊拷貝尋址/多寄存器尋址相對尋址1)立即尋址
立即尋址/立即數(shù)尋址:操作數(shù)直接包含在指令中,只要取出指令也就取到了操作數(shù),這個操作數(shù)被稱為立即數(shù)。例如:
ADD R0,R0,#1 /*R0←R0+1*/ADD R0,R0,#0x3f /*R0←R0+0x3f*/SUBR0,R0,#1/*R0R0-1*/第二個源操作數(shù)即為立即數(shù),以“#”為前綴,十進制另加“0d”或省略。十六進制立即數(shù)另加“0x”或“&”,二進制另加“0b”或“2_”;2)寄存器尋址
寄存器尋址:操作數(shù)在寄存器中,指令中的地址碼為寄存器編號,寄存器的內(nèi)容即為操作數(shù)。執(zhí)行效率較高的尋址方式。例
ADD R0,R1,R2 /*R0←R1+R2*/
該指令的執(zhí)行效果是將寄存器R1和R2的內(nèi)容相加,其結果存放在R0寄存器中。目的寄存器第一操作數(shù)寄存器第二操作數(shù)寄存器2)寄存器尋址
MOVR1,R2 ;R1R2該指令的執(zhí)行效果是將寄存器R2的內(nèi)容傳送到寄存器R1中。寄存器尋址是各類微處器經(jīng)常采用的尋址方式,是執(zhí)行效率較高的尋址方式3)寄存器移位尋址寄存器尋址中,第二寄存器操作數(shù)在與第一操作數(shù)結合前可先進行移位操作,移位位數(shù)可以是一立即數(shù)或一寄存器R值。例ADDR3,R2,R1,LSR#2;R3R2+R1÷4ADDR3,R2,R1,LSRR4;R3R2+R1÷2R4ADDR3,R2,R1,LSL#3;R3R2+R1x8MOVR0,R2,LSL#3;R0R2X83)寄存器移位尋址移位類型LSL(LogicalShiftLeft)邏輯左移:向左移,最后移出的進CF,空出的最低有效位用零填充LSR(LogicalShiftRight)邏輯右移:向右移,最后移出的進CF,空出的最高有效位用零填充ASL(ArithmeticShiftLeft)算術左移:向左移,同LSLLogicalShiftLeft(LSL)DestinationCF0DestinationCFLogicalShiftRight...03)寄存器移位尋址ASR(ArithmeticShiftRight)算術右移:向右移,最后移出的進CF,空出的位用符號位填。源操作數(shù)為正,空出的最高有效位用零填充;源操作數(shù)為負,空出的最高有效位用1填充。DestinationCFArithmeticShiftRightSignbitshiftedin3)寄存器移位尋址ROR(RotateRight)循環(huán)右移:移出的最低位依次填入空出的最高位,最后移出的進C標志位。ROL(RotateLeft)循環(huán)左移。注意:進位標志C不在循環(huán)回路內(nèi)。RRX(RotateRightExtendedby1Place)帶擴展循環(huán)右移:寄存器的內(nèi)容循環(huán)右移1位進入C標志位,空出的位用原來的C標志位填充。DestinationCFRotateRightDestinationCFRotateRightthroughCarry4)寄存器間接尋址寄存器間接尋址:寄存器中的值作為操作數(shù)的地址,而操作數(shù)本身存放在該地址所指向的存儲器區(qū)中。例
LDR R0,[R1] ;R0←[R1]STR R0,[R1] ;[R1]←R0ADDR3,R2,[R1];R3←R2+[R1]
第一條指令將R1的值為地址的存儲器中的數(shù)據(jù)傳送到R0中。第二條指令將R0的值傳送到R1的值為地址的存儲器中。5)基址變址尋址基址變址尋址:將寄存器(基址寄存器)的內(nèi)容與指令中給出的地址偏移量相加,得到操作數(shù)的有效地址,操作數(shù)存放在該地址指向的存儲區(qū)中?;纷冎穼ぶ酚挚煞譃椋?/p>
1)基址加偏移量尋址
a.前索引尋址方式:基址需加(或減)偏移來計算訪問的地址。b.后索引尋址方式:基址不帶偏移作為傳送的地址,傳送后自動索引。
2)基址加索引尋址
:指令指定一個基址寄存器,再指定另一個寄存器(索引),其值作為位移加到基址上形成存儲器地址。5)基址變址尋址例如:LDRR0,[R1,#4];R0←[R1+4]LDRR0,[R1,#4]!;R0←[R1+4],R1←R1+4LDRR0,[R1],#4;R0←[R1],R1←R1+4LDRR0,[R1,R2];R0←[R1+R2]LDRR0,[R1,R2,LSL#2];R0←[R1+R2*4]變址尋址方式常用于訪問某基址附近的地址單元,常用于查表、數(shù)組操作。前變址自動變址后變址5)基址變址尋址在第一條指令中,將寄存器R1的內(nèi)容加上4形成操作數(shù)的有效地址,從而取得操作數(shù)存寄存器R0中。在第二條指令中,將寄存器R1的內(nèi)容加上4形成操作數(shù)的有效地址,從而取得操作數(shù)存寄存器R0中,然后R1的內(nèi)容自增4。請注意這里的“!”的用法,它表示操作完成后刷新“!”前的寄存器的數(shù)值。在第三條指令中,將寄存器R1的內(nèi)容作為操作數(shù)的有效地址,從而取得操作數(shù)存寄存器R0中,然后,R1的內(nèi)容自增4。6)堆棧尋址
操作數(shù)在堆棧中,堆棧是一塊用于保存數(shù)據(jù)的連續(xù)內(nèi)存區(qū),按先進后出FILO(FirstInLastOut)的順序進行存取操作,使用一個稱作堆棧指針的專用寄存器指示當前的操作位置。根據(jù)堆棧指針指向位置的方式可分為如下兩種堆棧:滿堆棧(FullStack):當堆棧指針指向最后壓入堆?;虻谝粋€要讀出的數(shù)據(jù)時??斩褩#‥mptyStack):當堆棧指針指向最后壓入堆棧的數(shù)據(jù)的上/下一個空位或第一個要讀出的數(shù)據(jù)上/下一個空位時。12SP滿12SP空6)堆棧尋址根據(jù)堆棧指針變化的方式可分為如下兩種堆棧遞增堆棧(AscendingStack):當堆棧由低地址向高地址生成時,稱為遞增堆棧遞減堆棧(DecendingStack):當堆棧由高地址向低地址生成時,稱為遞減堆棧12SPBase,LowHigh遞增堆棧SP12Base,HighLow遞減堆棧6)堆棧尋址堆棧的四種工作方式滿遞增堆棧:堆棧指針指向最后壓入或第一個要讀出的數(shù)據(jù),且由低地址向高地址生長。滿遞減堆棧:堆棧指針指向最后壓入或第一個要讀出的數(shù)據(jù),且由高地址向低地址生長。12SPBase,LowHigh滿遞增堆棧SP12Base,HighLow滿遞減堆棧6)堆棧尋址空遞增堆棧:堆棧指針指向上一個將要放入數(shù)據(jù)的空位或第一個將要讀出的數(shù)據(jù)的上一個空位,且由低地址向高地址生長??者f減堆棧:堆棧指針指向下一個將要放入數(shù)據(jù)的空位或第一個將要讀出的數(shù)據(jù)的下一個空位,且由高地址向低地址生長12SPBase,LowHigh空遞增堆棧12SPBase,HighLow空遞減堆棧6)堆棧尋址例ARMSTMFDSP!{r0,r1,r3-r5};r0-r1,r3-r5入棧LDMFDSP!{r0,r1,r3-r5};r0-r1,r3-r5出棧ThumbPUSH{r0,r1,r3-r5};r0-r1,r3-r5入棧POP{r0,r1,r3-r5};r0-r1,r3-r5出棧7)塊拷貝尋址/多寄存器尋址多寄存器尋址中,用一條指令把存儲器中的一塊數(shù)據(jù)加載到多個寄存器,或把多個寄存器中的內(nèi)容保存到存儲器中。尋址操作中的寄存器可以是R0~R15或其子集。LDM/STM加下列后綴即成為多寄存器尋址指令IA(IncrementAfter):操作完成后地址增IB(IncrementBefore):操作完成前地址增DA(DecrementAfter):操作完成后地址減DB(DecrementBefore):操作完成前地址減7)塊拷貝尋址/多寄存器尋址LDMIAR1,{R0,R2,R5};R0[R1];R2[R1+4];R5[R1+8]該指令的后綴IA表示在每次執(zhí)行完加載/存儲操作后,R1按字長度增加,指令可將連續(xù)存儲單元的值送到R0,R2,R5寄存器中7)塊拷貝尋址/多寄存器尋址STMIAR1,{R0,R2,R5};[R1]R0;[R1+4]R2;[R1+8]R5該指令的后綴IA表示在每次執(zhí)行完加載/存儲操作后,R1按字長度增加,指令可將R0,R2,R5寄存器的值送到連續(xù)存儲單元中。7)塊拷貝尋址/多寄存器尋址例子STMIAR9!,{R0,R1,R5}
;R0/1/5存入R9所指內(nèi)存,先存后加STMIBR9!,{R0,R1,R5};R0/1/5存入R9所指內(nèi)存,先加后存R5R1R9’R0R9STMIAR9!,{R0,R1,R5}1000100c1018R5R1R0R9’R9STMIBR9!,{R0,R1,R5}1000100c10187)塊拷貝尋址/多寄存器尋址STMDAR9!,{R0,R1,R5}
;R0/1/5存入r9所指內(nèi)存,先存后減STMDBR9!,{R0,R1,R5};R0/1/5存入R9所指內(nèi)存,先減后存R1R5R9STMDAR9!,{R0,R1,R5}R0R9’1000100c1018R5R9STMDBR9!,{R0,R1,R5}R1R0R9’1000100c10188)相對尋址相對尋址:以程序計數(shù)器PC的當前值為基地址,指令中的地址標號作為偏移量,兩者相加得操作數(shù)的有效地址。以下程序段完成子程序的調(diào)用和返回,跳轉指令BL采用了相對尋址方式:
BL
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 虛擬拍攝與綠幕技術-洞察分析
- 線粒體遺傳與疾病診斷-洞察分析
- 鄉(xiāng)村治理與綠色發(fā)展-洞察分析
- 膝關節(jié)韌帶損傷力學特性研究-洞察分析
- 醫(yī)院調(diào)崗位申請書(6篇)
- 辦公室環(huán)境的實驗室安全與標準實施策略
- 創(chuàng)新設計思維在廣告行業(yè)的作用
- 化學實驗操作的安全隱患及應對措施
- 辦公環(huán)境下的孕婦如何進行合理飲食搭配
- 企業(yè)內(nèi)部創(chuàng)新與創(chuàng)意產(chǎn)業(yè)結構的優(yōu)化
- 2024-2025學年人教版道法八年級上冊 第一學期期末測試卷01
- 期末試卷(試題)-2024-2025學年四年級上冊數(shù)學滬教版
- 基于深度教學構建高品質課堂
- 2、5、3的倍數(shù)(教案)-2023-2024學年五年級下冊數(shù)學人教版
- 第4課《古代詩歌四首》作業(yè)設計- 2024-2025學年統(tǒng)編版語文七年級上冊
- 趣味知識問答100道
- 光儲充一體化充電站項目設計方案
- 光伏貸款合同
- Unit 7 Happy Birthday!教學設計2024年秋人教版新教材七年級英語上冊
- 催化材料智慧樹知到期末考試答案章節(jié)答案2024年南開大學
- 高空蜘蛛人施工專項施工方案
評論
0/150
提交評論