arm彙編指令

2021-07-16 02:50:00 字數 2419 閱讀 4630

//一般arm官方風格彙編指令為大寫,windows/ads/mdk

//實際運用一般用gnu風格,為小寫,linux

(1)

•arm採用risc架構,cpu本身不能直接讀取內

存,而需要先將記憶體中內容加載入cpu中通用寄

存器中才能被  cpu處理

•ldr(loadregister)指令

將記憶體內容加載入通用暫存器。

•str(storeregister)指令將暫存器內容存入記憶體空間中。

•ldr/str組合用來實現arm cpu和記憶體資料交換

arm模式/thumb模式(16位)

各模式及對應的暫存器(s5pv210):

(2)•

暫存器定址  mov r1, r2 •

立即定址  mov r0, #0xff00 •

暫存器移位定址  mov r0, r1, lsl #3 •

暫存器間接定址  ldr r1, [r2] •

基址變址定址  ldr r1, [r2, #4] •

多暫存器定址  ldmia r1!,     //儲存現場是可用到 •

堆疊定址  stmfd sp!,          //恢復現場是用到,此時暫存器指的是後者 •

相對定址       beq flag

常用指令:

算數指令:add ,sub,mvl

邏輯與比較指令:and,orr,bic,eor

讀寫cpsr指令:mrs,msr       //mrs中r在前面,用來讀cpsr;msr用來寫到cpsr中去

跳轉指令:b(不打算返回的),bl(返回位址儲存在lr,用於函式呼叫),bx(並切換arm模式,用於異常跳轉)

訪存指令:ldr(可用作偽指令,=***實現立即數合法化),str,stm,ldm,adr(偽指令,相對於ldr,短跳轉

,編譯時以

pc為基準,用add/sub代替;而ldr長跳轉,以鏈結位址為基準,用mov代替)

軟中斷指令:swi陷入,實現系統呼叫。

偽指令:adr,ldr,nop(空操作),adrl(中等範圍位址載入指令),其他偽指令

• .global _start  @ 給_start外部鏈結屬性

•.section .text  @ 指定當前段為**段

•.ascii   .byte   .short   .long   .word

•.quad    .float    .string @ 定義資料

•.align 4  @以16位元組對齊

•.balignl 16 0xabcdefgh   @ 16位元組對齊填充

•.equ  @類似於c中巨集定義

(3)指令執行字尾

• 同一指令經常附帶不同字尾,變成不同的指令。經常使用的字尾有:

•b(byte)功能不變,操作長度變為8位

•h(halfword)功能不變,長度變為16位

•s(signed)功能不變,運算元變為有符號

•如 ldr ldrb ldrh ldrsb ldrsh

•s(s標誌)功能不變,影響cpsr標誌位

•如 mov和movs  movs r0, #0

常用字尾:

•ia(increaseafter)先傳輸,再位址+4

•ib(increasebefore)先位址+4,再傳輸

•da(decreaseafter)先傳輸,再位址-4

•db(decreasebefore)先位址-4,再傳輸

•fd(fulldecrease)滿遞減堆疊

•ed(emptydecrease)空遞減堆疊

•fa(

·······

) 滿遞增堆疊

•ea(

·······

)空遞增堆疊

一般使用滿減棧,即用ldmia,stmfd操作。

常用符號字尾:^在目標暫存器中有pc暫存器時,會將spsr寫回至cpsr(現場恢復)

ldmia r0!, r0的值在ldm過程中發生的改變(+/-)寫回到r0中

(4)條件執行字尾

(5)協處理器指令

arm理論可支援16個協處理器,實際上只實現cp15(coprocessor)

協處理器和mmu、cache、tlb等處理有關,功能上和作業系統的虛擬位址對映、cache管理等有關。

用mrc讀,mcr寫

• mcr{}   p15, , ,, , {} •

opcode_1:對於cp15永遠為0 •

rd:arm的普通暫存器 •

crn:cp15的暫存器,合法值是c0~c15 •

crm:cp15的暫存器,一般均設為c0 •

opcode_2:一般省略或為0

記住格式:p15      0        普通disco    後面三個cp15的引數(? c0  0)

ARM彙編指令

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

ARM彙編指令

1.彙編概述 2.指令分類學習 3.偽指令 4.協處理訪問指令 為什麼要學習使用匯程式設計序?bootloader kernel的初始化和需要執行效率極高的程式中 1.arm標準彙編 2.gnu彙編 section.data 初始化的資料 section.bss 未初始化的資料 section.te...

arm彙編指令

加法指令 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 帶錯位逆減法 rs...