常用彙編指令

2021-10-01 13:37:11 字數 2266 閱讀 1034

1、資料傳送指令 mov

move r1,r2 /r1=r2/

move r1,#4096 /r1=4096/

2、偽指令ldr 用於將乙個大於八位的資料裝入暫存器

ldr r1,=0x123456789 /r1=0x123456789/

ldr r1,=label /獲取絕對位址,即label的位址/

label:

……3、記憶體訪問指令(當ldr後面沒有=時為記憶體訪問指令)

讀取指令:ldr

ldr r1 ,[r2,#4] /將記憶體位址為r2+4的資料讀取到r1中,相當於c語言中的操作*/

ldr r1,[r2],#4 /將記憶體位址為r2的資料讀取到r1中,再將位址加4,r2=r2+4/

ldr pc,_irq /pc=(_irq)將標號中的內容放入pc中

_irq:

.word do_swi

儲存指令:str

str r1 ,[r2,#4] /將r1的值存入位址為r2+4的記憶體中/

str r1,[r2],#4 /將r1的值存入位址為r2的記憶體中,再將位址加4,r2=r2+4/

4、批量記憶體訪問指令 ldm stm

格式:ldm

stm

格式說明:

1):表示指令的執行條件,根據cpsr暫存器中的條件標誌位決定是否執行該條指令,每條arm指令包含4bit的條件碼域,

可以定義16個執行條件,具體如下表:

3) 中儲存記憶體的位址,如果後面加上!,指令執行完成後,rn的值會更新,等於下乙個記憶體的位址,否則保持初始值。

4)表示暫存器列表,對於ldm指令,從所對應的記憶體塊中讀取資料寫入這些暫存器,對於stm把這些暫存器的值寫入

對應的記憶體塊中。如果暫存器位址連續,可以寫成r1-rx的格式,不連續的用逗號隔開。^符號有兩種含義:如果有pc暫存器,

它表示指令執行後,spsr寄存中的值將自動複製到cpsr暫存器中–這通常用於中斷處理函式的返回;如果沒有pc暫存器,那^表示操作的是

使用者模式下的暫存器,而不是當前特權模式下的暫存器。

5)指令中與的對應關係為:編號低的暫存器對應記憶體中低位址單元,編號高的暫存器對應記憶體中高位址單元,具體如下:

擴充套件:ldmfd

5、算術指令

加指令:add

add r1,r2,#1 /r1=r2+1/

減指令:sub

sub r1,r2,#1 /r1=r2-1/

乘指令:mul

mul r1,r2,#4 /r1=r24*/

6、程式狀態暫存器訪問指令

msr cpsr, r0 /* s

mrs r0,cpsr /r

7、相對跳轉指令 b bl

1)這兩條指令的區別在於bl除了跳轉以外,還將返回位址(bl的下一條指令位址)儲存在lr暫存器中

2)這兩條指令的跳轉範圍是當前指令前後32m範圍內

3)他們是位置無關的指令,相對跳轉

e.g:

b fun1

fun1:

bl fun2

fun2:

8、其他指令

比較指令:cmp

cmp r1,r2 /*根據對比的結果設定cpsr暫存器的標誌位,參考arm指令條件碼表

邏輯指令

位與:and(相當於&)

and r0,r1,#0xff /r0=r1&0xff/

位或:orr(相當於|)

orr r0,r1,#0xff /r0=r1|0xff/

清零:bic

bic r0,r0,#0x03 /將r0中的第一位和第二位清零/

測試:tst

tst r0,#0x20 /測試第六位是否為0,為0則將cpsr的z位置1/

常用彙編指令

1 加減指令 2 adr指令 adr是小範圍的位址讀取偽指令,ldr是大範圍的讀取位址偽指令。可實際上adr是將基於pc相對偏移的位址值或基於暫存器相對位址值讀取的為指令,而ldr用於載入32為立即數或乙個位址到指定的暫存器中。到這兒就會看到其中的區別了。如果在程式中想載入某個函式或者某個在聯接時候...

常用彙編指令

一 資料傳輸指令 它們在存貯器和 暫存器 寄存 器和輸入輸出埠之間傳送資料.1.通用資料傳送指令.mov 傳送字或位元組.movsx 先符號擴充套件,再傳送.movzx 先零擴充套件,再傳送.push 把字壓入堆疊.pop 把字彈出堆疊.pusha 把ax,cx,dx,bx,sp,bp,si,di依...

彙編指令msr STM 常用彙編指令

在嵌入式開發中,匯程式設計序常常用於非常關鍵的地方,比如系統啟動時初始化,進出中斷時 的環境保護,恢復等對效能有要求的地方。arm指令集可以分為六大類,分別為資料處理指令 load store 指令 跳轉指令 程式狀態 暫存器處理指令 協處理器指令和異常產生指令。arm指令使用的基本格式如下 opc...