當前位置:首頁 » 編程語言 » 怎麼在c語言中用匯編
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

怎麼在c語言中用匯編

發布時間: 2022-03-06 20:17:03

⑴ 在C51單片機中如何在c語言中加入匯編程序


C
文件中要嵌入匯編代碼片以如下方式加入匯編代碼:
#pragma

ASM
;
Assembler

Code
Here
#pragma
ENDASM
其他參考
http://hi..com/layueyi/blog/item/e2cadaca1591e944f21fe7f3.html

⑵ C語言中怎樣用匯編語言

_asm{
//你的匯編代碼
}

⑶ 怎麼在c語言程序中調用匯編宏定義

內聯匯編:_asm { mov eax, xxxx }

⑷ 如何把匯編程序嵌入到C語言中

不同編譯器嵌入匯編的方式不一樣,具體如下:
一、Turbo
C ,
也就是所說的TC。
1、使用預處理程序的偽指令#asm和#endasm,#asm用來開始一個匯編程序塊,而#endasm指令用於該塊的結束。
參考代碼:
int mul(int a, int b)
{
/*匯編開始*/
#asm
mov ax,word ptr 8[bp]
imul ax word ptr 10[bp]
#endasm
/*匯編結束。*/
}
2、使用asm語句:
格式:asm<匯編語句>
參考代碼:
int mul(int a, int b)
{
asm mov ax,word ptr 8[bp]
asm imul ax word ptr 10[bp]
/*
每個asm對應一句匯編
注意結尾不需要分號
*/
}
二、VC++/VS
格式:
__asm
匯編指令
[
;
]
__asm
{
匯編指令
}
[
;
]
asm前面是兩條下劃線,後面的方括弧內容表示分號可有可無。
使用方法:
1、一條一條地用:
__asm mov al, 2
__asm mov dx, 0xD007
__asm out dx, al
每行一條匯編,
可以有分號,也可以沒有。
2、組成一塊地用:
__asm {
mov al, 2
mov dx, 0xD007
out dx, al
}
整體作為一個匯編代碼塊。
3、也可以將多條匯編寫在一行:
__asm mov al, 2 __asm mov dx, 0xD007 __asm out dx, al
三、GNU
GCC
GCC對匯編的支持是最豐富的,簡單介紹如下:
1、
用到的關鍵字:
「__asm__」
表示後面的代碼為內嵌匯編,「asm」是「__asm__」的別名。
「__volatile__」 表示編譯器不要優化代碼,後面的指令保留原樣,「volatile」是它的別名。
括弧裡面是匯編指令。
內嵌匯編語法如下:
__asm__(
匯編語句模板:
輸出部分:
輸入部分:
破壞描述部分)
一個簡單的匯編模板:
int a=10,b;
asm("movl %1, %%eax;
movl %%eax, %0;"
:"=r"(b) /*輸出部*/
:"r"(a) /*輸入部*/
:"%eax" /*毀壞部*/
);
表示C語言里的「b=a;」。
里邊r表示使用任意寄存器,%0、%1表示使用兩個寄存器,一般只能%0~%9共十個操作數,按輸入輸出部變數出現順序進行映射。
寄存器用兩個百分號,是因為使用了%0%1這些數字使百分號有了特殊意義,所以在操作數出現的寄存器必須用雙百分表示。
毀壞部里邊的%eax表示eax寄存器在匯編代碼塊執行過程中會被改寫,在執行前要保護好,這是提交給編譯器決定的。

⑸ 在匯編語言中怎麼加入C語言

分等級,c語言中可以嵌入匯編,但是匯編不能嵌入c語言,其實在c語言中的文件庫里已經對匯編語言的各種語言段進行定義了,但是用的時候要先進行相應庫的調用。
如樓上,對於定時來說,還是匯編語言准確的,這個要按需求來的,有的時候c語言中加入匯編,不僅方便,而且更容易修改,但是在碰到一些有浮點數的處理時,就不得不用c語言了

⑹ 如何在C語言中調用匯編指令序列

