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