把匯編寫(xiě)在另一個(gè)文件里 在main寫(xiě)個(gè)原型聲明 再把兩個(gè)文件同時(shí)編譯可不可以。
專(zhuān)注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)渝北免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了數(shù)千家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
我的gcc編譯器里是這樣寫(xiě)的
匯編文件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
}
兩種寫(xiě)法都行,VC++6.0編譯通過(guò)
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)的庫(kù)文件(如 Small 模式時(shí),是 Keil\C51\Lib\C51S.Lib)加入工程中, 該文件必須作為工程的最
后文件;
Turbo C 2.0 中,利用asm關(guān)鍵字實(shí)現(xiàn)在源程序中嵌入?yún)R編語(yǔ)句。
在TC2中,asm是一個(gè)關(guān)鍵字(key word)用來(lái)在程序中嵌入?yún)R編語(yǔ)言。使用asm關(guān)鍵字的格式為:
asm {
匯編程序語(yǔ)句塊
}
因?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)用,獲取返回值。也就是說(shuō),用匯編實(shí)現(xiàn)的函數(shù)與常規(guī)函數(shù)沒(méi)有什么差異。
C語(yǔ)言中調(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()打開(kāi)windows上的記事本程序。
#include
#include
int main()
{
system("notepad.exe");
return 0;
}2、在C語(yǔ)言源碼中,可以通過(guò)內(nèi)聯(lián)匯編來(lái)直接編寫(xiě)匯編程序代碼。不同的編譯器使用內(nèi)聯(lián)匯編的方法不同,vc/vs編譯器中一般使用__asm關(guān)鍵字來(lái)使用內(nèi)聯(lián)匯編,gcc編譯器一般使用asm關(guān)鍵字來(lái)使用內(nèi)聯(lián)匯編,以vc6.0為例,下面的代碼通過(guò)使用內(nèi)聯(lián)匯編來(lái)計(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;
}