面向機器語言

面向機器語言

面向機器語言是為特定的計算機或一類計算機而設計的程式設計語言。這種語言保留了機器語言的外形,即由操作碼和地址碼組成指令這個外形,但面向機器語言的語言是用符號形式而不用機器代碼形式。這種語言能讓使用者擺脫計算機的一些純事物性的細節問題(如無需硬記機器指令代碼、擺脫了二-十進制轉換問題和分配記憶體問題等),而專心考慮程式間的內在聯繫。這類語言的代表是彙編語言。 面向機器語言是與機器相關的,用戶必須熟悉計算機的內部結構及其對應的指令序列才可以使用。面向機器語言又分為兩類:機器語言和彙編語言。

概述

機器語言是一種cpu指令系統,也稱為cpu的機器語言,它是cpu可以識別的一組由0和1序列構成的指令碼。用機器語言編寫程式,就是從所使用的cpu的指令系統中挑選合適的指令,組成一個指令序列。這種程式可以被機器直接理解並執行,速度很快,但由於它們不直觀、難記、難以理解、不易査錯、開發周期長,所以,現在只有專業人員在編制對於執行速度有很高要求的程式時才採用。

為了減輕編程者的勞動強度,人們使用一些用於幫助記憶的符號來代替機器語言中的0、 1指令,使得編程效率和質量都有了很大的提高。由這些助記符組成的指令系統,稱為彙編語言。彙編語言指令與機器語言指令基本上是一一對應的。因為這些助記符號不能被機器直接識別,所以彙編語言程式必須被編譯成機器語言程式才能被機器理解和執行。編譯之前的程式被稱為“源程式”,編譯之後的程式被稱為“目標程式”。

用彙編語言編寫的程式代碼針對性強,代碼長度短,程式執行速度快,實時性強,要求 的硬體也少,但編程繁瑣,工作量大,調試困難,開發周期長,通用性差,不便於交流推廣。

彙編言與機器語言都是因CPU的不同而不同,所以統稱為“面向機器的語言”。使用這類語言,可以編出效率極高的程式,但對程式設計人員的要求也很高,他們不僅要考慮解題思路,還要熟悉機器的內部結構,所以,一般的人很難掌握這類程式設計語言。

發展

每種計算機都有自己獨特的機器指令,比如,某種型號的計算機用8位二進制信息10001010表示加法指令,用00010011表示減法指令,等等。這些指令的執行由計算機的線路來保證,計算機在設計之初,先就要確定好每一條指令對應的線路邏輯操作。計算機處理信息的早期語言是所謂的機器語言,使用機器語言進行程式設計需要面向機器來編寫代碼,即需要針對不同的機器編寫諸如01011100這樣的指令序列。用機器語言進行程式設計是一項累人的工作,代碼難以閱讀和理解,一個簡單的任務往往蘊含著編寫大量的代碼,而且同樣的任務需要針對不同型號的計算機分別進行編寫指令,因為一種型號的計算機用10001010表示加法指令,而另一種型號的計算機可能用11110000表示加法指令。因此,使用機器語言編程也稱為面向機器編程。20世紀50年代出現了彙編語言,在編寫指令時,用一些簡單的容易記憶的符號代替二進制指令,但彙編語言仍是面向機器語言,需針對小同的機器編寫不同的代碼。習慣上稱機器語言、彙編語言是低級語言。

分類

計算機語言有多種分類方法,按照是否面向機器可以分成面向機器的語言和非面向機器的語言。面向機器的語言又分為機器語言和彙編語言,這種語言也稱作計算機低級語言。其他計算機語言均為非面向機器的語言。

機器語言是以二進制代碼組成的機器指令集合.這種語言編制的程式運行效率極高,但程式很不直觀,編寫很簡單的功能就需要大量代碼,重用性差,而且編寫效率較低,很容易出錯。

彙編語言比機器語言直觀。它用助記符代替二進制代碼,編程工作相對機器語言簡化,使用起來方便了很多,錯誤也相對減少;但不同指令集的機器仍使用不同的彙編語言,程式重用性也很低。

