Chinaunix首页 | 论坛 | 博客
  • 博客访问: 137379
  • 博文数量: 27
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 270
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-23 13:28
文章分类

全部博文(27)

文章存档

2011年(1)

2009年(15)

2008年(11)

我的朋友

分类:

2008-11-19 22:13:03

今天上课有个讨论题,如何在汇编和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;
}
阅读(1646) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~