c语言函数调用汇编 c语言函数调用汇编代码

在c语言里怎么调用汇编函数?把汇编写在另一个文件里 在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 雙
movl %esp, 雙
subl $16, %esp
movl 0x8(雙), 陎
【c语言函数调用汇编 c语言函数调用汇编代码】movl 陎, 0x4(%esp)
movl 0xc(雙), 陎
movl 陎, 0x8(%esp)
movl 0x10(雙), 陎
movl 陎, 0xc(%esp)
movl $output, 陎
movl 陎, (%esp)
call _printf
movl 雙, %esp
popl 雙
ret
.end
主函数前的原型声明 extern int fun(int i, int j, int k);
如何在C语言中调用汇编函数1、 参数传递
二、汇编程序、C程序相互调用举例
1、 C程序调用汇编程序
汇编程序c语言函数调用汇编的设计要遵守ATPCS(ARM—Thumb Procedure Call Standard),保证程序调用时参数c语言函数调用汇编的正确传递 。在汇编程序中使用EXPORT 伪操作声明本程序c语言函数调用汇编 , 使得本程序可以被别的程序调用 。在C程序使用extern声明该汇编程序 。
下面是一个C程序调用汇编程序的例子 。其中汇编程序strcopy实现字符串复制功能c语言函数调用汇编,C程序调用strcopy完成字符串复制的工作 。
******C语言中调用汇编的方法…*****C语言中调用汇编的方法如下:
1、用关键字asm嵌入 , 例如:
void
exchange(int
a,int
b);
main()
{
int
x,y;
scanf(“%d,%d”,x,y);
printf(“x=%d,y=%d”,x,y);
exchange(x,y);
printf(“x=%d,y=%d”,x,y);
}
void
exchange(int
a,int
b)
{
asm
mov
ax,a
asm
mov
bx,b
asm
mov
a,bx
asm
mov
b,ax
}
2、用_asm{
}格式
#include
stdio.h
int
main()
{
int
result;
_asm
{
mov
eax,1
mov
ebx,1
add
eax,ebx
mov
result,
eax
}
printf("1 1=%d\n",
result);
return
0;
}
如何在汇编调用c语言函数?一、 参数传递的基本规则(ATPCS(ARM—Thumb Procedure Call Standard))
1、 参数传递
二、汇编程序、C程序相互调用举例
1、 C程序调用汇编程序
汇编程序的设计要遵守ATPCS(ARM—Thumb Procedure Call Standard),保证程序调用时参数的正确传递 。在汇编程序中使用EXPORT 伪操作声明本程序,使得本程序可以被别的程序调用 。在C程序使用extern声明该汇编程序 。
下面是一个C程序调用汇编程序的例子 。其中汇编程序strcopy实现字符串复制功能 , C程序调用strcopy完成字符串复制的工作 。
//C程序
#include stdio.h
extern void strcopy(char *d,const char *s);
int main( )
{
const char *srcstr=”First string-source”;
char dststr[ ]=”Second string-destination”;
printf(“Before copying:\n”);
printf(“%s\n %s\n”, srcstr,dststr);
strcopy(dststr,srcstr);
printf(“After copying:\n”);
printf(“%s\n%s\n “,srcstr,dststr);
while(1) ;
}
;汇编程序
AREAScopy,CODE,READONLY
EXPORT strcopy
Strcopy
LDRBR2,[R1],#1
STRBR2,[R0],#1
CMPR2,#0
BNEStrcopy
MOVPC,LR
END
2、 汇编程序调用C程序
汇编程序的设计要遵守ATPCS,保证程序调用时参数的正确传递 。在汇编程序中使用IMPORT伪操作声明将要调用的C程序 。下面是一个汇编程序调用C程序的例子 。其中在汇编程序中设置好各参数的值 。本例中有6个参数,分别使用寄存器R0存放第1个参数,
R1存放第2个参数, R2存放第3个参数, R3存放第4个参数, 第5个、第6个参数利用数据栈传送 。由于利用数据栈传递参数,在程序调用结束后要调整数据栈指针 。
//C程序g()返回6个参数的和
int g( int a, int b, int c, int d, int e, int f )
{
printf(“e=%d\n”, e);
printf(“f=%d\n”, f);
return (a b c d e f);
}
; 汇编程序调用C程序 g( ) 计算6个整数 i, 2*i,3*i,4*i,5*i,6*i的和
EXPORTf
AREAf ,CODE,READONLY
IMPORTg
MOVR0, #1
ADDR1, R0, R0
ADDR2, R1, R0
ADDR3, R2, R0
ADDR4, R3, R0
ADDR5, R4, R0
STRR4, [SP,#-4]!
STRR5, [SP, #-4]!
BLg
ADDSP, SP, #4
ADDSP, SP, #4
STOPBSTOP
END
c语言函数调用汇编的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言函数调用汇编代码、c语言函数调用汇编的信息别忘了在本站进行查找喔 。

    推荐阅读