汇编调用C程序
本程序用keil5实现。
keil4会将C程序的地址设为0x00000000,即一开始就运行C程序了,参数都还没设置好。这个错误我也没深究,因为我自己装的是keil5.
首先需要在汇编代码中给C程序指定参数。如果函数需要4个及4个以下的参数的话,那么把我们需要的参数分别赋值在R0~R3这4个寄存器中即可。
如果多于4个参数,那么既要在堆栈中放入参数了。
设定好sp即堆栈指针的地址,c函数会在该堆栈中取第4个以后的参数。
调用C函数时,C文件不需要声明什么,就是普通的C即可。而汇编要在前面IMPORT 函数名
C语言代码:
int SUM(int result,int a,int b,int c,int d,int e,int f){
return result = a+b+c+d+e+f;
}
汇编代码:
AREA EXAMPLE,CODE,READONLY
IMPORT SUM
PRESERVE8
ENTRY ARM
MOV R0,#;result
MOV R1,#;a
MOV R2,#;b
MOV R3,#;c LDR SP,=0X40001000
MOV R4,#;d
MOV R5,#;e
MOV R6,#;f STMFD SP!,{R4,R5,R6}; BL SUM;调用C END
汇编调用C程序的更多相关文章
- 从linux0.11中起动部分代码看汇编调用c语言函数
上一篇分析了c语言的函数调用栈情况,知道了c语言的函数调用机制后,我们来看一下,linux0.11中起动部分的代码是如何从汇编跳入c语言函数的.在LINUX 0.11中的head.s文件中会看到如下一 ...
- keil or c51 汇编调用c语言函数 容易忽视的问题
最近,在用keil 写一个小程序时,想实践一下从汇编调用 C语言函数,我们都知道C语言调用汇编函数讨论得较多,但反过来,从汇编中调用C语言的函数未见深入分析:在开始的时候,还是忽视了一个问题,就是对现 ...
- linux下32位汇编调用规则
传递给系统调用的参数必须安装参数顺序一次放到寄存器中,当系统调用完成后,返回值放在eax中: 当系统调用参数<=5个时: eax中存放系统调用的功能号,传递给系统调用的参数顺序依次放到寄存器:e ...
- MATLAB调用C程序、调试和LDPC译码
MATLAB是一个很好用的工具.利用MATLAB脚本进行科学计算也特别方便快捷.但是代码存在较多循环时,MATLAB运行速度极慢.如果不想放弃MATLAB中大量方便使用的库,又希望代码能迅速快捷的运行 ...
- 在ORACLE触发器里调用JAVA程序
因为项目需要,有一个已经写好的Java程序,想要在Oracle某个表的触发器中调用,以使得每次数据更新时,调用这个JAVA程序,来修改后台某个数据. 现将过程记录如下: 1.编写JAVA程序 publ ...
- C/C++程序通过动态链接库调用MATLAB程序
C/C++程序通过动态链接库调用MATLAB程序 1 MATLAB编译器设置 需要设定对应的C++编译器才能编译.m文件生成可供C++调用的库文件. 在MATLAB命令行输入:mex –setup:然 ...
- C#调用java程序
前言: 最近跟项目组的人合作一个项目,由于之前我用的是java写的一个与android通信的程序,现在另一个同事来编写界面程序,由于C#编写起来比较方便,而我又不想重新写之前java的那段代码,于是需 ...
- LoadRunner调用Java程序—性能测试-转载
LoadRunner调用Java程序—性能测试 为了充分利用LoadRunner的场景控制和分析器,帮助我们更好地控制脚本加载过程,从而展现更直观有效的场景分析图表.本次将重点讨论LoadRunn ...
- 直接拨号、将电话号码传入拨号程序、调用拨号程序、调用系统浏览器浏览网页、调用系统程序查看联系人、显示系统设置界面和显示Wi-Fi设置界面代码
直接拨号.将电话号码传入拨号程序.调用拨号程序.调用系统浏览器浏览网页.调用系统程序查看联系人.显示系统设置界面和显示Wi-Fi设置界面代码 拨打号码的代码如下: Intent callIntent= ...
随机推荐
- 正确的使用margin:0 auto与body{text-align:center;}实现元素居中(转)
body{text-align:center}与margin:0 auto的异同? text-align是用于设置或对象中文本的对齐方式.一般情况下我们设置文本对齐方式的时候需要用此属性进行设置 我们 ...
- linux 下 Linux 下char转换为wchar_t 设置本地为utf-8编码 以及wchar 的输入输出
LInux下使用mbstowcs函数可以将char转化为wchar_t函数含义:convert a multibyte string to a wide char string说明: Th ...
- dom4j 改变XML声明和编码格式
dom4j 改变XML编码 Element rootElement = document.addElement("data"); document.setXMLEncoding(& ...
- Android:数据持久化(1/2)文件、SharedPreferences
Summary 持久化的3种方法: 普通文件:I/O流操作文件: SharedPreferences:XML文件,通过key-value pair的形式存储数据: SQLite:Android自带数据 ...
- Jmeter-BeanShell Sampler调用java代码
1.添加BeanShell Sampler 2.编写BeanShell Sampler代码 3.引用参数 ${id}
- BZOJ4832: [Lydsy1704月赛]抵制克苏恩(记忆化&期望)
Description 小Q同学现在沉迷炉石传说不能自拔.他发现一张名为克苏恩的牌很不公平.如果你不玩炉石传说,不必担心,小Q 同学会告诉你所有相关的细节.炉石传说是这样的一个游戏,每个玩家拥有一个 ...
- HDU1496 Equations 卡时间第二题
Consider equations having the following form: a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 a, b, c, d are integers ...
- JSP学习(二)JSP指令
JSP指令 JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分. JSP指令的基本语法格式:<%@ 指令 属性名= ...
- iOS设备是否越狱的判断代码
苹果是非常看重产品的安全性的,所以给用户设计了一套复杂的安全机制.这让喜爱自由,崇尚一切开放的程序员们极度不爽,于是越狱就成了苹果和黑客们反复斗法的场所.总体来说,越狱可以让我们随意安装.共享应用,但 ...
- 【知识笔记】VS调试问题
一.无法在web服务器上启动调试,您没有调试web服务器进程的权限,您需要以web服务器的用户账户身份运行,或者具有管理员权限. 现象:手动修改网站项目的启动端口号,调试报错 原因:从Windows ...