尋址操作指令總結(jié)_第1頁
尋址操作指令總結(jié)_第2頁
尋址操作指令總結(jié)_第3頁
尋址操作指令總結(jié)_第4頁
尋址操作指令總結(jié)_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、1、 寄存器尋址操作數(shù)的值在寄存器中,指令中的地址碼字段指出的是寄存器編號,指令執(zhí)行時(shí)直接取出寄存器自來操作。例如: SUB R0,R1,R2 ;R1 - R2 R0該指令將R1的值減去R2的值,結(jié)果保存得到R0中。這種尋址方式是各類微處理器經(jīng)常采用的一種方式,也是一種執(zhí)行效率較高的尋址方式。練習(xí): AREA TEXT,CODE,READONLYENTRYSTART MOV R1,#0x80 MOV R2,#0x40 SUB R0,R1,R2END 將立即數(shù)0x80裝入R1中將立即數(shù)0x40裝入R2中將R1的值減去R2的值,結(jié)果保存到R0中2、 立即尋址立即尋址指令中的操作碼字段后面的地址碼部

2、分就是操作數(shù)本身,也就是說,數(shù)據(jù)就包含在指令當(dāng)中,取出指令也就取除了可以立即使用的操作數(shù)(立即數(shù))。立即尋址也叫立即數(shù)尋址。例如: SUBS R0,R0,#1 ;R0 - 1 R0 MOV R0,#0xff00 ;0xff00 R0 第1條指令將R0減1,結(jié)果保存到R0中,并影響標(biāo)志位。第2條指令將立即數(shù)0xff00裝入R0中。練習(xí): AREA TEXT,CODE,READONLYENTRYSTART MOV R0,#0x80 SUBS R0,R0,#0x20 MOV R0,#0xff00END 將立即數(shù)0x80裝入R0中 R0減1,結(jié)果保存到R0中,并影響標(biāo)志位 將立即數(shù)0xff00裝入R0

3、中3、 寄存器偏移尋址寄存器偏移尋址是ARM指令集特有的尋址方式,當(dāng)?shù)?操作數(shù)是寄存器偏移方式時(shí),第2個(gè)寄存器操作數(shù)在與第1個(gè)操作數(shù)結(jié)合之前,選擇進(jìn)行移位操作。MOV Rd,Rn,Rm,Rm 稱為第2操作數(shù)寄存器 用來指定一位類型和移位位數(shù),有兩種形式: 5位立即數(shù) (其值小于32); 寄存器(用Rs表示) (其值小于32)。例如:MOV R1,R2,LSL #3 ;R2的值左移3位,結(jié)果放入R0,即R0=R2*8 ANDS R1,R1,R2,LSL R3 ;R2的值左移R3位,然后和R1相與操作,結(jié)果放入R1練習(xí):AREA TEXT,CODE,READONLYENTRYSTART MOV R

4、1,#0x06 MOV R2,#0x01 MOV R3,#0x02 MOV R0,R2,LSL #3 ANDS R1,R1,R2,LSL R3END 將立即數(shù)0x06裝入R1中 將立即數(shù)0x01裝入R2中 將立即數(shù)0x02裝入R3中 R2的值左移3位,結(jié)果放入R0,即R0=R2*8 R2的值左移R3位,然后和R1相與操作,結(jié)果放入R1第2操作數(shù)移位方式 共有六種移位方式: LSL邏輯左移 LSR邏輯右移 ASL算術(shù)左移 ASR算術(shù)右移 ROR循環(huán)右移 RRX帶擴(kuò)展的循環(huán)右移1) LSL:邏輯左移,寄存器中字的低端空出的位補(bǔ)0.2) LSR:邏輯右移,寄存器中字的高端空出的位補(bǔ)0. SUB R3

5、,R2,R1,LSL #2 ;R3 R2 - (R1邏輯左移2位) SUB R3,R2,R1,LSR R0 ;R3 R2 - (R1邏輯右移R0位)練習(xí):AREA TEXT,CODE,READONLYENTRYSTART MOV R0,#1 MOV R1,#2 MOV R2,#8 SUB R3,R2,R2,LSL #2 SUB R3,R2,R1,LSR R0NOP END將立即數(shù)1裝入R0中將立即數(shù)2裝入R1中將立即數(shù)8裝入R2中R2的值減去R2左移兩位的值放入R3中R1的值減去R1右移R0位的值放入R33) ASL:算術(shù)左移,由于左移空出的有效位用0填充,因此它與LSL同義、4) ASR:算

