匯編語(yǔ)言
1.什么是匯編語(yǔ)言[1]
匯編語(yǔ)言是指能反映指令功能的助記符表達(dá)的計(jì)算機(jī)語(yǔ)言,它是符號(hào)化的機(jī)器語(yǔ)言。用匯編語(yǔ)言寫出的程序是匯編語(yǔ)言源程序,機(jī)器無(wú)法執(zhí)行。必須用計(jì)算機(jī)配置好的匯編程序把它翻譯成機(jī)器語(yǔ)言目標(biāo)程序,機(jī)器才能執(zhí)行。這個(gè)翻譯過(guò)程就是匯編過(guò)程。匯編語(yǔ)言比機(jī)器語(yǔ)言在編寫、修改、閱讀方面均有很大改進(jìn),運(yùn)行速度也快,但掌握起來(lái)比較困難。
2.匯編語(yǔ)言的特點(diǎn)[2]
匯編語(yǔ)言采用了助記符來(lái)編寫程序,比用機(jī)器語(yǔ)言的二進(jìn)制代碼編程要方便些,在一定程度上簡(jiǎn)化了編程過(guò)程。匯編語(yǔ)言的特點(diǎn)是用符號(hào)代替了機(jī)器指令代碼,而且助記符與指令代碼一一對(duì)應(yīng),基本保留了機(jī)器語(yǔ)言的靈活性。使用匯編語(yǔ)言能面向機(jī)器并較好地發(fā)揮機(jī)器的特性,得到質(zhì)量較高的程序。
匯編語(yǔ)言是面向具體機(jī)型的,它離不開具體計(jì)算機(jī)的指令系統(tǒng),因此,對(duì)于不同型號(hào)的計(jì)算機(jī)有著不同結(jié)構(gòu)的匯編語(yǔ)言,而且,對(duì)于同一問題所編制的匯編語(yǔ)言程序在不同機(jī)型類別的計(jì)算機(jī)間是互不相通的。
匯編語(yǔ)言中使用了助記符號(hào),對(duì)于用匯編語(yǔ)言編制的程序,計(jì)算機(jī)不能像用機(jī)器語(yǔ)言編寫的程序一樣直接識(shí)別和執(zhí)行,必須經(jīng)過(guò)預(yù)先放人計(jì)算機(jī)的“匯編程序”的加工和翻譯才能變成能夠被計(jì)算機(jī)識(shí)別和處理的二進(jìn)制代碼程序。用匯編語(yǔ)言等非機(jī)器語(yǔ)言書寫的符號(hào)程序稱為源程序,運(yùn)行時(shí)匯編程序要將源程序翻譯成目標(biāo)程序。目標(biāo)程序是機(jī)器語(yǔ)言程序.它被安置在內(nèi)存的預(yù)定位置上后,就能被計(jì)算機(jī)的CPU處理和執(zhí)行。
匯編語(yǔ)言像機(jī)器指令一樣,是硬件操作的控制信息,因而仍然是面向機(jī)器的語(yǔ)言,使用起來(lái)還是比較繁瑣費(fèi)時(shí),通用性也差。但是,匯編語(yǔ)言用來(lái)編制系統(tǒng)軟件和過(guò)程控制軟件,其目標(biāo)程序占用內(nèi)存空間少,運(yùn)行速度快,有著高級(jí)語(yǔ)言不可替代的用途。
匯編語(yǔ)言指令能夠直接控制硬件,例如訪問I/O端口;而高級(jí)語(yǔ)言不提供對(duì)于硬件的控制。高級(jí)語(yǔ)言程序的效率取決于編譯器翻譯高級(jí)語(yǔ)言程序的方式,由于編譯器必須可以翻譯所有可能的高級(jí)語(yǔ)言代碼,因此在某些情況下編譯器翻譯出的機(jī)器語(yǔ)言可能不是最有效的機(jī)器語(yǔ)言。而匯編語(yǔ)言指令和機(jī)器語(yǔ)言指令是一一對(duì)應(yīng)的,因此使用匯編語(yǔ)言可以確保代碼的高效性。編寫一個(gè)完整程序可能不能體現(xiàn)匯編語(yǔ)言高效率的優(yōu)勢(shì)。若僅編寫部分程序,在執(zhí)行時(shí)常??梢垣@取較高的效率。在多數(shù)情況下,匯編語(yǔ)言程序員編寫匯編語(yǔ)言程序不是為了實(shí)現(xiàn)一個(gè)完整的系統(tǒng)或者是一個(gè)程序,而僅僅是編寫選定的模塊。例如,可以通過(guò)寫出口例程(exit routine)用戶化應(yīng)用程序或操作系統(tǒng)。為了保證與宿主語(yǔ)言程序能正常接口,常常需要用匯編語(yǔ)言編寫這樣的出口例程。
3.匯編語(yǔ)言的優(yōu)缺點(diǎn)[3]
一、匯編語(yǔ)言的優(yōu)點(diǎn)
匯編語(yǔ)言的語(yǔ)句與機(jī)器語(yǔ)言的指令是一一對(duì)應(yīng)的,因此它具有機(jī)器語(yǔ)言的一些特點(diǎn),其優(yōu)點(diǎn)如下。
(1)易于理解與記憶。
(2)能利用機(jī)器指令精確地描述算法,編程質(zhì)量高。
(3)所占存儲(chǔ)空間小。
(4)執(zhí)行速度較快。
二、匯編語(yǔ)言的缺點(diǎn)
(1)與機(jī)器語(yǔ)言一樣,程序通用性差。每一種匯編語(yǔ)言都是為某種特定類型的計(jì)算機(jī)專門設(shè)計(jì)的,不同類型計(jì)算機(jī)的匯編語(yǔ)言不能通用。
(2)匯編語(yǔ)言與機(jī)器語(yǔ)言一樣都依賴于機(jī)器,與計(jì)算機(jī)硬件直接相關(guān),也是面向機(jī)器的語(yǔ)言。
4.匯編語(yǔ)言的應(yīng)用[2]
匯編語(yǔ)言作為最基本的編程語(yǔ)言之一,雖然它的應(yīng)用范圍不算很廣,但重要性卻毋庸置疑,因?yàn)樗軌蛲瓿稍S多其他語(yǔ)言所無(wú)法完成的功能。例如Linux內(nèi)核的絕大部分代碼是用C語(yǔ)言編寫的,但仍然不可避免地在某些關(guān)鍵地方使用了匯編代碼,其中主要是在Linux的啟動(dòng)部分。由于這部分代碼與硬件的關(guān)系非常密切,即使是C語(yǔ)言也會(huì)有些力不從心,而匯編語(yǔ)言則能夠很好地?fù)P長(zhǎng)避短,最大限度地發(fā)揮硬件的性能。70%以上的系統(tǒng)軟件是用匯編語(yǔ)言編寫的。某些快速處理、位處理、訪問硬件設(shè)備等高效程序是用匯編語(yǔ)言編寫的。某些高級(jí)繪圖程序、視頻游戲程序也是用匯編語(yǔ)言編寫的。
匯編語(yǔ)言是理解整個(gè)計(jì)算機(jī)系統(tǒng)的最佳起點(diǎn)和最有效途徑.人們經(jīng)常認(rèn)為匯編語(yǔ)言的應(yīng)用范圍很小,而忽視它的重要性。其實(shí)匯編語(yǔ)言對(duì)每一個(gè)希望學(xué)習(xí)計(jì)算機(jī)科學(xué)與技術(shù)的人來(lái)說(shuō)都是非常重要的,是不能不學(xué)習(xí)的語(yǔ)言。所有可編程計(jì)算機(jī)都向人們提供機(jī)器指令,通過(guò)機(jī)器指令人們能夠使用機(jī)器的邏輯功能。所有程序,不論用何種語(yǔ)言編制,都必須轉(zhuǎn)成機(jī)器指令,運(yùn)用機(jī)器的邏輯功能,其功能才能得以實(shí)現(xiàn)。機(jī)器的邏輯功能、軟件系統(tǒng)功能構(gòu)筑其上,硬件系統(tǒng)功能運(yùn)行于下。匯編語(yǔ)言直接描述機(jī)器指令,比機(jī)器指令容易記憶和理解。通過(guò)學(xué)習(xí)和使用匯編語(yǔ)言,能夠感知、體會(huì)、理解機(jī)器的邏輯功能,向上為理解各種軟件系統(tǒng)的原理打下技術(shù)理論基礎(chǔ);向下為掌握硬件系統(tǒng)的原理打下實(shí)踐應(yīng)用基礎(chǔ)。學(xué)習(xí)匯編語(yǔ)言向上可以理解軟件,向下能夠感知硬件,是理解整個(gè)計(jì)算機(jī)系統(tǒng)的最佳起點(diǎn)。