c语言在线编译器_C语言和汇编语言是什么?他们之间可以有怎样的合作?为你解析...
什么是c語言:
C語言是一門通用計(jì)算機(jī)編程語言,應(yīng)用廣泛。C語言的設(shè)計(jì)目標(biāo)是提供一種能以簡易的方式編譯、處理低級存儲(chǔ)器、產(chǎn)生少量的機(jī)器碼以及不需要任何運(yùn)行環(huán)境支持便能運(yùn)行的編程語言;盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平臺的特性,以一個(gè)標(biāo)準(zhǔn)規(guī)格寫出的C語言程序可在許多電腦平臺上進(jìn)行編譯,甚至包含一些嵌入式處理器(單片機(jī)或稱MCU)以及超級電腦等作業(yè)平臺。
什么是匯編語言:
匯編語言(assembly language)是一種用于電子計(jì)算機(jī)、微處理器、微控制器或其他可編程器件的低級語言,亦稱為符號語言。在匯編語言中,用助記符(Mnemonics)代替機(jī)器指令的操作碼,用地址符號(Symbol)或標(biāo)號(Label)代替指令或操作數(shù)的地址。在不同的設(shè)備中,匯編語言對應(yīng)著不同的機(jī)器語言指令集,通過匯編過程轉(zhuǎn)換成機(jī)器指令。普遍地說,特定的匯編語言和特定的機(jī)器語言指令集是一一對應(yīng)的,不同平臺之間不可直接移植。
許多匯編程序?yàn)槌绦蜷_發(fā)、匯編控制、輔助調(diào)試提供了額外的支持機(jī)制。有的匯編語言編程工具經(jīng)常會(huì)提供宏,它們也被稱為宏匯編器。
匯編語言不像其他大多數(shù)的程序設(shè)計(jì)語言一樣被廣泛用于程序設(shè)計(jì)。在今天的實(shí)際應(yīng)用中,它通常被應(yīng)用在底層,硬件操作和高要求的程序優(yōu)化的場合。驅(qū)動(dòng)程序、嵌入式操作系統(tǒng)和實(shí)時(shí)運(yùn)行程序都需要匯編語言。
在 C 言中怎樣使用匯編語言呢?
這個(gè)問題在不同的編譯器中,具體實(shí)現(xiàn)方法是不同的。但是在實(shí)現(xiàn)大方上也但是就是有兩種,而且各種編譯器的實(shí)現(xiàn)方法也是大同小異。一種是在 C 語言中嵌入?yún)R編語言代碼,另一種是讓 C 語言從外部調(diào)用匯編。
首先,我們看一看在 C 語言中怎樣嵌入?yún)R編語言代碼。在 C 語言中嵌入?yún)R編語言代碼,也有兩種格式,一種是單句的,一種是模塊的。 我們來看看一些簡單的例子。
例子 1 : 單句格式的:
main () {
asm mov ah,2;
asm mov bh,0;
asm mov dl, 20;
asm mov dh,10;
asm int 10h; /* 調(diào)用 BIOS 中斷配置光標(biāo)位置 */
}
模塊格式的:
main () {
asm {
mov ah,2
mov bh,0
mov dl, 20
mov dh,10
int 10h
} }
在這個(gè)小程式里面并沒有突出 “ 嵌入 ” 二字。但是從這個(gè)程式中能夠看出其基本格式。嵌入的各行代碼前面加上 asm 關(guān)鍵字或把匯編語句放入 asm 代碼塊中,每行以分號或換行符結(jié)束,而注釋必須是 C 語言格式的。
下面我們來看一個(gè)讓 C 語言和匯編協(xié)作的例子:
例子 2 :
main()
{
char const *MESSAGE=”O(jiān)utPut from asm.. \ n$”;
asm{
mov ah, 9
mov dx, MESSAGE
int 21h
}
}
上面這個(gè)例子十分的簡單,他的純 C 語言版本是:
# i nclude
main()
{
printf(“OutPut from asm.. \ n$”);
}
接下來我們看一看怎樣讓 C 語言調(diào)用匯編例程。
還是一個(gè)簡單的小程式:
C 語言部分如下:
extern cursor (int,int),
main()
{
cursor(15,12);
}
匯編語言部分如下:
.MODEL SMALL
.CODE
PUBLIC
_CURSOR PROC
PUSH BP
MOV BP,SP
MOV DH,[BP+4]
MOV DL,[BP+6]
MOV AH,02
MOV BH,00
INT 10H
POP BP
RET
_CURSOR ENDP
通過上面這個(gè)程式,您會(huì)看到調(diào)用匯編語言的關(guān)鍵就是怎樣傳遞參數(shù)。
C語言和匯編語言的優(yōu)缺點(diǎn):
以c來舉例
優(yōu)點(diǎn):
1.c的運(yùn)行效率高;
2.c可以實(shí)現(xiàn)硬件的直接訪問;
3.c代碼的移植性好;
缺點(diǎn):
1.c的代碼復(fù)用性差;
2.c的代碼維護(hù)性差;
3.c的擴(kuò)展性差,即如果想增加新功能,需要修改較多的代碼;
4.c語言的可讀性差;
至于匯編語言的優(yōu)缺點(diǎn)基本和c的優(yōu)缺點(diǎn)相反;
C和匯編的選擇:
1.若只有較簡單的邏輯操作、邏輯算法、簡單運(yùn)算,使用匯編會(huì)得到較為精準(zhǔn)的代碼,但用c也同樣可以做到。
2.若摻有復(fù)雜運(yùn)算、浮點(diǎn)運(yùn)算、非線性方程等,匯編恐怕無能為力了(最起碼難度很大)。
3.單片機(jī)種類繁多,各自的匯編語法大都不一樣,若僅使用匯編,可擴(kuò)充性、可移植性都很差,用c就會(huì)好的多。
簡單地說,很小的程序,主要是硬件簡單控制的可以用匯編,
稍微復(fù)雜一點(diǎn)尤其是牽涉到一些計(jì)算或者管理等方面的最好用c 。
而現(xiàn)在隨著技術(shù)的發(fā)展,面向程序員的高級語言比面向CPU的匯編語言好用得,在硬件條件允許的情況下,程序員當(dāng)然選擇用高級語言編程,不旦提高了編程效率,也提高了代碼的可維護(hù)性,并且十分有利于編寫大型的工程。
C語言中,程序員所定義的每一個(gè)變量,不管是基本類型(char,unsigned char,int unsigned int,short,unsigned short,long,unsigned long,double)的變量還是構(gòu)造類型(數(shù)組,struct,enum,union,鏈表等)的變量,在編譯之后都安排在了內(nèi)存中的特定存儲(chǔ)區(qū)域里面了, 每一個(gè)變量都對應(yīng)特定的內(nèi)存空間。
匯編語言中,根本就沒有變量的說法,程序員所面對的就是赤裸裸的存儲(chǔ)空間,可能是RAM,可能是EEPROM,還可能是FLASH,程序員需要自己給這些存儲(chǔ)空間命名(相對于C語言,匯編語言完全需要自己分配內(nèi)存),然后直接進(jìn)行訪問(讀操作或者寫操作)。
匯編語言是屬于低級語言,也就是一種標(biāo)記語言,標(biāo)記一段0101001等這樣的二進(jìn)制代碼。匯編語言不適合編寫大型的項(xiàng)目,編寫起來特別復(fù)雜,代碼繁瑣。現(xiàn)在主流一般不使用匯編語言開發(fā)大型程序,我們而是采用C/C++來開發(fā)軟件,匯編語言主要用來操作少量硬件等底層。而C語言是一門高級語言,現(xiàn)在主流編程語言都是由C語言所衍生而來。
更多相關(guān)資訊和干貨,關(guān)注公眾號c語言進(jìn)階之路
與編程牛人大牛在線交流,點(diǎn)擊下方【了解更多】
總結(jié)
以上是生活随笔為你收集整理的c语言在线编译器_C语言和汇编语言是什么?他们之间可以有怎样的合作?为你解析...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: gpu处理信号_GPU显卡不仅用来打游戏
- 下一篇: java代码大全_各种java技术文章汇