历史上的今天

今天是:2024年11月18日(星期一)

2019年11月18日 | 2440裸机编程之二 C语言调用汇编语言编程

发布者:salahc1983 来源: 51hei关键字:裸机编程  C语言调用  汇编语言  编程 手机看文章 扫描二维码
随时随地手机看文章

和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);


这些关键字是必须的,如果在没有使用这些关键字的情况下,调用外部函数,编译器要报错的。

关键字:裸机编程  C语言调用  汇编语言  编程 引用地址:2440裸机编程之二 C语言调用汇编语言编程

上一篇:malloc函数及用法
下一篇:S3C2440中断过程详解(ADS,TQ2440)

推荐阅读

下一代机器学习技术为BlackBerry技术组合提供全面补充集成后BlackBerry解决方案将成为业界首款可实现智能保护固定和移动终端的产品嵌入式人工智能技术将加速BlackBerry Spark 企业物联网平台的发展 BlackBerry今日宣布已签订最终协议,将斥资14亿美元现金以及承担未兑现的员工激励,全面收购人工智能和网络安全领军企业Cylance。该交易还需获得监管部门批...
据搜狐科技报道,新荣耀的高管名单,其中,新荣耀海外总裁为朱振东,负责把控整体海外业务,此前任华为拉美地区部总裁;海外渠道部长为王元琳,此前任职华为中东非洲渠道销售部长;MKT 部部长邹良军,负责海内外的 MKT 业务,向赵明汇报,此前为荣耀海外销售与服务部部长;GTM 部部长为黄子荣,此前是华为 GTM 部部长。而据此前消息,将会有多位华为...
“到2023年,全球5G终端的出货量将超过所有非5G终端。”终端技术论坛上,美国咨询机构SA无线通信领域高级分析师杨光预测,这将意味着,5G会成为有史以来最快成为主流技术的一代移动通信技术。而在中国,实现这样的目标或许不用到2023年。日前,中国电信市场部副总经理陆良军透露, 2021年,中国电信的年度终端接入量达2.6亿部,同比提升65%,其中包括1.6...

史海拾趣

问答坊 | AI 解惑

OnNow电源管理

凭借 Magic Packet? 技术, AMD 率先推出了网络 PC 机的电源管理功能。在此基础上, AMD 参与编写了网络设备的 OnNow 电源管理参考规范,进一步确立了在这一行业首创技术中的领先地位。 OnNow 技术为系统和设备的电源管理提供一种全面、系统范围内 ...…

查看全部问答∨

技术论坛规矩,请大家遵守

1、在自己得到了别人的帮助以后,一定在最后总结一下,请不要一声不吭的走人。 总结的内容包括:1、问题到底出在哪里。2、通过第几楼的方法解决的。 这种总结,对其他人很有用,通过看总结他们可以知道第几楼的方法是对的。 在自己的求助帖最后 ...…

查看全部问答∨

wince 5.0 sdk 支持vs2005

pb 5.0 中自带的.net compact framework是1.0的。vs2005用的是2.0的。 因此我想生成印象时将2.0的.net framework包含进去。 于是安装了WinCEPB50-071231-Product-Update-Rollup-Armv4I.msi这个补丁。 在**catalog items中的Applications and Ser ...…

查看全部问答∨

从8051单片机通过USB接口向PC读写文件

1. 请问是否可行? 2. 需要学习哪些方面的东西? 我没有做过开发,但是必须实现这个功能。只有最基本的编程能力。所用的芯片是TI的CC2531.芯片自带USB controller,例子程序里有基本的USB library,但是无法实现向PC读写文件。 谢谢。…

查看全部问答∨

位寻址与字节地址

刚刚开始接触单片机。。。对于位寻址和字节地址有点搞不明白。 位寻址区的范围不是应该在20H~2FH嘛,但是有题目是这样问的:位寻址7DH与字节地址7DH如何区别? 请大大们帮我解释一下这个题目,谢谢…

查看全部问答∨

关于用winddk及vc编写设备驱动的问题

  用DirverMonitor测试驱动程序时,出现the driver is marked as disabled如何解决…

查看全部问答∨

请教VXWORKS browser调试问题!急!

用browser调试程序!查看任务状态,室时间空中,用户任务的名字会时常变成红字,怎么回事?敬请各位英雄指教!…

查看全部问答∨

求:支持USB的单片机

请大家推荐一些对USB支持较好的单片机或模块,可以对USB外设进行控制和读写。最好是可以有足够的存储空间。…

查看全部问答∨

IAR开发lm3s全系列教程 二

IAR开发lm3s全系列教程 二 [ 本帖最后由 academic 于 2011-1-20 08:46 编辑 ]…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved