常用arm彙編指令 RISC指令集

2021-10-25 17:12:04 字數 1359 閱讀 4325

ldr r0, [r1]           @讀記憶體,r0等於r1所指向位址的值,相當於c語言r0 = *r1;

str r0, [r1] @寫記憶體,把r0的值存放到r1所指向的位址中,相當於c語言*r1 = r0

ldr r1, [r2, #4] @基址變址定址,相當於c語言r1=*(r2+4);

ldr r0, =0x12345678 @偽指令,編譯最終拆分為幾條真正的arm指令,最後結果是r0 = 0x12345678;

mov r0, r1       //賦值語句,相當於r0=r1;

mov r0, #0x100 //r0=0x100

add r0, r1, #4 //加法,相當於r0=r1+4

sub r0, r1, r2 //減法,相當於r0=r1-r2

b flag    //跳轉到flag標籤出,相當於c語言的goto flag; 這個標籤也可以是乙個函式

b . //跳轉到當前位置,相當於c語言的while(1);死迴圈

bl main //跳轉到main函式執行,main函式結束後會返回到當前位置繼續往下執行

cmp r1,r2      //比較r0和r1,比較結果直接影響標誌位

beq flag //上面比較結果如果相等,則跳轉到flag

moveq r3, r4 //上面比較結果相等就執行mov r3, r4 相當於c語言if(eq)

movne r3, r4 //上面比較結果不相等就執行mov r3, r4 相當於c語言if(!eq)

msr cpsr, r0	     @cpsr = r0,mrs用來讀psr,msr用來寫

msr cpsr_c, #0xd3 @只操作cpsr模式位

mrc p15,0,r0,c1,c0,0	//讀協處理器

mcr p15,0,r0,c1,c0,0 //寫協處理器,設定cpu工作於非同步模式

ldmia r0,            @r2到r3=*(r0++),r0的值不會改變

ldmia r0!, @r2到r3=*(r0++),r0等於運算完 最後的位址

ldmfd sp!, ^   @在目標暫存器中有pc時,會同時將spsr寫入到cpsr,一般用於從異常模式返回。
.global _start     //將_start申明為全域性的,可以被其他檔案呼叫

_start:

ARM常用彙編指令

1 gbll 偽指令用於定義乙個全域性的邏輯變數,並初始化為。gbll bootloader bootloader setl 2 get 或 include get 偽指令用於將乙個原始檔包含到當前的原始檔中,並將被包含的原始檔在當前位置進行彙編處理。可以使用 include 代替 get。incl...

基礎常用arm彙編指令

ldr 目的暫存器 儲存器位址 作用 指令從記憶體中讀出資料到暫存器中 比如 ldr r1,r2,4 將位址r2 4的記憶體單元的資料讀取到r1中 ldr r1,r2 將位址r2的記憶體單元的資料讀取到r1中。r1 r2 注意 ldr中的第二個引數為 時,表示偽指令,或者表示記憶體訪問指令 比如 l...

ARM彙編指令

b或bl指令引起處理器轉移到 子程式名 也就是位址 處開始執行,這兩個指令都是相對跳轉指令。兩者的不同之處在於bl指令在轉移到子程式執行之前,將其下一條指令的位址拷貝到r14 lr,鏈結暫存器 由於bl指令儲存了下條指令的位址,因此使用指令 mov pc lr 即可實現子程式的返回。而b指令則無法實...