機器語言

機器語言程式由機器指令構成,這些機器指令按照執行順序依次排列,運行時依次執行完成某個特定的計算或任務。

機器指令是CPU能直接識別並執行的指令。機器指令由物理部件的若干位二進制0、1狀態體現,機器指令程式運行前需要存儲到記憶體,正確的機器指令一旦送入CPU被解碼後就將變成動作予以執行。

如圖1-1所示,機器指令面向機器,因機器而異。不同的機器具有不同的機器指令,因而具有不同的機器語言。所謂不同的機器,是指具有不同CPU(中央處理器)的計算機。由於機器指令與CPU緊密相關,所以不同種類的CPU所對應的機器指令也就不同,而且它們的指令系統往往相差很大。但對同一系列的CPU來說,為了滿足各型號之間良好的兼容性,設計者一般要做到:新一代CPU的指令系統必須兼容先前開發的同系列CPU的指令系統。只有這樣,先前開發出來的各類程式在新一弋CPU上才能正常運行。

面向機器語言 面向機器語言

機器指令通常由操作碼和運算元兩部分組成,操作碼指出該指令所要完成的操作,即指令的功能,運算元指出參與運算的對象,以及運算結果所存放的位置等。

由於機器指令由物理部件的若干位二進制0、1狀態體現,因此機器指令的最直接的記憶形式就是表示這一指令狀態的二進制數,這個二進制數就稱作該機器指令的二進制代碼指令。由於二進制數和八進制數,以及十六進制數的特殊關係,因此該二進制代碼指令對應的八進制數和十六進制數分別稱作該機器指令的八進制或十六進制代碼指令。

例如:B233H就是一條80*86的十六進制機器代碼指令,這條指令的功能是將33H這個十六進制數送到DL暫存器。該機器指令的二進制代碼指令是:1011001000110011,指令長度16位。

顯然二進制代碼指令與其狀態對應直觀,但記憶困難。而十六進制代碼指令則方便記憶。因此80*86的代碼指令通常都用十六進制表示。

用機器指令所寫的程式稱作機器指令程式,機器指令程式也指剛代碼指令所寫的程式。機器指令程式遵循馮·諾依曼原理:用二進制表示數,程式與數據都存儲在同樣的存儲器,程式指令一般按存取順序執行。

計算機出現初期只有一種機器語言,程式設計師只能用代碼指令編寫程式,即機器語言程式。用機器語言編寫程式是相當艱苦的工作,必須由經過嚴格訓練的專業技術人員承擔,這是早期計算機之所以不能夠廣泛套用的最大障礙之一。

一方面機器語言十分重要,必須了解;另一方面機器代碼指令程式使用又十分困難;因因此唯一能夠替代機器語言的彙編語言就成為計算機科技人員必須掌握的一種計算機語言。

彙編語言

雖然用機器語言編寫程式有許多不便,但程式執行效率高。所以,在保留“程式執行效率高”的前提下,人們開始著手研究一種能大大改善程式可讀性的編程方法。即選用能反映機器指令功能的單詞或詞組來代替該機器指令的操作碼,選用相應的符號表示CPU內部資源和記憶體等運算元,這就是彙編指令。

例如,彙編指令:

MOV AL,BL其對應的二進制指令為:1101100010001000,十六進制代碼指令則為D888H,可見記憶機器指令相當困難。

而彙編指令中MOV源於Move,表示傳送指令;AL、BL分別表示80x86的AL和BL暫存器。指令功能是將BL暫存器中的內容傳送到AL暫存器。如此,令人難懂的二進制機器代碼指令或十六進制機器代碼指令就可以用通俗易懂的、具有一定含義的符號指令來表示了,這就是彙編指令的原意。我們稱這些具有一定含義的符號,例如上述指令中的MOV,為助記符。用助記符、符號地址等組成的符號指令稱為彙編格式指令或彙編指令。

