函数是foo,它基本上计算values
数组中的1的数量。
.data
.balign 4
values:
.word 1
.word 0
.word 1
.word 2
.word 1
.balign 4
count: .word 0
.balign 4
return .word 0
.text
.global foo
foo:
mov r3, #0
mov r2, #4
mul r2, r1, r2
add r2,r0,r2
mov r4,#1
foo_loop:
cmp r0,r2
beq foo_exit
ldr r1,[r0]
cmp r1,r4
beq foo_eq
add r0,r0,#4
b foo_loop
foo_eq:
add r3,r3,#1
add r0,r0,#4
b foo_loop
foo_exit:
mov r0,r3
bx lr
.global main
main:
ldr r1, =return
str lr, [r1]
ldr r0, =values
mov r1,#5
bl foo
ldr r1, =count
str r0,[r1]
ldr lr, =return
ldr lr,[lr]
bx lr
答案 0 :(得分:1)
我唯一能看到的不正确的是你在函数中使用寄存器r4
而不保存它。只有寄存器r0-r3
可以用作参数和暂存寄存器。
所以你应该这样做:
.text
.global foo
foo:
push {r4}
...
foo_exit:
mov r0,r3
pop {r4}
bx lr
或(将PC保存在堆栈中):
.text
.global foo
foo:
push {r4,pc}
...
foo_exit:
mov r0,r3
pop {r4,lr}