arm 彙編小練習

2022-04-04 09:29:11 字數 3132 閱讀 7628

熟悉各種指令用途。。

view code

area abc123, code, readonly    ;

告訴聯結器 abc123 是程式的名字

entry

code32

aaaaa

mov r1, #5

mov r2, #2

addr0, r1, r2

bic r1, r1, r0

ldr r3, =0x9000

strr1, [r3]

ldr r2, [r3], #

4stmfd r13!,

ldmfd r13!,

movr4, pc

bl cccc

bl bbbb

b .

;原地跳轉

bbbb

movr0, #0x1

movr1, #0xfffffffc

adds r2, r0, r1

movpc, lr

cccc

movr0, #0x1

orr r0, r0, #0x7

movpc, lr

end

獲取記憶體中 若干個數中 的最大者

view code

area getmax, code, readonly    ;

獲取陣列中最大的數放在r2中

entry

code32

aaaldr r1, =0x8000

;r1 位陣列位址 0x8000 =

mov r2, #0

;r2 位下標索引,初始值為0

mov r3, #3

;r3 用於產生立即數 0x8000[0] = 3

str r3, [r1,r2] ;

add r2, r2, #4

;mov r3, #2

;0x8000[1] = 2

str r3, [r1,r2] ;

add r2, r2, #4

;mov r3, #1

;0x8000[2] = 1

strr3, [r1,r2]

add r2, r2, #4

mov r3, #9

;0x8000[3] = 9

strr3, [r1,r2]

add r2, r2, #4

mov r3, #8

;0x8000[4] = 8

strr3, [r1,r2]

add r2, r2, #4

mov r3, #7

;0x8000[5] = 7

strr3, [r1,r2]

add r2, r2, #4

;;;;;;;;;;;;;;;;;;;;;;;;;;;;

mov r2, #0

;下標索引r2=0

ldr r3, [r1,r2] ;

把max ~ r3, 把r4作為存放陣列元素的臨時變數

add r2,r2,#4

mov r5, #6

;迴圈計數器r5

loop

sub r5,r5,#1

;每進入一次迴圈 迴圈計數器-1

ldr r4,[r1,r2] ;

tmp ~ r4 = r1[r2++]

add r2, r2, #4

;r2++

cmp r3, r4 ;

if r3 < r4

movlt r3,r4 ;

r3 = r4

cmp r5, #0

;判斷是否迴圈次數已到

beq endloop

b loop

endloop

movr2, r3

end

把陣列中生產立即數的部分 用 dcd 偽指令 去做:

1

area mysort, code, readonly

2entry

3code3245

movr13, #0x10000

6ldr r0, =src

7mov r1, #len/4

8 bl get_max ;

呼叫get_max;並儲存返回位址到lr中

9 b . ;

原地跳轉 除錯用

1011

1213 get_max ;

r0:陣列位址,r1:元素個數; r2:返回的最大元素值

14 stmfd r13!, ;

把r0,r1, r2,r3,r4 壓棧

1516

mov r1, #0

;下標索引r1=0

17 ldr r2, [r0,r1] ;

把max ~ r2,

18add r1,r1,#4

19mov r4, #len/4

;迴圈計數器r4

20loop

21sub r4,r4,#1

;每進入一次迴圈 迴圈計數器-1

22cmp r4, #0

;判斷是否迴圈次數已到

23beq end_loop

2425 ldr r3,[r0,r1] ;

tmp ~ r3 = r0[r1++]

26add r1, r1, #4

;r1++

27cmp r2, r3 ;

if r2 < r3

28 movlt r2,r3 ;

r2 = r3

29b loop

30end_loop

31 ldmfd r13!, ;

還原r0, r1,r3,r4 的值;

32mov pc, lr ;

r15 = r14(pc ~ r15, lr~r14)

3334

area array, data, readwrite

35 src dcd 3,2,1,9,8,7

;src =

36 len equ 6*4

;src長度 = 6*4

3738 end

ARM彙編和內嵌彙編

彙編指令 跳轉指令 b bl blxbx 資料處理指令 mov mvnadd adcsub rsbrsc andor eorbic cmncmp tstteq 狀態暫存器指令 mrs msrldr strldm stmmcr arm和協處理器之間資料交換 mrccond 可選的條件 rd 存放返回狀...

arm彙編相關

cmp rn rm operand tst logical and ldr用法 摘自arm嵌入式系統開發一書 資料 基址暫存器 示例 mem base offset 基址暫存器加上偏移 ldr r0,r1,offset mem base offset 不變 ldr r0,r1,offset mem ...

arm 彙編學習

一 暫存器和定址 arm有16個暫存器,r0 r15 pc r15 lr r14 sp r13 ip r12 push sp減少,pop sp增加 1.定址方式 從操作位址尋找運算元的方式 2.arm的定址方式 a 暫存器定址,運算元在暫存器中 b 立即定址,運算元就在指令中 subs r0,r0,...