从品牌网站建设到网络营销策划,从策略到执行的一站式服务
c51 汇编调用c函数:一般都是C调用汇编的,倒是反过来了,在C函数中,如果要严格时序或者精确操作的要求,某一段会用汇编来写,不管是C调用汇编,还是汇编调用C。
创新互联公司 - 德阳机房服务器托管,四川服务器租用,成都服务器租用,四川网通托管,绵阳服务器托管,德阳服务器托管,遂宁服务器托管,绵阳服务器托管,四川云主机,成都云主机,西南云主机,德阳机房服务器托管,西南服务器托管,四川/成都大带宽,服务器机柜,四川老牌IDC服务商
我的程序KEIL编译器,EXTRN CODE(_Send_CRC)的第一个国家Send_CRC C函数编译加上调用_LCALL _Send_CRC如果您要成相应的数据,然后使用变量在C,XDATA代码。
一般形式:
函数名(实参表列);如果是调用无参函数,则"实参表列"可以没有,但括弧不能省略。如果实参表列包含多个实参,则个参数间用逗号隔开。实参与形参的个数应相等,类型应一致。
实参与形参按顺序对应,一一传递数据。但应说明,如果实参表列包括多个实参,对实参求值的顺序并不是确定的,有的系统按自左至右顺序求实参的值,有的系统则按自右至左顺序
把汇编写在另一个文件里 在main写个原型声明 再把两个文件同时编译可不可以。
我的gcc编译器里是这样写的
汇编文件m.s
.file "stdio.h"
#hellowrold.s print "hello,world!"
.section .data
output:
.ascii "%d %d %d\0"
.section .text
.globl _fun
_fun:
pushl %ebp
movl %esp, %ebp
subl $16, %esp
movl 0x8(%ebp), %eax
movl %eax, 0x4(%esp)
movl 0xc(%ebp), %eax
movl %eax, 0x8(%esp)
movl 0x10(%ebp), %eax
movl %eax, 0xc(%esp)
movl $output, %eax
movl %eax, (%esp)
call _printf
movl %ebp, %esp
popl %ebp
ret
.end
主函数前的原型声明 extern int fun(int i, int j, int k);
如果keil5的话,在汇编内调用c语言的变量,可以
IMPORT (变量名)
LDR r0, =(变量名) //获得该变量地址到r0
LDR r0,[r0] //将r0其值作为地址,获取其地址指向的值
这样c中变量的值就传递到r0了
成都网站建设公司地址:成都市青羊区太升南路288号锦天国际A座10层 建设咨询028-86922220
成都快上网科技有限公司-四川网站建设设计公司 | 蜀ICP备19037934号 Copyright 2020,ALL Rights Reserved cdkjz.cn | 成都网站建设 | © Copyright 2020版权所有.
专家团队为您提供成都网站建设,成都网站设计,成都品牌网站设计,成都营销型网站制作等服务,成都建网站就找快上网! | 成都网站建设哪家好? | 网站建设地图