官术网_书友最值得收藏!

1.2.4 程序設(shè)計語言

利用計算機(jī)解決實(shí)際問題,一般要編寫程序。程序設(shè)計語言就是程序員用來編寫程序的語言,它是人與計算機(jī)之間交流的工具。程序設(shè)計語言可以分為機(jī)器語言、匯編語言和高級語言三種。

1.機(jī)器語言

計算機(jī)能夠直接識別由二進(jìn)制數(shù)0和1組成的代碼。機(jī)器指令(Instruction)就是用二進(jìn)制編碼的指令,指令是控制計算機(jī)操作的命令,是處理器不需要翻譯就能識別(直接執(zhí)行)的“母語”,通常一條機(jī)器指令控制計算機(jī)完成一個操作。每種處理器都有各自的機(jī)器指令,某處理器支持的所有指令的集合就是該處理器的指令集(Instruction Set)或指令系統(tǒng)。指令集及使用它們編寫程序的規(guī)則稱為機(jī)器語言(Machine Language)。

用機(jī)器語言編寫的程序是計算機(jī)唯一能夠直接識別和執(zhí)行的程序,而用其他語言編寫的程序必須翻譯、變換成機(jī)器語言程序,所以,機(jī)器語言程序常稱為目標(biāo)程序(或目的程序)。

例如,完成兩個數(shù)據(jù)100和256相加的功能,在IA-32處理器的代碼序列如下:

幾乎沒有人能夠直接讀懂該程序段的功能,因為機(jī)器語言就是看起來毫無意義的一串代碼。用機(jī)器語言編寫程序的最大缺點(diǎn)是難以理解,因而極易出錯,也難以發(fā)現(xiàn)錯誤。所以,只在計算機(jī)發(fā)展的早期或不得已的情況下才用機(jī)器語言編寫程序。現(xiàn)在,除了有時在程序某處需要直接采用機(jī)器指令填充外,幾乎沒有人采用機(jī)器語言編寫程序了。

2.匯編語言

為了克服機(jī)器語言的缺點(diǎn),人們采用便于記憶并能描述指令功能的符號來表示機(jī)器指令。表示指令功能的符號稱為指令助記符,簡稱助記符。助記符一般是表明指令功能的英語單詞或其縮寫。指令操作數(shù)同樣也可以用易于記憶的符號表示。用助記符表示的指令就是匯編格式指令。匯編格式指令以及使用它們編寫程序的規(guī)則就形成匯編語言(Assembly Language)。用匯編語言書寫的程序就是匯編語言程序,或稱匯編語言源程序。

例如,實(shí)現(xiàn)100與256相加的MASM匯編語言程序片段如下:

第一條指令的功能將數(shù)據(jù)100傳送給名為EAX的寄存器,MOV是傳送指令的助記符,它對應(yīng)的機(jī)器代碼就是上述機(jī)器語言例子中的第一個二進(jìn)制串(用十六進(jìn)制表示為B8 64 00 00 00)。

第二條指令實(shí)現(xiàn)加法操作,ADD是加法指令的助記符,它對應(yīng)上述機(jī)器語言例子中的第二個二進(jìn)制串(用十六進(jìn)制表示為05 00 01 00 00)。

因此,我們熟悉了有關(guān)助記符及對應(yīng)指令的功能,就可以讀懂上述程序片段。

匯編語言是一種符號語言,它用助記符表示操作碼,比機(jī)器語言容易理解和掌握,也容易調(diào)試和維護(hù)。但是,匯編語言源程序要翻譯成機(jī)器語言程序才可以由處理器執(zhí)行,這個翻譯的過程稱為“匯編”,完成匯編工作的程序就是匯編程序(Assembler)。

3.高級語言

匯編語言雖然較機(jī)器語言直觀一些,但仍然煩瑣難記。于是在20世紀(jì)50年代出現(xiàn)了高級程序設(shè)計語言。高級語言比較接近人類自然語言的語法習(xí)慣及數(shù)學(xué)表達(dá)形式,它與具體的計算機(jī)硬件無關(guān),更容易被廣大計算機(jī)工作者掌握和使用。利用高級語言,即使一般的計算機(jī)用戶也可以編寫軟件,而不必懂得計算機(jī)的結(jié)構(gòu)和工作原理。

目前,計算機(jī)高級語言已有上百種,得到廣泛應(yīng)用的有十幾種,每種高級語言都有其最適用的領(lǐng)域。用任何一種高級語言編寫的程序都要通過編譯程序(Compiler)翻譯成機(jī)器語言程序(稱為目標(biāo)程序)后計算機(jī)才能執(zhí)行,或者通過解釋程序邊解釋邊執(zhí)行。

例如,用高級語言表達(dá)100與256相加,就可以使用數(shù)學(xué)表達(dá)形式:100+256。

