C语言中如何调用汇编子程序?给个例子讲解下

C语言中如何调用汇编子程序?给个例子讲解下,第1张

你是指内联汇编吧?比如下面这个例子:

#include <stdio.h>

int func(int a, int b)

{

 return a - b

}

int main()

{

 //计算 12-5

 int a = 12, b = 5  //给定两个数

 int res    //用来记录结果

 __asm{     //内联汇编

  push b    //b压栈

  push a    //a压栈,注意C中函数接受参数的时候入栈是反着的

  call func   //调用函数func, 返回值保存在eax里

  mov res, eax  //将eax里的值赋给res

 }

 printf("%d\n", res) //输出结果,得到7

 return 0

}

.global _C函数名

然后在汇编里面

BL _C函数名

注意调用的前.设置好堆栈就好了.

当然..如果C函数是单独一个文件的话,,还是需要编译这个文件,

并加入链接里面,如果写在其他文件里面的.makefile里面不需要额外的东西

范例汇编文件.调用C文件的..mycmp函数

xxxx.asm

.global _mycmp

BL _mycmp

yyyyy.c

void mycmp(void)

{}

汇编中:

EXPORT MMU_EnableICache

MMU_EnableICache

mrc p15,0,r0,c1,c0,0

orr r0,r0,#R1_I

mcr p15,0,r0,c1,c0,0

MOV_PC_LR

然后C中调用 MMU_EnableICache()

调用汇编则更简单,

unsigned int UserAppPTR = 0x00081040//设置成汇编入口的绝对地址。

void (*UserAPP)(void)

UserAPP = (void (*)(void))UserAppPTR

UserAPP()

恩,一般来说在C中调用汇编比较常见,而且是非必要才用


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7856846.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-10
下一篇2023-04-10

发表评论

登录后才能评论

评论列表(0条)

    保存