機器語言原理
計算機的核心部件是CPU(中央處理單元),這是一個有著眾多引腳的集成電路。計算機的所有動作均由其內部的“電子運算”而最終產生。從理解的角度上,可以把CPU看作是一套“約定”的集合。當我們通過一些引腳告訴它“1”、“加”、“2”、“運算”、“輸出”等信號時,通過CPU設計制作時固定好的“約定”,在其另一些引腳上輸出“3”的信號并通知顯示設備顯示出“3”的圖象,我們就此得到了結果。——這些“約定”就是該CPU的機器語言。
不同的CPU有著不同的機器語言。不同機器語言基礎上的軟件無法通用。某一廠商新型的CPU為了軟件的通用性往往向其早期的CPU保持兼容。機器語言是一切軟件(包括操作系統)的基礎,是計算機最終識別并執行的指令。
任何的機器語言都只接受兩種信息:“指令”和“數據”;指令是告訴CPU做什么樣的動作,而數據則是動作的對象。比如上文中的“加”、“運算”等是指令,而“1”、“2”是數據。從形式上講,指令和數據都是二進制信息。但如果將數據當成指令交給CPU處理,通常CPU會無法理解而死機;反之如果將指令當成數據交給CPU則不會引起任何惡果,因為數據不會引起CPU任何的動作。
為驗證這一說法,你可以隨便將一個文件的擴展名改為COM在DOS下交給系統執行;也可以將命令處理器COMMAND.COM的擴展名改為TXT用記事本打開(切記不要存盤!)。
面向機器語言概述
面向機器語言是為特定的計算機或一類計算機而設計的程序設計語言。這種語言保留了機器語言的外形,即由操作碼和地址碼組成指令這個外形,但面向機器語言的語言是用符號形式而不用機器代碼形式。這種語言能讓使用者擺脫計算機的一些純事物性的細節問題(如無需硬記機器指令代碼、擺脫了二-十進制轉換問題和分配內存問題等),而專心考慮程序間的內在聯系。這類語言的代表是匯編語言。
面向機器語言有哪些
1、機器語言
機器語言程序由機器指令構成,這些機器指令按照執行順序依次排列,運行時依次執行完成某個特定的計算或任務。
機器指令是CPU能直接識別并執行的指令。機器指令由物理部件的若干位二進制0、1狀態體現,機器指令程序運行前需要存儲到內存,正確的機器指令一旦送入CPU被譯碼后就將變成動作予以執行。
如圖1-1所示,機器指令面向機器,因機器而異。不同的機器具有不同的機器指令,因而具有不同的機器語言。所謂不同的機器,是指具有不同CPU(中央處理器)的計算機。由于機器指令與CPU緊密相關,所以不同種類的CPU所對應的機器指令也就不同,而且它們的指令系統往往相差很大。但對同一系列的CPU來說,為了滿足各型號之間良好的兼容性,設計者一般要做到:新一代CPU的指令系統必須兼容先前開發的同系列CPU的指令系統。只有這樣,先前開發出來的各類程序在新一弋CPU上才能正常運行。
機器指令通常由操作碼和操作數兩部分組成,操作碼指出該指令所要完成的操作,即指令的功能,操作數指出參與運算的對象,以及運算結果所存放的位置等。由于機器指令由物理部件的若干位二進制0、1狀態體現,因此機器指令的最直接的記憶形式就是表示這一指令狀態的二進制數,這個二進制數就稱作該機器指令的二進制代碼指令。由于二進制數和八進制數,以及十六進制數的特殊關系,因此該二進制代碼指令對應的八進制數和十六進制數分別稱作該機器指令的八進制或十六進制代碼指令。
例如:B233H就是一條80*86的十六進制機器代碼指令,這條指令的功能是將33H這個十六進制數送到DL寄存器。該機器指令的二進制代碼指令是:1011001000110011,指令長度16位。
顯然二進制代碼指令與其狀態對應直觀,但記憶困難。而十六進制代碼指令則方便記憶。因此80*86的代碼指令通常都用十六進制表示。
用機器指令所寫的程序稱作機器指令程序,機器指令程序也指剛代碼指令所寫的程序。機器指令程序遵循馮·諾依曼原理:用二進制表示數,程序與數據都存儲在同樣的存儲器,程序指令一般按存取順序執行。
計算機出現初期只有一種機器語言,程序員只能用代碼指令編寫程序,即機器語言程序。用機器語言編寫程序是相當艱苦的工作,必須由經過嚴格訓練的專業技術人員承擔,這是早期計算機之所以不能夠廣泛應用的最大障礙之一。
一方面機器語言十分重要,必須了解;另一方面機器代碼指令程序使用又十分困難;因因此唯一能夠替代機器語言的匯編語言就成為計算機科技人員必須掌握的一種計算機語言。
2、匯編語言
雖然用機器語言編寫程序有許多不便,但程序執行效率高。所以,在保留“程序執行效率高”的前提下,人們開始著手研究一種能大大改善程序可讀性的編程方法。即選用能反映機器指令功能的單詞或詞組來代替該機器指令的操作碼,選用相應的符號表示CPU內部資源和內存等操作數,這就是匯編指令。
例如,匯編指令:
MOVAL,BL其對應的二進制指令為:1101100010001000,十六進制代碼指令則為D888H,可見記憶機器指令相當困難。
而匯編指令中MOV源于Move,表示傳送指令;AL、BL分別表示80x86的AL和BL寄存器。指令功能是將BL寄存器中的內容傳送到AL寄存器。如此,令人難懂的二進制機器代碼指令或十六進制機器代碼指令就可以用通俗易懂的、具有一定含義的符號指令來表示了,這就是匯編指令的原意。我們稱這些具有一定含義的符號,例如上述指令中的MOV,為助記符。用助記符、符號地址等組成的符號指令稱為匯編格式指令或匯編指令。
因此,用助記符表示的機器指令稱作匯編指令,用匯編指令編寫的程序稱作匯編指令程序。但匯編指令最終必須翻譯成機器指令才能夠在計算機上執行。
匯編語言是匯編指令集、偽指令集及其使用規則的統稱。能夠一對一地翻譯成機器指令的這種用助記符表示的機器指令稱作匯編指令。偽指令則是出現在匯編語言程序中的一些輔助性的說明,它不對應具體的機器指令,而是程序設計者與匯編過程中的翻譯程序(即匯編)、連接程序,以及執行時如何裝入的一種約定。
用匯編語言編寫的程序稱作匯編語言程序,或匯編語言源程序,也簡稱為源程序。匯編語言程序較之機器指令程序容易理解和維護。
匯編語言源程序是一個文本文件,它必須經過翻譯才能夠變成可執行的機器語言程序,這個翻譯過程稱作匯編。匯編的核心過程是將匯編指令逐條翻譯成機器指令,這正是匯編語言中“匯編”一詞的含義。
80x86匯編語言源程序擴展名為.asm,經過匯編以后生成的浮動地址二進制文件擴展名為.obj,.obj文件需要經過連接才能夠生成可執行文件.exe。.exe是一個可以由操作系統執行的機器指令程序。圖1-2給出了一個簡單匯編語言程序與其機器指令程序之間的對應關系。
盡管不同的CPU有不同的匯編語言,但不同種類的匯編語言都有其共同規律。因此,學會一種匯編語言,再學習其他匯編語言就相對容易多了。
機器語言的發展
每種計算機都有自己獨特的機器指令,比如,某種型號的計算機用8位二進制信息10001010表示加法指令,用00010011表示減法指令,等等。這些指令的執行由計算機的線路來保證,計算機在設計之初,先就要確定好每一條指令對應的線路邏輯操作。計算機處理信息的早期語言是所謂的機器語言,使用機器語言進行程序設計需要面向機器來編寫代碼,即需要針對不同的機器編寫諸如01011100這樣的指令序列。用機器語言進行程序設計是一項累人的工作,代碼難以閱讀和理解,一個簡單的任務往往蘊含著編寫大量的代碼,而且同樣的任務需要針對不同型號的計算機分別進行編寫指令,因為一種型號的計算機用10001010表示加法指令,而另一種型號的計算機可能用11110000表示加法指令。因此,使用機器語言編程也稱為面向機器編程。20世紀50年代出現了匯編語言,在編寫指令時,用一些簡單的容易記憶的符號代替二進制指令,但匯編語言仍是面向機器語言,需針對小同的機器編寫不同的代碼。習慣上稱機器語言、匯編語言是低級語言。
-
匯編語言
+關注
關注
14文章
409瀏覽量
35793 -
機器語言
+關注
關注
0文章
35瀏覽量
10752
發布評論請先 登錄
相關推薦
評論