熟悉各種指令用途。。
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 ;把陣列中生產立即數的部分 用 dcd 偽指令 去做:獲取陣列中最大的數放在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
1area 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,...