加法指令 add r1,r2,r3 r1= r2+r3;
帶進製加法 adc r1,r2,r3 r1=r2+r3+c
減法指令 sub r1,r2,r3 r1 = r2-r3
逆向減法 rsb r1,r2,r3 r1=r3-r2
帶借位減法 sbc r1,r2,r3 r1=r2-r3-!c
帶錯位逆減法 ( rsc) r1,r2,r3 r1=r3-r2-!c
邏輯與指令 (and) r0,r0,#0x0f
邏輯或指令 (orr) r0,r0, #0x0f
邏輯異或 (eor) r0,r0,#0x0f
位清除 (bic) r0,r0,#9
比較指令 (cmp) r1,#10 cpsr(程式狀態暫存器) = r1-10;
反值比較指令 (cmn) r1,#10 cpsr = r1+r2
位測試指令 (tst) r1,#3 cpsr = r1 and 3
相等測試 (teq) r1,r3 cpsr = r1 eor r2
資料傳輸指令 (mov) r1,r2 r1 = r2
取反傳送指令 (mvn) r1,r2 r1 = ~r2
ldr 可以作為載入指令:ldr指令用於從儲存器中將乙個32位的字資料傳送到目的暫存器中。
arm是risc結構,資料從記憶體到cpu之間的移動只能通過l/s指令來完成,也就是ldr/str指令。
比如想把資料從記憶體中某處讀取到暫存器中,只能使用ldr
比如:ldr r0, 0x12345678
就是把0x12345678這個位址中的值存放到r0中。
ldr偽指令:
1)arm指令集中,ldr通常都是作載入指令的,但是它也可以作偽指令。
ldr偽指令的形式是「ldr rn,=expr」。
(2)例子:
count equ 0x40003100
ldr r1,=count
mov r0,#0
str r0,[r1]
關於ldr mov str 區分
count是我們定義的乙個變數,位址為0x40003100。
ldr r1,=count是將count這個變數的位址,也就是0x40003100放到r1中。
mov r0,#0是將立即數0放到r0中。
str r0,[r1]是乙個典型的儲存指令,將r0中的值放到以r1中的值為位址的儲存單元去。實際就是將0放到位址為0x40003100的儲存單元中去。
str指令
格式如下:
str 源暫存器,《儲存器位址》
str指令用亍從源暫存器中將乙個32位的字資料傳送到儲存器中。該指令在程式設計中比較常
用,丏定址方式靈活多樣,使用方式可參考指令ldr。
指令示例:
str r0,[r1],#8 ;將r0中的字資料寫入以r1為位址的儲存器中,並將新位址r1+8寫入r1。
str r0,[r1,#8] ;將r0中的字資料寫入以r1+8為位址的儲存器中。」
str r1, [r0] ;將r1暫存器的值,傳送到位址值為r0的(儲存器)記憶體中
ARM彙編指令
b或bl指令引起處理器轉移到 子程式名 也就是位址 處開始執行,這兩個指令都是相對跳轉指令。兩者的不同之處在於bl指令在轉移到子程式執行之前,將其下一條指令的位址拷貝到r14 lr,鏈結暫存器 由於bl指令儲存了下條指令的位址,因此使用指令 mov pc lr 即可實現子程式的返回。而b指令則無法實...
arm彙編指令
一般arm官方風格彙編指令為大寫,windows ads mdk 實際運用一般用gnu風格,為小寫,linux 1 arm採用risc架構,cpu本身不能直接讀取內 存,而需要先將記憶體中內容加載入cpu中通用寄 存器中才能被 cpu處理 ldr loadregister 指令 將記憶體內容加載入通...
ARM彙編指令
1.彙編概述 2.指令分類學習 3.偽指令 4.協處理訪問指令 為什麼要學習使用匯程式設計序?bootloader kernel的初始化和需要執行效率極高的程式中 1.arm標準彙編 2.gnu彙編 section.data 初始化的資料 section.bss 未初始化的資料 section.te...