把匯編寫在另一個(gè)文件里 在main寫個(gè)原型聲明 再把兩個(gè)文件同時(shí)編譯可不可以。
專注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)渝北免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了數(shù)千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
我的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
主函數(shù)前的原型聲明 extern int fun(int i, int j, int k);
_asm mov ax,0;
_asm{
mov ax,0
mov bx,0
}
兩種寫法都行,VC++6.0編譯通過
1、在 C 文件中要嵌入?yún)R編代碼片以如下方式加入?yún)R編代碼:
#pragma ASM
; Assembler Code Here
#pragma ENDASM
2、在 Project 窗口中包含匯編代碼的 C 文件上右鍵,選擇“Options for ...”,點(diǎn)擊右邊的“Generate Assembler SRC File”
和“Assemble SRC File”,使檢查框由灰色變成黑色(有效)狀態(tài);
3、根據(jù)選擇的編譯模式,把相應(yīng)的庫文件(如 Small 模式時(shí),是 Keil\C51\Lib\C51S.Lib)加入工程中, 該文件必須作為工程的最
后文件;
Turbo C 2.0 中,利用asm關(guān)鍵字實(shí)現(xiàn)在源程序中嵌入?yún)R編語句。
在TC2中,asm是一個(gè)關(guān)鍵字(key word)用來在程序中嵌入?yún)R編語言。使用asm關(guān)鍵字的格式為:
asm {
匯編程序語句塊
}
因?yàn)閍sm是TC2的關(guān)鍵字,所以用asm嵌入?yún)R編程序不需要特殊的頭文件。
在你的程序中,函數(shù)iowrite 和 ioread是利用嵌入?yún)R編程序?qū)崿F(xiàn)的。按常規(guī)方法向函數(shù)傳入?yún)?shù),調(diào)用,獲取返回值。也就是說,用匯編實(shí)現(xiàn)的函數(shù)與常規(guī)函數(shù)沒有什么差異。
C語言中調(diào)用匯編的方法如下:
1、用關(guān)鍵字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;
}
1、如果匯編程序是可執(zhí)行文件,比如exe文件,則可以使用system函數(shù)直接調(diào)用。比如下面的代碼,用system()打開windows上的記事本程序。
#include
#include
int main()
{
system("notepad.exe");
return 0;
}2、在C語言源碼中,可以通過內(nèi)聯(lián)匯編來直接編寫匯編程序代碼。不同的編譯器使用內(nèi)聯(lián)匯編的方法不同,vc/vs編譯器中一般使用__asm關(guān)鍵字來使用內(nèi)聯(lián)匯編,gcc編譯器一般使用asm關(guān)鍵字來使用內(nèi)聯(lián)匯編,以vc6.0為例,下面的代碼通過使用內(nèi)聯(lián)匯編來計(jì)算1+1,并將結(jié)果保存到int型變量result中。
#include
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語言調(diào)用asm匯編函數(shù) asm C語言
分享路徑:http://jinyejixie.com/article10/hpdego.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、網(wǎng)站設(shè)計(jì)公司、小程序開發(fā)、服務(wù)器托管、軟件開發(fā)、手機(jī)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)