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,一個.asm
int?__stdcall?PlusOne(int*?i)
{
return?i+1;
}
.asm
.386
.model?flat,stdcall
option?casemap:none
include?windows.inc
include?user32.inc
include?kernel32.inc
includelib?user32.lib
includelib?kernel32.lib
PlusOne?proto?a:DWORD
.data
num?dd?0x30
.code
start:
invoke?PlusOne,offset?num????;0x31?ASCII:?'1'
invoke?MessageBox,0,?offset?num,?offset?num,?MB_OK
invoke?ExitProcess,0
end?start
直接上代碼。
分別ml和cl
得到.obj目標文件,然后執行
link -subsystem:windows 兩個目標文件名
得到.exe
===========================
備注:代碼有可能編譯出錯。。。臨時寫的,未經測試
如果打開目標文件,你就會發現兩邊都有“_PlusOne@4”如果沒有,可以追問我改代碼
【滑稽】
c中調用匯編也差不多,注意調用規則要相同。
另外,匯編函數名要加下劃線“_”
別忘了采納!!!
我用的masm32
1、 參數傳遞
二、匯編程序、C程序相互調用舉例
1、 C程序調用匯編程序
匯編程序的設計要遵守ATPCS(ARM—Thumb Procedure Call Standard),保證程序調用時參數的正確傳遞。在匯編程序中使用EXPORT 偽操作聲明本程序,使得本程序可以被別的程序調用。在C程序使用extern聲明該匯編程序。
下面是一個C程序調用匯編程序的例子。其中匯編程序strcopy實現字符串復制功能,C程序調用strcopy完成字符串復制的工作。
把匯編寫在另一個文件里 在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語言中怎么調用匯編函數
本文來源:http://vcdvsql.cn/article12/ddoejgc.html
成都網站建設公司_創新互聯,為您提供網站設計、做網站、、域名注冊、移動網站建設、營銷型網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