2523|3

73

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

初学的问题,有关变量和寄存器的关系 [复制链接]

大意是在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标签处执行?

最新回复

gooogleman是个好孩子。。。以后多请教你,哈哈  详情 回复 发表于 2009-4-23 22:45
点赞 关注

回复
举报

65

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
我的理解是硬件和编译器这么规定的,不知道对不对。。。
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
引用楼主 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);他…


这是行业默认的做法,C函数参数的的前四个参数用R0~R3来传递,如果超过四个参数就用栈传递,所以有些书籍说明C语言函数最好不要多于四个参数,因为使用栈传递会降低效率。
 
 
 

回复

50

帖子

0

TA的资源

一粒金砂(初级)

4
 
gooogleman是个好孩子。。。以后多请教你,哈哈
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表