计算机语言面向机器的语言,面向机器语言是什么
面向機(jī)器語(yǔ)言是為特定的計(jì)算機(jī)或一類(lèi)計(jì)算機(jī)而設(shè)計(jì)的程序設(shè)計(jì)語(yǔ)言。這種語(yǔ)言保留了機(jī)器語(yǔ)言的外形,即由操作碼和地址碼組成指令這個(gè)外形,但面向機(jī)器語(yǔ)言的語(yǔ)言是用符號(hào)形式而不用機(jī)器代碼形式。
面向機(jī)器語(yǔ)言是為特定的計(jì)算機(jī)或一類(lèi)計(jì)算機(jī)而設(shè)計(jì)的程序設(shè)計(jì)語(yǔ)言。這種語(yǔ)言保留了機(jī)器語(yǔ)言的外形,即由操作碼和地址碼組成指令這個(gè)外形,但面向機(jī)器語(yǔ)言的語(yǔ)言是用符號(hào)形式而不用機(jī)器代碼形式。這種語(yǔ)言能讓使用者擺脫計(jì)算機(jī)的一些純事物性的細(xì)節(jié)問(wèn)題(如無(wú)需硬記機(jī)器指令代碼、擺脫了二-十進(jìn)制轉(zhuǎn)換問(wèn)題和分配內(nèi)存問(wèn)題等),而專(zhuān)心考慮程序間的內(nèi)在聯(lián)系。這類(lèi)語(yǔ)言的代表是匯編語(yǔ)言。
面向機(jī)器語(yǔ)言是與機(jī)器相關(guān)的,用戶(hù)必須熟悉計(jì)算機(jī)的內(nèi)部結(jié)構(gòu)及其對(duì)應(yīng)的指令序列才可以使用。面向機(jī)器語(yǔ)言又分為兩類(lèi):機(jī)器語(yǔ)言和匯編語(yǔ)言。
概述
機(jī)器語(yǔ)言是一種 cpu 指令系統(tǒng),也稱(chēng)為 cpu 的機(jī)器語(yǔ)言,它是 cpu 可以識(shí)別的一組由 0 和 1 序列構(gòu)成的指令碼。用機(jī)器語(yǔ)言編寫(xiě)程序,就是從所使用的 cpu 的指令系統(tǒng)中挑選合適的指令,組成一個(gè)指令序列。這種程序可以被機(jī)器直接理解并執(zhí)行,速度很快,但由于它們不直觀、難記、難以理解、不易査錯(cuò)、開(kāi)發(fā)周期長(zhǎng),所以,現(xiàn)在只有專(zhuān)業(yè)人員在編制對(duì)于執(zhí)行速度有很高要求的程序時(shí)才采用。
為了減輕編程者的勞動(dòng)強(qiáng)度,人們使用一些用于幫助記憶的符號(hào)來(lái)代替機(jī)器語(yǔ)言中的 0、 1 指令,使得編程效率和質(zhì)量都有了很大的提高。由這些助記符組成的指令系統(tǒng),稱(chēng)為匯編語(yǔ)言。匯編語(yǔ)言指令與機(jī)器語(yǔ)言指令基本上是一一對(duì)應(yīng)的。因?yàn)檫@些助記符號(hào)不能被機(jī)器直接識(shí)別,所以匯編語(yǔ)言程序必須被編譯成機(jī)器語(yǔ)言程序才能被機(jī)器理解和執(zhí)行。編譯之前的程序被稱(chēng)為“源程序”,編譯之后的程序被稱(chēng)為“目標(biāo)程序”。
用匯編語(yǔ)言編寫(xiě)的程序代碼針對(duì)性強(qiáng),代碼長(zhǎng)度短,程序執(zhí)行速度快,實(shí)時(shí)性強(qiáng),要求 的硬件也少,但編程繁瑣,工作量大,調(diào)試?yán)щy,開(kāi)發(fā)周期長(zhǎng),通用性差,不便于交流推廣。
匯編言與機(jī)器語(yǔ)言都是因 CPU 的不同而不同,所以統(tǒng)稱(chēng)為“面向機(jī)器的語(yǔ)言”。使用這類(lèi)語(yǔ)言,可以編出效率極高的程序,但對(duì)程序設(shè)計(jì)人員的要求也很高,他們不僅要考慮解題思路,還要熟悉機(jī)器的內(nèi)部結(jié)構(gòu),所以,一般的人很難掌握這類(lèi)程序設(shè)計(jì)語(yǔ)言。
發(fā)展
每種計(jì)算機(jī)都有自己獨(dú)特的機(jī)器指令,比如,某種型號(hào)的計(jì)算機(jī)用 8 位二進(jìn)制信息 10001010 表示加法指令,用 00010011 表示減法指令,等等。這些指令的執(zhí)行由計(jì)算機(jī)的線路來(lái)保證,計(jì)算機(jī)在設(shè)計(jì)之初,先就要確定好每一條指令對(duì)應(yīng)的線路邏輯操作。計(jì)算機(jī)處理信息的早期語(yǔ)言是所謂的機(jī)器語(yǔ)言,使用機(jī)器語(yǔ)言進(jìn)行程序設(shè)計(jì)需要面向機(jī)器來(lái)編寫(xiě)代碼,即需要針對(duì)不同的機(jī)器編寫(xiě)諸如 01011100 這樣的指令序列。用機(jī)器語(yǔ)言進(jìn)行程序設(shè)計(jì)是一項(xiàng)累人的工作,代碼難以閱讀和理解,一個(gè)簡(jiǎn)單的任務(wù)往往蘊(yùn)含著編寫(xiě)大量的代碼,而且同樣的任務(wù)需要針對(duì)不同型號(hào)的計(jì)算機(jī)分別進(jìn)行編寫(xiě)指令,因?yàn)橐环N型號(hào)的計(jì)算機(jī)用 10001010 表示加法指令,而另一種型號(hào)的計(jì)算機(jī)可能用 11110000 表示加法指令。因此,使用機(jī)器語(yǔ)言編程也稱(chēng)為面向機(jī)器編程。20 世紀(jì) 50 年代出現(xiàn)了匯編語(yǔ)言,在編寫(xiě)指令時(shí),用一些簡(jiǎn)單的容易記憶的符號(hào)代替二進(jìn)制指令,但匯編語(yǔ)言仍是面向機(jī)器語(yǔ)言,需針對(duì)小同的機(jī)器編寫(xiě)不同的代碼。習(xí)慣上稱(chēng)機(jī)器語(yǔ)言、匯編語(yǔ)言是低級(jí)語(yǔ)言。
分類(lèi)
計(jì)算機(jī)語(yǔ)言有多種分類(lèi)方法,按照是否面向機(jī)器可以分成面向機(jī)器的語(yǔ)言和非面向機(jī)器的語(yǔ)言。面向機(jī)器的語(yǔ)言又分為機(jī)器語(yǔ)言和匯編語(yǔ)言,這種語(yǔ)言也稱(chēng)作計(jì)算機(jī)低級(jí)語(yǔ)言。其他計(jì)算機(jī)語(yǔ)言均為非面向機(jī)器的語(yǔ)言。
機(jī)器語(yǔ)言是以二進(jìn)制代碼組成的機(jī)器指令集合.這種語(yǔ)言編制的程序運(yùn)行效率極高,但程序很不直觀,編寫(xiě)很簡(jiǎn)單的功能就需要大量代碼,重用性差,而且編寫(xiě)效率較低,很容易出錯(cuò)。
匯編語(yǔ)言比機(jī)器語(yǔ)言直觀。它用助記符代替二進(jìn)制代碼,編程工作相對(duì)機(jī)器語(yǔ)言簡(jiǎn)化,使用起來(lái)方便了很多,錯(cuò)誤也相對(duì)減少;但不同指令集的機(jī)器仍使用不同的匯編語(yǔ)言,程序重用性也很低。
機(jī)器語(yǔ)言
機(jī)器語(yǔ)言程序由機(jī)器指令構(gòu)成,這些機(jī)器指令按照?qǐng)?zhí)行順序依次排列,運(yùn)行時(shí)依次執(zhí)行完成某個(gè)特定的計(jì)算或任務(wù)。
機(jī)器指令是 CPU 能直接識(shí)別并執(zhí)行的指令。機(jī)器指令由物理部件的若干位二進(jìn)制 0、1 狀態(tài)體現(xiàn),機(jī)器指令程序運(yùn)行前需要存儲(chǔ)到內(nèi)存,正確的機(jī)器指令一旦送入 CPU 被譯碼后就將變成動(dòng)作予以執(zhí)行。
如圖 1-1 所示,機(jī)器指令面向機(jī)器,因機(jī)器而異。不同的機(jī)器具有不同的機(jī)器指令,因而具有不同的機(jī)器語(yǔ)言。所謂不同的機(jī)器,是指具有不同 CPU(中央處理器)的計(jì)算機(jī)。由于機(jī)器指令與 CPU 緊密相關(guān),所以不同種類(lèi)的 CPU 所對(duì)應(yīng)的機(jī)器指令也就不同,而且它們的指令系統(tǒng)往往相差很大。但對(duì)同一系列的 CPU 來(lái)說(shuō),為了滿足各型號(hào)之間良好的兼容性,設(shè)計(jì)者一般要做到:新一代 CPU 的指令系統(tǒng)必須兼容先前開(kāi)發(fā)的同系列 CPU 的指令系統(tǒng)。只有這樣,先前開(kāi)發(fā)出來(lái)的各類(lèi)程序在新一弋 CPU 上才能正常運(yùn)行。
機(jī)器指令通常由操作碼和操作數(shù)兩部分組成,操作碼指出該指令所要完成的操作,即指令的功能,操作數(shù)指出參與運(yùn)算的對(duì)象,以及運(yùn)算結(jié)果所存放的位置等。
由于機(jī)器指令由物理部件的若干位二進(jìn)制 0、1 狀態(tài)體現(xiàn),因此機(jī)器指令的最直接的記憶形式就是表示這一指令狀態(tài)的二進(jìn)制數(shù),這個(gè)二進(jìn)制數(shù)就稱(chēng)作該機(jī)器指令的二進(jìn)制代碼指令。由于二進(jìn)制數(shù)和八進(jìn)制數(shù),以及十六進(jìn)制數(shù)的特殊關(guān)系,因此該二進(jìn)制代碼指令對(duì)應(yīng)的八進(jìn)制數(shù)和十六進(jìn)制數(shù)分別稱(chēng)作該機(jī)器指令的八進(jìn)制或十六進(jìn)制代碼指令。
例如:B233H 就是一條 80*86 的十六進(jìn)制機(jī)器代碼指令,這條指令的功能是將 33H 這個(gè)十六進(jìn)制數(shù)送到 DL 寄存器。該機(jī)器指令的二進(jìn)制代碼指令是:1011001000110011,指令長(zhǎng)度 16 位。
顯然二進(jìn)制代碼指令與其狀態(tài)對(duì)應(yīng)直觀,但記憶困難。而十六進(jìn)制代碼指令則方便記憶。因此 80*86 的代碼指令通常都用十六進(jìn)制表示。
用機(jī)器指令所寫(xiě)的程序稱(chēng)作機(jī)器指令程序,機(jī)器指令程序也指剛代碼指令所寫(xiě)的程序。機(jī)器指令程序遵循馮·諾依曼原理:用二進(jìn)制表示數(shù),程序與數(shù)據(jù)都存儲(chǔ)在同樣的存儲(chǔ)器,程序指令一般按存取順序執(zhí)行。
計(jì)算機(jī)出現(xiàn)初期只有一種機(jī)器語(yǔ)言,程序員只能用代碼指令編寫(xiě)程序,即機(jī)器語(yǔ)言程序。用機(jī)器語(yǔ)言編寫(xiě)程序是相當(dāng)艱苦的工作,必須由經(jīng)過(guò)嚴(yán)格訓(xùn)練的專(zhuān)業(yè)技術(shù)人員承擔(dān),這是早期計(jì)算機(jī)之所以不能夠廣泛應(yīng)用的最大障礙之一。
一方面機(jī)器語(yǔ)言十分重要,必須了解;另一方面機(jī)器代碼指令程序使用又十分困難;因因此唯一能夠替代機(jī)器語(yǔ)言的匯編語(yǔ)言就成為計(jì)算機(jī)科技人員必須掌握的一種計(jì)算機(jī)語(yǔ)言。
匯編語(yǔ)言
雖然用機(jī)器語(yǔ)言編寫(xiě)程序有許多不便,但程序執(zhí)行效率高。所以,在保留“程序執(zhí)行效率高”的前提下,人們開(kāi)始著手研究一種能大大改善程序可讀性的編程方法。即選用能反映機(jī)器指令功能的單詞或詞組來(lái)代替該機(jī)器指令的操作碼,選用相應(yīng)的符號(hào)表示 CPU 內(nèi)部資源和內(nèi)存等操作數(shù),這就是匯編指令。
例如,匯編指令:
MOV AL,BL 其對(duì)應(yīng)的二進(jìn)制指令為:1101100010001000,十六進(jìn)制代碼指令則為 D888H,可見(jiàn)記憶機(jī)器指令相當(dāng)困難。
而匯編指令中 MOV 源于 Move,表示傳送指令;AL、BL 分別表示 80×86 的 AL 和 BL 寄存器。指令功能是將 BL 寄存器中的內(nèi)容傳送到 AL 寄存器。如此,令人難懂的二進(jìn)制機(jī)器代碼指令或十六進(jìn)制機(jī)器代碼指令就可以用通俗易懂的、具有一定含義的符號(hào)指令來(lái)表示了,這就是匯編指令的原意。我們稱(chēng)這些具有一定含義的符號(hào),例如上述指令中的 MOV,為助記符。用助記符、符號(hào)地址等組成的符號(hào)指令稱(chēng)為匯編格式指令或匯編指令。
因此,用助記符表示的機(jī)器指令稱(chēng)作匯編指令,用匯編指令編寫(xiě)的程序稱(chēng)作匯編指令程序。但匯編指令最終必須翻譯成機(jī)器指令才能夠在計(jì)算機(jī)上執(zhí)行。
匯編語(yǔ)言是匯編指令集、偽指令集及其使用規(guī)則的統(tǒng)稱(chēng)。能夠一對(duì)一地翻譯成機(jī)器指令的這種用助記符表示的機(jī)器指令稱(chēng)作匯編指令。偽指令則是出現(xiàn)在匯編語(yǔ)言程序中的一些輔助性的說(shuō)明,它不對(duì)應(yīng)具體的機(jī)器指令,而是程序設(shè)計(jì)者與匯編過(guò)程中的翻譯程序(即匯編)、連接程序,以及執(zhí)行時(shí)如何裝入的一種約定。
用匯編語(yǔ)言編寫(xiě)的程序稱(chēng)作匯編語(yǔ)言程序,或匯編語(yǔ)言源程序,也簡(jiǎn)稱(chēng)為源程序。匯編語(yǔ)言程序較之機(jī)器指令程序容易理解和維護(hù)。
匯編語(yǔ)言源程序是一個(gè)文本文件,它必須經(jīng)過(guò)翻譯才能夠變成可執(zhí)行的機(jī)器語(yǔ)言程序,這個(gè)翻譯過(guò)程稱(chēng)作匯編。匯編的核心過(guò)程是將匯編指令逐條翻譯成機(jī)器指令,這正是匯編語(yǔ)言中“匯編”一詞的含義。
80×86 匯編語(yǔ)言源程序擴(kuò)展名為.asm,經(jīng)過(guò)匯編以后生成的浮動(dòng)地址二進(jìn)制文件擴(kuò)展名為.obj,.obj 文件需要經(jīng)過(guò)連接才能夠生成可執(zhí)行文件.exe。.exe 是一個(gè)可以由操作系統(tǒng)執(zhí)行的機(jī)器指令程序。圖 1-2 給出了一個(gè)簡(jiǎn)單匯編語(yǔ)言程序與其機(jī)器指令程序之間的對(duì)應(yīng)關(guān)系。
盡管不同的 CPU 有不同的匯編語(yǔ)言,但不同種類(lèi)的匯編語(yǔ)言都有其共同規(guī)律。因此,學(xué)會(huì)一種匯編語(yǔ)言,再學(xué)習(xí)其他匯編語(yǔ)言就相對(duì)容易多了。
機(jī)器語(yǔ)言與匯編語(yǔ)言
機(jī)器語(yǔ)言是計(jì)算機(jī)唯一能接受和執(zhí)行的語(yǔ)言。一條指令規(guī)定了由軟件工作者要求計(jì)算機(jī)執(zhí)行的一個(gè)基本動(dòng)作。計(jì)算機(jī) CPU 所能懂得的指令的全體,稱(chēng)作該計(jì)算機(jī)的指令系統(tǒng)。不同型號(hào)或系列的 CPU,其指令系統(tǒng)不同。因?yàn)闄C(jī)器語(yǔ)言直接依賴(lài) CPU,所以可移植性差、重用性差。
計(jì)算機(jī)的指令系統(tǒng)有定長(zhǎng)的和不定長(zhǎng)的,80×86 是不定長(zhǎng)的指令系統(tǒng),一條機(jī)器指令依功能不同可能是 l~6 字節(jié)長(zhǎng)度。
機(jī)器指令的所有字節(jié),按二進(jìn)制位分成若干字段,不同字段代表不同的含義,但必須有有操作碼字段和操作數(shù)字段。操作碼表明做什么,操作數(shù)表明如何做。操作數(shù)依功能不同,可能沒(méi)有,也可能有一個(gè)或多個(gè)。
二進(jìn)制代碼指令是機(jī)器指令狀態(tài)的直接描述,該狀態(tài)進(jìn)入 CPU 的譯碼器后,經(jīng)譯碼變成控制器的動(dòng)作,通過(guò)各種邏輯電路,在時(shí)鐘脈沖給出的時(shí)序信號(hào)和邏輯門(mén)的作用下完成指令所規(guī)定的操作。即二進(jìn)制代碼指令或機(jī)器指令完全由計(jì)算機(jī) CPU 的邏輯電路直接識(shí)別,不需要任何翻譯程序。
最早的程序設(shè)計(jì)都采用機(jī)器語(yǔ)言來(lái)編寫(xiě)。程序設(shè)計(jì)者必須將求解的問(wèn)題細(xì)化到每一條指令,其難度可想而知。程序員既要駕馭程序設(shè)計(jì)的全局又要深入每一個(gè)局部,乃至程序?qū)崿F(xiàn)的每一個(gè)細(xì)節(jié),即使智力超群的程序員也常常會(huì)顧此失彼,屢出差錯(cuò),所編寫(xiě)的程序必須經(jīng)過(guò)嚴(yán)格測(cè)試,因此開(kāi)發(fā)周期長(zhǎng)。
ASCII 碼的出現(xiàn)為改善機(jī)器指令的可讀性和方便記憶提供了可能。既然 ASCII 碼可以表示字符,字符又可以組成單詞和短語(yǔ),于是用幫助記憶的符號(hào)表示的機(jī)器指令,即匯編指令和匯編語(yǔ)言就出現(xiàn)了。
匯編語(yǔ)言為機(jī)器語(yǔ)言向算法語(yǔ)言,即向高級(jí)語(yǔ)言的靠攏邁出了一大步。但它離高級(jí)語(yǔ)言還太遠(yuǎn),以至于程序員還不能從分解算法的數(shù)據(jù)、確定運(yùn)算和控制的指令等繁雜的細(xì)化中解脫出來(lái)。而偽指令和宏的定義則將匯編語(yǔ)言向算法語(yǔ)言又靠攏了一步,這就是宏匯編。
匯編語(yǔ)言與機(jī)器語(yǔ)言相比有很多優(yōu)越性,如編寫(xiě)容易、修改方便、閱讀簡(jiǎn)單、程序清楚等。但在計(jì)算機(jī)語(yǔ)言系統(tǒng)中,匯編語(yǔ)言仍然被列入“低級(jí)語(yǔ)言”的范疇,因?yàn)樗旧硎菣C(jī)器語(yǔ)言,是屬于面向機(jī)器的語(yǔ)言。
總結(jié)
以上是生活随笔為你收集整理的计算机语言面向机器的语言,面向机器语言是什么的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: install.img制作方式
- 下一篇: python 元组