ARM常用的彙編指令及相關拓展

2021-09-25 15:25:37 字數 1329 閱讀 8105

cpu可以直接訪問r0~r15暫存器,但是對於類似gpfcon、gpfdat等暫存器需以位址訪問。

常用彙編**:3、b:跳轉;

4、mov(move):賦值;

如:mov r0,r1 ;

把r1的值賦給r0,r0=r1。

若mov r0,#0x100,即r0=0x100。

5、ldr r0,=0x12345678

偽指令,它會被拆分為幾條真正的ram指令。

6、addr0,r1,#4;表示:r0=r1+4。

subr0,r1,#4;表示:r0=r1+4。

sub r0,r1,r2;表示:r0=r1-r2;

8、ldm(m:many):讀記憶體,寫入多個暫存器。

stm(m:many):把多個暫存器的值寫入記憶體。

其中,ldmia(先讀後增),s***b(先減後存)分別表示:

ia:過後增加(increment after);

db:預先減少(decrement before)。【常用】

例1:s***b sp!,(fp,ip,lr,pc)【規則:高編號暫存器存在高位址】

注:s***b(先減後存)

其中,fp(r11),ip(r12),lr(r14),pc(r15)。

sp!表示sp=最終的被修改的sp值=4080.

解釋:假設sp=4096,即最高位。

i、先減:sp』=sp-4=4092;

後存:4092~4095存放pc(program counter)的值。

ii、先減:sp』=sp-4=4092-4=4088;

後存:4088~4091存放lr的值。

~~最終為4080開始。

如圖:

i、先讀:fp=4080~4083的值=原來的fp

後增:sp』=sp+4=4084。

ii、先讀:sp=4084~4087的值=原來儲存的ip。

後增:sp』=sp+4=4088。

iii、先讀:pc=4088~4091的值=原來儲存的lr。

後增:sp』=4088+4=4092。

其中,sp不加!表示sp修改的值/位址不存入sp中。

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彙編指令 1

1.blx指令從arm指令集跳轉到指令中所指定的目標位址,並將處理器的工作狀態從arm狀態切換到thumb狀態,該指令同時將pc的當前內容儲存到暫存器r14中。因此,當子程式使用thumb指令集,而呼叫者使用arm指令集時,可以通過blx指令實現子程式的呼叫和處理器工作狀態的切換。同時,子程式的返回...