今天上课有个讨论题,如何在汇编和C语言中传递多个参数。因为默认汇编中只会把R0-R3四个寄存器的值传给所调用的C语言,多余的参数会通过堆栈的方式传递。感觉有些麻烦。想了一下,可以把在汇编中想要传递的数据全部放在堆栈里,把堆栈的指针传递给C函数就行了。这样就只要传递一个函数。C函数中用数组接收。自己写了个多个数相加的程序做了个测试。
//汇编程序
AREA SUM,CODE,READONLY
ENTRY
IMPORT sum
start
MOV R0,#1
MOV R1,#2
MOV R2,#3
MOV R3,#4
MOV R4,#5
MOV R5,#6
STMFD sp!,{R0-R5}
MOV R0,sp
BL sum
NOP
stop
MOV r0, #0x18 ; angel_SWIreason_ReportException
LDR r1, =0x20026 ; ADP_Stopped_ApplicationExit
SWI 0x123456 ; ARM semihosting SWI
END
//调用的实现加法的C程序
int sum(int a[])
{
int i;
int sum = 0;
for(i=0;i<5;i++)
sum = sum + a[i];
return sum;
}
阅读(1681) | 评论(0) | 转发(0) |