4.學(xué)習(xí)匯編語言程序設(shè)計的意義

高級語言簡單、易學(xué),而匯編語言復(fù)雜、難懂,是否就沒有必要再使用匯編語言了呢?下面我們首先比較匯編語言和高級語言的特點(diǎn)。

● 匯編語言與處理器密切相關(guān)。每種處理器都有自己的指令系統(tǒng),相應(yīng)的匯編語言各不相同。所以,匯編語言程序的通用性、可移植性較差。相對來說,高級語言與具體的計算機(jī)無關(guān),高級語言程序可以在多種計算機(jī)上編譯后執(zhí)行。

● 匯編語言功能有限,又涉及寄存器、主存單元等硬件細(xì)節(jié),所以使用匯編語言編寫程序比較煩瑣,匯編程序調(diào)試起來也比較困難。高級語言提供了強(qiáng)大的功能,它不關(guān)心標(biāo)志、堆棧等瑣碎問題,采用類似自然語言的語法,所以易于掌握和應(yīng)用。

● 匯編語言本質(zhì)上就是機(jī)器語言,它可以直接、有效地控制計算機(jī)硬件,因而容易產(chǎn)生運(yùn)行速度快、指令序列短小的高效率目標(biāo)程序。高級語言不易直接控制計算機(jī)的各種操作,編譯程序產(chǎn)生的目標(biāo)程序往往比較龐大、難以優(yōu)化,所以運(yùn)行速度較慢。

通過對比可見,高級語言的優(yōu)勢明顯。很自然,人們稱機(jī)器語言和匯編語言為低級語言。但事實(shí)上,稱匯編語言為低層語言更合適。這是因為程序設(shè)計語言是按照計算機(jī)系統(tǒng)的層次結(jié)構(gòu)區(qū)分的,本沒有“高低貴賤”之分,只是某種語言更適合某種應(yīng)用層面(或場合)。我們看到,匯編語言便于直接控制計算機(jī)硬件電路,可以編寫在“時間”和“空間”兩方面最有效,即執(zhí)行速度快和目標(biāo)代碼小的程序。這些優(yōu)點(diǎn)使匯編語言在程序設(shè)計中占有重要的地位,是不可取代的。

匯編語言主要有如下應(yīng)用場合。

● 程序要具有較快的執(zhí)行時間,或者只能占用較小的存儲容量。例如,操作系統(tǒng)的核心程序段、實(shí)時控制系統(tǒng)的軟件、智能儀器/儀表的控制程序等。

● 程序與計算機(jī)硬件密切相關(guān),要直接、有效地控制硬件。例如,I/O接口電路的初始化程序段、外部設(shè)備的低層驅(qū)動程序等。

● 大型軟件需要提高性能、優(yōu)化處理的部分。例如,計算機(jī)系統(tǒng)頻繁調(diào)用的子程序、動態(tài)連接庫等。

● 沒有合適的高級語言或只能采用匯編語言時。例如,開發(fā)最新的處理器程序時,暫時沒有支持新指令的編譯程序。

● 匯編語言還有許多實(shí)際應(yīng)用,例如,分析具體系統(tǒng)尤其是該系統(tǒng)的低層軟件、加密/解密軟件、分析和防治計算機(jī)病毒等。

當(dāng)然,無法回避的事實(shí)是,隨著各種編程技術(shù)的發(fā)展,單獨(dú)使用匯編語言開發(fā)程序尤其是應(yīng)用程序的情況越來越少。所以,在實(shí)際的程序開發(fā)過程中,可以采用高級語言和匯編語言混合編程的方法,互相取長補(bǔ)短,更好地解決實(shí)際問題。

另外,編寫匯編語言程序,需要使用處理器指令解決應(yīng)用問題,而指令只是完成諸如將一個數(shù)據(jù)從存儲器傳送到寄存器、對兩個寄存器值求和、指針增量指向下一個地址等簡單的功能。所以,從教學(xué)角度來說,匯編語言程序員在將復(fù)雜的應(yīng)用問題轉(zhuǎn)換成簡單指令的過程中,就是從處理器角度解決問題,于是很自然地理解了計算機(jī)的工作原理。

主站蜘蛛池模板: 海门市| 高安市| 济南市| 永泰县| 华安县| 江永县| 鹤壁市| 武胜县| 石屏县| 牟定县| 内黄县| 沂源县| 舒城县| 莫力| 扬中市| 马山县| 濮阳县| 临漳县| 玉溪市| 仪征市| 南岸区| 乐陵市| 鲜城| 台前县| 文安县| 博兴县| 巴楚县| 西乌珠穆沁旗| 衡水市| 垫江县| 秭归县| 彭州市| 平利县| 德安县| 阆中市| 静宁县| 四子王旗| 江北区| 罗江县| 察隅县| 阿合奇县|