使用下面的方式即可:
asm //asm關鍵字指示編譯器下面的段是匯編代碼
{

//你需要寫的匯編代碼寫在這里即可

}

⑺ 單片機中c語言中如何加入匯編

1、在 C 文件中要嵌入匯編代碼片以如下方式加入匯編代碼:

2、在 Project 窗口中包含匯編代碼的 C 文件上右鍵,選擇「Options for ...」,點擊右邊的「Generate Assembler SRC File」
和「Assemble SRC File」,使檢查框由灰色變成黑色(有效)狀態;

3、根據選擇的編譯模式,把相應的庫文件(如 Small 模式時,是 Keil\C51\Lib\C51S.Lib)加入工程中, 該文件必須作為工程的最
後文件;

4、編譯,即可生成目標代碼。

⑻ 如何在c語言中嵌入匯編語言

__asm
{
//匯編語言
}

⑼ c語言中如何調用匯編程序

匯編語言的基本格式為: PUBLIC _FOUND _TEXT SEGMENT BYTE PUBLIC 'CODE'ASSUME CS: _TEXT _FOUND PROC NEARPUSH BPMOV BP,SPMOV CX,[BP+4]DEC CXMOV SI,[BP+10]LODSWMOV DX,1 MOV BX,0 COMP: CMP AX,[SI]JA BIGGERMOV AX,[SI]MOV BX,DXBIGGER: INC SIINC SIINC DXLOOP COMPMOV DI,[BP+6] MOV [DI],AX MOV DI,[BP+8] MOV [DI],BXPOP BPRET_FOUND ENDP_TEXT ENDSEND為了看得更清楚,我們把代碼去掉,留下基本框架: PUBLIC _FOUND _TEXT SEGMENT BYTE PUBLIC 'CODE'ASSUME CS: _TEXT _FOUND PROC NEARPUSH BPMOV BP,SP ......... ;從這里開始加入匯編代碼 POP BPRET_FOUND ENDP_TEXT ENDSEND這是在samll(小模式)下的匯編語言介面框架,在加入代碼處,寫上你所要完成一定功能的匯編代碼,就成為一個可供TC調用的匯編模塊。 可以看出,代碼段是以帶下劃線的標識符開頭的。 代碼段的標識為_TEXT,由C程序中調用的函數found在這里也是以下劃線標出:_FOUND。 下面是代碼段的組成: _TEXT SEGMENT BYTE PUBLIC 'CODE' _TEXT ENDS下面是函數的組成: _FOUND PROC NEAR _FOUND ENDP 在small(小模式下,只要按照以上的格式書寫匯編代碼,就一定能成功地被C程序調用。 這個格式是TC編譯程序所定好了的,如果不按照這個格式書寫匯編代碼,調用就不會成功。

⑽ ******C語言中調用匯編的方法…*****

匯編語言沒有高級語言要佔用較大的存儲空間和較長的運行時間等缺點,它的運行速度快是高級語言所不能比擬的。可以說高級語言與匯編語言各有千秋。有時我們採用高級語言編程速度達不到要求,全部採用匯編語言編程工作量又大,此時可以採用"混合"編程,彼此相互調用,進行參數傳遞,共享數據結構及數據信息,是一種有效的編程方法。這種方法可以發揮各種語言的優勢和特點,充分利用現有的多種實用程序、庫程序等使軟體的開發周期大大縮短。
1 高級語言與匯編語言的介面需要解決的問題
1、需要說明和建立調用者與被調用者間的關系被調用的過程或函數應預先說明為外部類型,如匯編子程序,應用PUBLIC說明其可被外部模塊引用;調用程序則應預先說明要引用的外部模塊名。
2、參數傳遞問題在匯編子程序之間通常採用寄存器作為參數傳遞的工具,匯編語言與高級語言程序間的參數傳遞,一般採用堆棧來傳遞,即調用程序將參數依次壓入堆棧中,當被轉調用程序後,再從堆棧中依次彈出參數作為操作數使用。為此,必須了解各種語言的堆棧結構、生成方式和入棧方式等。BASIC、FORTRAN、PASCAL等語言其參數進棧順序是與參數在參數表中出現的順序相同,即從右到左;而C語言則相反。
2 C語言與匯編語言的介面
2.1 C語言調用匯編子程序
●在C程序中使用關鍵字"ExTERn"對函數作顯式說明。
●參數傳遞順序是按其在參數表中出現的順序的反序被壓入堆棧中,即第一個參數最後進入堆棧,它在棧中的地址最低。
●對不同的存儲模式(極小、小、緊湊、中、大和巨)要選用不同的匯編語言格式,如C程序為小模式,匯編用近過程,C程序為大模式,匯編用遠過程。
●匯編程序取C的參數。遠過程返回地址佔四個位元組,BP壓入佔二位元組,所以第一個參數在BP+6所指向的單元。對於近過程第一個參數在BP+4所指向的單元。
●匯編程序中寄存器的保護。TuRboC允許子過程使用SI和DI存放局部變數,當寄存器變數多於二個時,多餘部分會自動轉到堆棧中存儲。因此,匯編過程的格式為:
PUSH BP
MOV BP,SP
PUSH DI
PUSH SI�
……….
語 句�
………….
POP SI
POP DI
POP BP
RET
●返回值。每種C數據類型都有一個標準的返回位置,一般在AX中(極小、小、中模式),DX:AX(緊湊、大、巨模式),如:chaR,unSignEdchaR,Enum,ShoRTinT等,返回值位置為AX,且返回數據必須放置在RET指令之前。匯編子程序要定義為遠過程,並用PUBLIC偽指令把過程名定義為公共。例
:#includE〃STdio.h〃
#includE〃STdlib.h〃
chaRMESSagE[]=〃MESSagE〃;
inTfaRREVSTR(chaRfaR STR);
Voidmain(Void)
{ REVSTR((chaRfaR )MESSagE);
printf(〃%S〃,MESSagE);
}
REVSTR.asm

PUBLIC-REVSTR-
REVSTR PROC
PUSH BP
MOVBP,SP
PUSH DS
PUSH SI
PUSH DI

POP SI
POP AX
MOV DS,AX
POP BP
MOV AX,CX
RET
REVSTR ENDP
END
2.2 C語言嵌入匯編
在C程序中允許直接編寫匯編語言代碼,這稱作嵌入匯編。C程序中嵌入匯編後可以無分號(C語言的語句以分號結束,匯編語句是C語言中唯一以換行結束的語句),以關鍵詞ASM張一個嵌入匯編指令,如需多個ASM語句,可以將它們放在花括弧內。如,
ASMMOVAX,DX/ 注釋 /
ASM
PUSHAX}/ 注釋 /
C語言允許嵌入四類匯編命令:一般指令、串指令、跳轉指令、數據分配和定義指令,嵌入匯編比調用匯編子程序更方便、靈活、功能也更強。但嵌入匯編不是一個完整的匯編程序,所以許多錯誤不能馬上檢查出來。
3 結 束 語
採用兩種或兩種以上的編程語言組合編程,彼此相互調用,進行參數傳遞,是一種有效的程序設計方法。這種方法可以充分發揮各種語言的優勢,充分利用現有的實用程序,是當前程序介面技術的一個重要研究和應用領域

WIN-TC使用TC2內核
所以嵌入匯編得用TC2的語法:

方法是使用asm關鍵字:其格式是:
asm opcode <operands> <;newline>

例如:
main()
{
char *c="hello,world\n\r$";
asm mov ah,9
asm mov dx,c
asm int 33
printf("You sucessed!");
}

/*************** C內嵌匯編示例 ***************/
#include "stdio.h"
#include "conio.h"
int min(int v1,int v2)
{asm mov ax,v1;
asm cmp ax,v2;
asm jle minexit;
asm mov ax,v2;
minexit:
return(_AX);
}

main()
{printf("min(10,3) is %d\nmin(34,552) is %d",min(10,3),min(34,552));
getch();
}