历史上的今天
返回首页

历史上的今天

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

正在发生

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

2019-11-18 来源:51hei

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


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

推荐阅读

史海拾趣

宇阳科技(EYANG)公司的发展小趣事

多年来,宇阳科技凭借其在MLCC领域的持续创新和卓越表现,荣获了多项荣誉。从2005年被国家商务部评为企业诚信度“双A”企业,到2008年国内首创的0201超微型MLCC开发成功并量产,再到2018年获中国电子学会科学技术奖科技进步类二等奖,宇阳科技的技术实力和市场地位得到了广泛的认可。

世纪金光(CENGOL)公司的发展小趣事

自成立以来,世纪金光始终注重科研实力的积累。公司积极承担国家科研任务,已转接和直接承担国家科研任务80多项。在这些科研项目中,世纪金光取得了丰硕的成果,其中12项成果处于国内同类技术领先水平,5项成果达到国际先进水平。这些成果的取得不仅提升了公司的技术水平,也为公司在半导体领域的竞争提供了有力支撑。

汇科公司的发展小趣事

随着市场的不断发展和变化,汇科公司始终将技术创新作为发展的核心驱动力。2012年,汇科第一台球磨机节电柜研发成功,并成功申请国家专利,这标志着公司在节能环保技术领域取得了重要突破。随后,公司又成功研发了柱塞泵节电柜、新一代全智能球磨机节电柜等产品,这些产品不仅提升了公司的市场竞争力,也推动了整个电子行业的发展。

DDP Engineered LED Solutions公司的发展小趣事

DDP Engineered LED Solutions公司自创立之初,便以技术创新作为公司发展的核心动力。在公司成立的早期,研发团队深入LED照明领域,通过不断实验和改进,成功开发出了一系列高效、稳定的LED照明产品。这些产品不仅具有出色的照明效果,而且具有较长的使用寿命和较低的能耗,迅速在市场上获得了认可。随着技术的不断迭代,DDP不断推出符合市场需求的创新产品,逐渐在电子行业LED照明领域崭露头角。

佰宏(BHFUSE)公司的发展小趣事

佰宏公司始终将品质放在首位,通过严格的生产流程和质量控制体系,确保每一件产品的稳定性和可靠性。同时,公司还注重环保和可持续发展,积极采用环保材料和节能技术,努力为社会和环境做出贡献。

这五个故事只是佰宏公司发展历程中的一部分,但它们却生动地展现了佰宏公司从创立到发展的艰辛与辉煌。在未来的道路上,佰宏将继续秉承“创新、品质、合作、共赢”的理念,为电子行业的发展贡献更多的力量。

Eurohm Resistors公司的发展小趣事

随着市场的不断扩张和竞争的加剧,Eurohm Resistors始终坚持品质至上的原则。公司建立了严格的质量控制体系,从原材料采购到生产流程,再到成品检验,每一个环节都严格把关。这种对品质的坚守不仅赢得了客户的信任,也为公司赢得了良好的口碑。

问答坊 | AI 解惑

单片机键盘扫描之状态机实现

一、概述 在编写单片机程序的过程中,键盘作为一种人机接口的实现方式,是很常用的。 而一般的实现方法大概有: 1、外接键盘扫描芯片(例如8279,7279等等),然后由该芯片来完成去抖、键值读取、中断请求等功能。然后单片机响应中断并读取键值,有 ...…

查看全部问答>

DSP新手FAQ汇总(ZT)

DSP 新手FAQ汇总 1、TI DSP的选型主要考虑处理速度、功耗、程序存储器和数据存储器的容量、片内的资源,如定时器的数量、I/O口数量、中断数量、DMA通道数等。DSP的主要供应商有TI,ADI,Motorola,Lucent和Zilog等,其中TI占有最大的市场份额。 TI公 ...…

查看全部问答>

高速FPGA系统的信号完整性测试和分析

1. 引言       随着FPGA的设计速度和容量的明显增长,当前流行的FPGA芯片都提供高速总线,例如DDR内存总线,PCI-X总线、SPI总线;针对超高速的数据传输,FPGA通过集成SerDes提供高速串行IO,支持各种诸如PCI-E、GBE、XAUI等高 ...…

查看全部问答>

用软件实现让PPC的扩展卡不用ActiveSync就能变U盘的功能?

在WINDCE5.0下,用软件实现让PPC的扩展卡不用ActiveSync就能变U盘的功能?…

查看全部问答>

菜鸟问题

00H,02H这个H是什么意思?…

查看全部问答>

请问一个关于IEEE802.1Q的问题

现在的以太网芯片有支持IEEE802.1Q的吗? 我的意思就是有没有芯片硬件就能够自动识别VLAN的? 如果都不支持的话,那么是不是应该通过交换机来实现?  例如我的设备发送带有IEEE802.1Q标记的帧给交换机,然后交换机会选择匹配的VLAN端口,将数据 ...…

查看全部问答>

VHDL.Verilog实现有符号数乘法

在数字信号处理(DSP)中,乘加是最基本的运算,以至于很多FPGA厂商以MAC的多少及运算速度做为器件的一个重要指标。下面就乘法实现进行讨论。在DSP中,大多是有符合数的操作,这里给出有符号数乘法的VHDL和Verilog程序。LIBRARY ieee;USE ieee.std_ ...…

查看全部问答>

用单片机如何做串口数据转发?

我有个设备是直接和PC机通过串口连接的,我现在想做一个东西,串在这个串口线上,把PC机发给设备的数据给处理一下!   具体问题是:这个设备在通过与PC机串口通信的时候,需要手工按开关和拨换档位,我现在想用一个单片机加一些电路把这个手 ...…

查看全部问答>

谁知道STM8S103F3与207系列的是否兼容?

                                 我用207系列的程序调试的好好的。(定时器4)。但移植到F3上就是不行。看手册ST的手册那个费劲呀,都没找到详细的 ...…

查看全部问答>

求助STM8S105K6T6C不良

公司开发了一个新产品之前生产过几次基本没有发现ST芯片不良,上个月生产时发现200pcs芯片不良(这个月生产又发现12pcs不良),送给ST公司分析,分析原因为生产制程造成。我们公司生产工艺是采用红胶波峰焊,过锡炉后ST芯片pin16-32位置基本上 ...…

查看全部问答>