初学的问题,有关变量和寄存器的关系

guixian310 2009-04-23 07:57:31
大意是在C中调用汇编中的函数

汇编代码
IMPORT Main
EXPORT add
area init,code,readonly
entry
code32
START
b Main
add
add r0,r0,r1
mov pc,lr
end

C代码
extern unsigned int add(unsigned int x,unsigned int y);
void Main(void)
{
unsigned int n1 = 100;
unsigned int n2 = 200;
unsigned int sum=0;
sum=add(n1,n2);
}
我的问题是,在C中调用ADD函数sum=add(n1,n2);他的形参n1 n2 是怎么跟r0 r1搭上关系的,还是说,这句话就类似一个跳转语句,跳到ADD标签处执行?
...全文
57 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
guixian310 2009-04-23
  • 打赏
  • 举报
回复
gooogleman是个好孩子。。。以后多请教你,哈哈
gooogleman 2009-04-23
  • 打赏
  • 举报
回复
[Quote=引用楼主 guixian310 的帖子:]
大意是在C中调用汇编中的函数

汇编代码
IMPORT Main
EXPORT add
area init,code,readonly
entry
code32
START
b Main
add
add r0,r0,r1
mov pc,lr
end

C代码
extern unsigned int add(unsigned int x,unsigned int y);
void Main(void)
{
unsigned int n1 = 100;
unsigned int n2 = 200;
unsigned int sum=0;
sum=add(n1,n2);
}
我的问题是,在C中调用ADD函数sum=add(n1,n2);他…
[/Quote]

这是行业默认的做法,C函数参数的的前四个参数用R0~R3来传递,如果超过四个参数就用栈传递,所以有些书籍说明C语言函数最好不要多于四个参数,因为使用栈传递会降低效率。
Seven_zhangxw 2009-04-23
  • 打赏
  • 举报
回复
我的理解是硬件和编译器这么规定的,不知道对不对。。。

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