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、add
r0,r1,#4;表示:r0=r1+4。
sub
r0,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指令實現子程式的呼叫和處理器工作狀態的切換。同時,子程式的返回...