如果我们要实现一个汇编代码,通常先实现一个功能相识的C代码,然后再写汇编代码。
C源码:demo.c
void main(void)
{
int ret=0;
func1(2);
while(1) {};
}
func1(int a)
{
if(a==2)
return func2(a);
else
return func3(a);
}
func2(int a)
{
return a+3;
}
func3(int a)
{
return a-1;
}
汇编码:demo.s
.text
main:
mov r5,#0
mov r0,#2
bl fun1 @函数调用
main_end:
b main_end @ while(1);
fun1:
cmp r0,#2 @ if(a==2)
bleq fun2 @ cmp判断相等执行fun2
blne fun3 @cmp判断不相等执行fun3
fun1_end:
mov pc,lr @保存返回地址到LR
fun2:
mov r13,lr @将fun1的返回地址保存到R13,避免嵌套函数要覆盖LR中的数据
add r0,#3
mov pc,r13 @函数返回
fun3:
sub r0,r0,#1
mov pc,lr @函数返回
.end