6、術(shù)右移,移位過程中保持符號位不變,即如果源操作數(shù)為整數(shù),則自的高端空出的位補(bǔ)0,否則補(bǔ)1. ADD R3,R2,R1,ASL #2 ;R3 R2+(R1算術(shù)左移2位) SUB R3,R2,R1,ASR R3 ;R3 R2-(R1算術(shù)右移R3位)5) ROR:循環(huán)右移,由字的低端移出的位填入自的高端空出的位。 SUB R3,R2,R1,ROR #2 ;R3 R2-(R1算術(shù)右移2位)6) RRX:帶擴(kuò)展的循環(huán)右移,操作數(shù)右移一位,高端空出的位用原C標(biāo)志值填充。 SUB R3,R2,R1,RRX R0 ;R3 R2-(R1帶進(jìn)位位循環(huán)右移R0位)第2操作數(shù)的移位位數(shù) 移位位數(shù)可以停用立即數(shù)或者寄存

7、器方式給出,其值均小于32,應(yīng)為030. ADD R3,R2,R1,LSR #2 ;R3 R2+(R1右移2位) ADD R3,R2,R1,LSR R4 ;R3 R2+(R1右移R4位)4、 寄存器間接尋址寄存器間接尋址指令中的地址碼給出的是一個(gè)通用寄存器編號,所需要的操作數(shù)保存在寄存器指定地址的存儲(chǔ)單元中,即寄存器為操作數(shù)的地址指針。例如: LDR R0,R1 ;R0 R1 STR R0,R1 ;R1 R0第1條指令將以R1的值為地址的存儲(chǔ)單元中的內(nèi)容加載到寄存器R0中。第2條指令將R0的內(nèi)容存儲(chǔ)到以R1的值位地址的存儲(chǔ)單元中。R1基址寄存器; R1的內(nèi)容基地址練習(xí): AREA TEXT,C

8、ODE,READONLYENTRY START LDR R1,=DATA1 LDR R0,R1 STR R0,R2 SWI 0x123456 AREA lianxi,DATA,READWRITE DATA1 DCD 0x1234END 將以R1的值為地址的存儲(chǔ)單元中的內(nèi)容加載到寄存器R0中 將R0的內(nèi)容存儲(chǔ)到以R2的值位地址的存儲(chǔ)單元中5、 基址尋址基址尋址是將基址寄存器的內(nèi)容與指令中給出的偏移量相加,形成操作數(shù)的有效地址,基址尋址用于訪問基址附近的存儲(chǔ)單元,常用于查表、數(shù)組操作和功能部件寄存器訪問等。例如: LDR R2,R3,#0x0F ;將R3中的數(shù)值加0x0F作為地址,取出此地址的數(shù)值

9、 保存在R2中 STR R1,R0,#-2 ;將R0中的數(shù)值減2作為地址,把R1中的內(nèi)容保存到此地址位置練習(xí):AREA TEXT,CODE,READONLYENTRYSRART MOV R0,#0x06 MOV R3,#0x08 LDR R2,R3,#0x0F STR R1,R0,#-2NOPEND 將立即數(shù)0x06裝入R0中將立即數(shù)0x08裝入R3中 將R3中的數(shù)值加0x0F作為地址,取出此地址的數(shù)值保存在R2中 將R0中的數(shù)值減2作為地址,把R1中的內(nèi)容保存到此地址位置有3種加偏址的方式: 1)前變址模式(不修改基址寄存器) 先基址+偏址,生成操作數(shù)地址,做指令的操作,也叫前索引偏移。例如

10、:STR R0,R1,#12 ;R1:基址寄存器,不改變。12:偏移量練習(xí):AREA TEXT,CODE,READONLYENTRYSRART MOV R1,#0x02 STR R0,R1,#6NOPEND 將立即數(shù)2裝入R1中將R0的值放入到R1偏移6位后所指地址的內(nèi)存中 2)自動(dòng)變址模式(修改基址寄存器) 先基址+偏址,生成操作數(shù)地址,做指令的操作,在自動(dòng)修改基址寄存器。例如:LDR R0,R1,#4! ;R0 mem32R1+4,R1 R1+4,!表示更新基址寄存器練習(xí):AREA TEXT,CODE,READONLYENTRYSRART MOV R1,#0x04 LDR R0,R1,#4

11、!NOPEND將R1偏移4位后地址內(nèi)存中的內(nèi)容存到R0中,基址R1不變 3)后變址模式(修改基址寄存器) 基址寄存器不加偏移作為操作數(shù)地址。完成指令操作后,用(基址+偏移)的值修改基址寄存器。即先用基地址傳數(shù),然后修改基地址(基址+偏移),也叫后索引偏移。偏移地址形式可以是一個(gè)立即數(shù),也可以是另一個(gè)寄存器,并且還可以是寄存器移位操作。例如:LDR R0,R1,R2 ;R0 mem32R1+R2 LDR R0,R1,R2,LSL #2 ;R0 mem32R1+R2*4練習(xí):AREA TEXT,CODE,READONLYENTRYSRART MOV R1,#0x04 MOV R2,#0x02 LD

