本文目錄一覽:
- 1、在c語言里怎麼調用彙編函數?
- 2、一個彙編函數在C語言怎麼寫
- 3、彙編語言過程調用與C語言函數調用的異同
- 4、彙編的一個標號是不是等於一個c語言函數?
- 5、c語言中一個函數需要用彙編實現,該怎麼實現
- 6、如何在彙編調用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 %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);
一個彙編函數在C語言怎麼寫
根據不同的c語言編譯器實現
可以內嵌彙編語言。
例:
gcc的內嵌語法是:
asm(“mov
ecx,
eax”);
不同的c語言編譯器的實現不一樣
彙編語言過程調用與C語言函數調用的異同
彙編語言的過程調用是直接跳轉到相應的函數,參數需要自己填寫並壓棧或者用寄存器傳參。
C語言關於傳參和返回這部分,由編譯器替程序員完成了。
不明白可以追問,望採納。
彙編的一個標號是不是等於一個c語言函數?
彙編的一個標號,只是一個符號地址,不能等同於c語言函數。
它可以是一個變數的地址,也可以是一條指令的地址,在彙編語言中 也可以是一個子程序的入口即首地址,這時很容易把它和彙編子程序或c語言函數弄混。
如: CALL SUM ;調用子程序SUM 彙編語言 是按子程序首地址來調用的
;SUM只是子程序的首地址(或看作是子程序的名)
;而不能理解為該子程序的本身和全部
而子程序不是標號,必須要定義一個過程。
c語言中一個函數需要用彙編實現,該怎麼實現
根據不同的C語言編譯器實現
可以內嵌彙編語言。
例:
GCC的內嵌語法是:
asm(“mov ecx, eax”);
不同的C語言編譯器的實現不一樣
如何在彙編調用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) ;
}
;彙編程序
AREA Scopy, CODE, READONLY
EXPORT strcopy
Strcopy
LDRB R2, [R1], #1
STRB R2, [R0], #1
CMPR2,#0
BNE Strcopy
MOV PC, 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的和
EXPORT f
AREA f ,CODE, READONLY
IMPORT g
MOV R0, #1
ADD R1, R0, R0
ADD R2, R1, R0
ADD R3, R2, R0
ADD R4, R3, R0
ADD R5, R4, R0
STR R4, [SP, #-4]!
STR R5, [SP, #-4]!
BL g
ADD SP, SP, #4
ADD SP, SP, #4
STOP B STOP
END
原創文章,作者:FZDZ,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/141284.html