本程序用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程序的更多相关文章

  1. 从linux0.11中起动部分代码看汇编调用c语言函数

    上一篇分析了c语言的函数调用栈情况,知道了c语言的函数调用机制后,我们来看一下,linux0.11中起动部分的代码是如何从汇编跳入c语言函数的.在LINUX 0.11中的head.s文件中会看到如下一 ...

  2. keil or c51 汇编调用c语言函数 容易忽视的问题

    最近,在用keil 写一个小程序时,想实践一下从汇编调用 C语言函数,我们都知道C语言调用汇编函数讨论得较多,但反过来,从汇编中调用C语言的函数未见深入分析:在开始的时候,还是忽视了一个问题,就是对现 ...

  3. linux下32位汇编调用规则

    传递给系统调用的参数必须安装参数顺序一次放到寄存器中,当系统调用完成后,返回值放在eax中: 当系统调用参数<=5个时: eax中存放系统调用的功能号,传递给系统调用的参数顺序依次放到寄存器:e ...

  4. MATLAB调用C程序、调试和LDPC译码

    MATLAB是一个很好用的工具.利用MATLAB脚本进行科学计算也特别方便快捷.但是代码存在较多循环时,MATLAB运行速度极慢.如果不想放弃MATLAB中大量方便使用的库,又希望代码能迅速快捷的运行 ...

  5. 在ORACLE触发器里调用JAVA程序

    因为项目需要,有一个已经写好的Java程序,想要在Oracle某个表的触发器中调用,以使得每次数据更新时,调用这个JAVA程序,来修改后台某个数据. 现将过程记录如下: 1.编写JAVA程序 publ ...

  6. C/C++程序通过动态链接库调用MATLAB程序

    C/C++程序通过动态链接库调用MATLAB程序 1 MATLAB编译器设置 需要设定对应的C++编译器才能编译.m文件生成可供C++调用的库文件. 在MATLAB命令行输入:mex –setup:然 ...

  7. C#调用java程序

    前言: 最近跟项目组的人合作一个项目,由于之前我用的是java写的一个与android通信的程序,现在另一个同事来编写界面程序,由于C#编写起来比较方便,而我又不想重新写之前java的那段代码,于是需 ...

  8. LoadRunner调用Java程序—性能测试-转载

    LoadRunner调用Java程序—性能测试   为了充分利用LoadRunner的场景控制和分析器,帮助我们更好地控制脚本加载过程,从而展现更直观有效的场景分析图表.本次将重点讨论LoadRunn ...

  9. 直接拨号、将电话号码传入拨号程序、调用拨号程序、调用系统浏览器浏览网页、调用系统程序查看联系人、显示系统设置界面和显示Wi-Fi设置界面代码

    直接拨号.将电话号码传入拨号程序.调用拨号程序.调用系统浏览器浏览网页.调用系统程序查看联系人.显示系统设置界面和显示Wi-Fi设置界面代码 拨打号码的代码如下: Intent callIntent= ...

随机推荐

  1. matlab load

    参考文献:http://jingyan.baidu.com/article/fec4bce2257963f2618d8bfa.html 对应save,load 命令更加简单. load的方式有三种: ...

  2. 【剑指offer】顺时针打印矩阵,C++实现

    原创文章,转载请注明出处! 博客文章索引地址 1.题目 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵,则依次打印出数字1,2,3,4,8,12,16,15,14 ...

  3. [QT]给QApplication安装事件过滤器 app.installEventFilter

    Qt的事件处理有5种级别: 1.      重写控件的事件处理函数:如重写keyPressEvent(),mousePressEvent()和paintEvent(),这是最常用的事件处理方法,我们已 ...

  4. 【测试技术】websocket-client

    Websocket Client 继续上周的议题.因为我不会写go,不会写websocket客户端,导致整个测试过程我是个完美的酱油党.上周我终于把客户端服务写好了. 选择Websokcet框架 现在 ...

  5. Intro to DBSCAN

    DBSCAN Density-Based Spatial Clustering of Application with Noise It can discover cluster of arbitra ...

  6. BZOJ - 3223 Tyvj 1729 文艺平衡树 (splay/无旋treap)

    题目链接 splay: #include<bits/stdc++.h> using namespace std; typedef long long ll; ,inf=0x3f3f3f3f ...

  7. BZOJ4831: [Lydsy1704月赛]序列操作(非常nice的DP& 贪心)

    4831: [Lydsy1704月赛]序列操作 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 250  Solved: 93[Submit][Statu ...

  8. biginteger转Long

    pjProDocumentFolderTreeNodeBySeqnoDTO.setFolderId(((java.math.BigInteger) objects[0]).longValue()); ...

  9. pipeline的存储代码

    在spider中最后一个函数返回item时会scrapy会调用pipeline里面的 process_item(self, item, spider):函数并传入item,spider等参数在这里可以 ...

  10. 【spring源码学习】spring集成orm数据框架

    [一]简易的数据源配置 (1)配置文件 <!--springJdbcTemplemate数据操作配置信息 --> <bean id="driver" class= ...