12、R R0,R1,R2 LDR R0,R1,R2,LSL #2NOPENDR1加R2值地址所指內(nèi)容存到R0中,基址R1改變R2左移兩位加R1值地址所指內(nèi)容存到R0中6、 多寄存器尋址多寄存器尋址就是一次可以傳送幾個(gè)寄存器值,允許一條指令傳送16個(gè)寄存器的任何子集或所有寄存器。例如:LDMIA R1!,R2-R7,R12 ;將R1單元中的數(shù)據(jù)讀出到R2R7,R12和R1自動(dòng)加1STMIA R0!,R3-R6,R10 ;將R3R6,R10中的數(shù)據(jù)保存到R0指向的地址,R0自動(dòng)加1 使用多寄存器尋指令時(shí),寄存器自己的順序按有小到大的順序排列,連續(xù)的寄存器可用“”連接,否則,用“,”分隔書寫。7、 堆棧

13、尋址堆棧是一種數(shù)據(jù)結(jié)構(gòu),存儲(chǔ)區(qū)的操作順序分為“后進(jìn)先出”和“先進(jìn)后出”,堆棧尋址是隱含的,它是用一個(gè)專門的寄存器(堆棧指針SP)指向一塊存儲(chǔ)區(qū)域(堆棧)。指針?biāo)赶虻拇鎯?chǔ)單元就是堆棧的棧頂。存儲(chǔ)器對戰(zhàn)可分為兩種:1) 向上生長:向高地址方向生子,成為遞增堆棧;2) 向上生長:向高地址方向生子,成為遞增堆棧;堆棧指針指向最后壓入堆棧的有效數(shù)據(jù)項(xiàng),稱為滿堆棧;堆棧指針指向下一個(gè)要放入的空位置,稱為空堆棧。這樣就有4種類型的堆棧表示遞增和遞減的滿堆棧和空堆棧的各種組合。滿遞增:堆棧通過增大存儲(chǔ)器的地址向上增長,堆棧指針指向內(nèi)含有效數(shù)據(jù)向的最高地址。指令如LDMFA和STMFA等。空遞增:堆棧通過增大

14、存儲(chǔ)器的地址向上增長,堆棧指針指向堆棧上的第一個(gè)空位置。指令如LDMEA和STMEA等。滿遞減:堆棧通過減小存儲(chǔ)器的地址向下增長,堆棧指針指向內(nèi)含有效數(shù)據(jù)向的最低地址。指令如LDMFD和STMFD等。滿遞增:堆棧通過增大存儲(chǔ)器的地址向上增長,堆棧指針指向堆棧下的第一個(gè)空位置。指令如LDMED和STMED等。例如: STMFD SP!,R4-R7,R1 ;滿遞減 LDMFA SP!,R4-R7,pc ;滿遞增練習(xí):AREA TEXT,CODE,READONLYENTRYSTART LDR R3,=data1 LDR R4,R3 ADD R3,R3,#4 LDR R5,R3 ADD R3,R3,#

15、4 LDR R6,R3 MOV LR,PC LDR SP,USE_STACK STMFD sp!,R4 - R6,LR LDMFA sp!,R7 - R9,R10 SWI 0x123456 AREA lianxi,DATA,READWRITEUSE_STACK DCD 0x10data1 DCD 0x1,0x2,0x3 END8、 塊復(fù)制尋址塊復(fù)制尋找是把存儲(chǔ)其中的一個(gè)數(shù)據(jù)塊加載到多個(gè)寄存器中,或者是把多個(gè)寄存其中的內(nèi)容保存到存儲(chǔ)器中。應(yīng)用指令:塊復(fù)制尋址是多寄存器傳送指令LDM/STM的尋址方式,因此也較多寄存器尋址。塊復(fù)制尋址中的寄存器,可以是R0R15這16個(gè)寄存器的子集(一部分),或是所有寄存器。它有4種尋址操作:LDMIA/STMIA (先傳送,后地址加4)LDMIB/STMIB (先地址加4,后傳送)LDMDA/STMDA (先傳送,后地址減4)LDMDB/STMDB (先地址減4,后傳送)例如:STMIA R0!,R1 R7 ;將R1R7的數(shù)據(jù)保存到存儲(chǔ)器中,存儲(chǔ)器指針在保存第1 個(gè)值之后增加,增長方向?yàn)橄蛏显鲩L STMIB R0!,R1 R7 ;將R1R7的數(shù)據(jù)保存到存儲(chǔ)器中,存儲(chǔ)器指針在保存第1個(gè)值之后增加,增長方向?yàn)橄蛏显鲩L練習(xí):AREA XU,DATA,READWRITEda1 DCD 0x1,0x2,0x3,0x4d

溫馨提示

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

評論

0/150

提交評論