因此,用助記符表示的機器指令稱作彙編指令,用彙編指令編寫的程式稱作彙編指令程式。但彙編指令最終必須翻譯成機器指令才能夠在計算機上執行。

彙編語言是彙編指令集、偽指令集及其使用規則的統稱。能夠一對一地翻譯成機器指令的這種用助記符表示的機器指令稱作彙編指令。偽指令則是出現在彙編語言程式中的一些輔助性的說明,它不對應具體的機器指令,而是程式設計者與彙編過程中的翻譯程式(即彙編)、連線程式,以及執行時如何裝入的一種約定。

用彙編語言編寫的程式稱作彙編語言程式,或彙編語言源程式,也簡稱為源程式。彙編語言程式較之機器指令程式容易理解和維護。

彙編語言源程式是一個文本檔案,它必須經過翻譯才能夠變成可執行的機器語言程式,這個翻譯過程稱作彙編。彙編的核心過程是將彙編指令逐條翻譯成機器指令,這正是彙編語言中“彙編”一詞的含義。

80x86彙編語言源程式擴展名為.asm,經過彙編以後生成的浮動地址二進制檔案擴展名為.obj,.obj檔案需要經過連線才能夠生成執行檔.exe。.exe是一個可以由作業系統執行的機器指令程式。圖1-2給出了一個簡單彙編語言程式與其機器指令程式之間的對應關係。

儘管不同的CPU有不同的彙編語言,但不同種類的彙編語言都有其共同規律。因此,學會一種彙編語言,再學習其他彙編語言就相對容易多了。

機器語言與彙編語言

機器語言是計算機唯一能接受和執行的語言。一條指令規定了由軟體工作者要求計算機執行的一個基本動作。計算機CPU所能懂得的指令的全體,稱作該計算機的指令系統。不同型號或系列的CPU,其指令系統不同。因為機器語言直接依賴CPU,所以可移植性差、重用性差。

計算機的指令系統有定長的和不定長的,80x86是不定長的指令系統,一條機器指令依功能不同可能是l~6位元組長度。

機器指令的所有位元組,按二進制位分成若干欄位,不同欄位代表不同的含義,但必須有有操作碼欄位和運算元欄位。操作碼錶明做什麼,運算元表明如何做。運算元依功能不同,可能沒有,也可能有一個或多個。

二進制代碼指令是機器指令狀態的直接描述,該狀態進入CPU的解碼器後,經解碼變成控制器的動作,通過各種邏輯電路,在時鐘脈衝給出的時序信號和邏輯門的作用下完成指令所規定的操作。即二進制代碼指令或機器指令完全由計算機CPU的邏輯電路直接識別,不需要任何翻譯程式。

最早的程式設計都採用機器語言來編寫。程式設計者必須將求解的問題細化到每一條指令,其難度可想而知。程式設計師既要駕馭程式設計的全局又要深入每一個局部,乃至程式實現的每一個細節,即使智力超群的程式設計師也常常會顧此失彼,屢出差錯,所編寫的程式必須經過嚴格測試,因此開發周期長。

ASCII碼的出現為改善機器指令的可讀性和方便記憶提供了可能。既然ASCII碼可以表示字元,字元又可以組成單詞和短語,於是用幫助記憶的符號表示的機器指令,即彙編指令和彙編語言就出現了。

彙編語言為機器語言向算法語言,即向高級語言的靠攏邁出了一大步。但它離高級語言還太遠,以至於程式設計師還不能從分解算法的數據、確定運算和控制的指令等繁雜的細化中解脫出來。而偽指令和宏的定義則將彙編語言向算法語言又靠攏了一步,這就是宏彙編。

彙編語言與機器語言相比有很多優越性,如編寫容易、修改方便、閱讀簡單、程式清楚等。但在計算機語言系統中,彙編語言仍然被列入“低級語言”的範疇,因為它本身是機器語言,是屬於面向機器的語言。

相關詞條

相關搜尋

熱門詞條

聯絡我們