ARM彙編指令

2021-07-23 17:51:18 字數 2571 閱讀 2941

1.彙編概述

2.指令分類學習

3.偽指令

4.協處理訪問指令

為什麼要學習使用匯程式設計序?

bootloader、kernel的初始化和需要執行效率極高的程式中

1.arm標準彙編

2.gnu彙編

.section.data

《初始化的資料》

.section.bss

《未初始化的資料》

.section.text//標明**段

.global _start//標明為全域性的,以便外部使用

_start:

《彙編**》

1。算術和邏輯指令

2.比較指令

3.跳轉指令

4.移位指令

5.程式狀態字訪問指令

6.儲存器訪問指令

1。算術和邏輯指令:

移位mov [條件] [s] , //目的(通用暫存器),源頭(通用暫存器或者立即數)

dest =op_1

示例:

@mov指令範例

mov r1,#8

mov r2,r1

mov r3,#10

mvn ,//取反賦值

dest=!op_1

@mvn指令示例

mvn r1,#0b10

mvn r2,#5

mvn r3,r1

減法sub ,,//差值,被減數,減數

dest=op_1-op_2

@sub指令示例

mov r2,#4

sub r1,#r2,#2//立即數不能做被減數

mov r0,#1

sub r3,r1,r0

加法add ,,//和,加數,加數

dest=op_1+op_2

@add指令示例

add r1,r2,#3//將r2暫存器的值與立即數

邏輯與:and ,,//和,加數,加數

dest=op_1 and op_2

@and指令範例

mov r1,#5

and r2,r1,#0//r2=0

mov r1,#5

and r2,r1,#1//r2=1

bic ,,//和,加數,加數

dest=op_1and(!op_2)

bic r0,r0,#0b1011

@bic指令範例

mov r1,#0b101011

bic r2,r1,#0b101

cmp:比較

cmpbic

,, status=op_1-op_2

比較結果值儲存於程式狀態暫存器cpsr的n,z位會發生改變,如果為負值則n被置位,如果結果為0則z被置位

@cmpbic**範例

mov r1,#2

mov r1,#1

mov r1,#2

cmp r1,#3

tst,,

status=op_1 and op_2

比較結果值儲存於程式狀態暫存器cpsr的n,z位會發生改變,如果為負值則n被置位,如果結果為0則z被置位

@tst**範例

mov r1,#0b101

tst r1,#0b001

mov r1,#0b101

tst r1,#0b10

b mov r1,#6

mov r2,#5

cmp r1,r2

bgt branch1:

add r3,r1,r2

b end

branch1:

sub r3,r1,r2

end:

nop

@bl操作範例

mov r1,#2

cmp r1,#1

bl func1

mov r1,#2

cmp r1,#3

func1:

mov r1,#2

mov r2,#3

mov pc,lr

b和bl的區別,bl的操作會在執行完成後將下一條指令存入lr暫存器,在執行完成後將pc指標指向該處繼續執行。

lsl邏輯或算術左移

mov r0,r1,lsl#2

@lsl範例

mov r1,#0b1

mov r1,r1,lsl#2

ror迴圈右移

mov r1,#0b11

mov r1,r1,ror#1

由11變為0b100000000000000000000000000000000000001

msr搬回

@範例mrs搬出

mrs r0,cpsr

orr r0,#0b100

msr cpsr,r0

ldr把記憶體的值載入到通用暫存器

str把通用暫存器的值儲存到記憶體

mov r0,#0xff

str,r0,[r1]將r0的值儲存到r1儲存的記憶體位址處

ldr,r2,[r1]將r1儲存的位址處的資料寫入通用暫存器

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

加法指令 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...