找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3744|回复: 0
打印 上一主题 下一主题
收起左侧

2440裸机编程之二 C语言调用汇编语言编程

[复制链接]
跳转到指定楼层
楼主
ID:68618 发表于 2014-11-12 14:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
和C调用汇编一致,前四个参数用R0-R3传递,后面的用堆栈传递
测试这个程序:
//******************************************************
//main.C
extern int test(int, int, int);
int n;
int main(void)
{
n = test(2,4,6);
while(1);
}
int add(int a, int b, int c)
{
return a+b+c;
}
//******************************************************

;****************************************************
;test.S
IMPORT add    ;引进add
EXPORT test   ;供出test

AREA test,CODE,READONLY
CODE32

STR LR,[SP],#-4    ;保存LR:入栈
BL  add            ;调用C程序
LDR LR,[SP,#4]!    ;LR出栈
MOV PC,LR          ;返回main
END
;***************************************************
过程说明:main调用n = test(2,4,6),使2、4、6分别通过R0、R1、R2传递给汇编函数test,然后test调用C程序add,R0、R1、R2分别传给a、b、c,然后求和结果用R0返回test,test又将R0返回main函数,所以最后 n = 12;
如图:

注意汇编程序中IMPORT和EXPORT的用法:
IMPORT add:进口,指add在外部文件中,当前文件要调用
EXPORT test:出口,指test在当前文件中,可以给外部文件调用
同样在C文件中,如果要调用外部文件,使用extern关键字申明函数,如:extern int test(int, int, int);
这些关键字是必须的,如果在没有使用这些关键字的情况下,调用外部函数,编译器要报错的。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表