我对如何递归实现一个使用ARM程序集打印100(1..2..3..100)的方法感到很困惑。我有C代码来做这个,C非常简单,但组装更多,我不知道如何做到这一点。
请帮帮忙?
谢谢!
print100_recursive_ARM:
push {r4-r11, ip, lr}
CMP r0, #0
BEQ print_zero
SUB r0, r0, #1
BL print100_recursive_ARM
pop {r4-r11, ip, lr}
B print_num
print_num:
print_zero:
constant: .ascii "%d "
Print_ARM:
MOV r1, r0
LDR r0, =constant
BL printf
end:
pop {r4-r11, ip, lr}
BX lr
这不起作用。
答案 0 :(得分:3)
肮脏的技巧:用C语言编写,用例如gcc -S source.c
,并分析编译器是如何做到的(现在在source.s
中)。如何调用/返回,如何处理局部变量,通常很复杂。通过这种方式,您可以使用汇编源来学习或修改。