從機器語言到組合語言

2021-05-22 20:13:25 字數 2765 閱讀 3799

機器語言是計算機唯一能接受和執行的語言。機器語言由二進位製碼組成,每一串二進位製碼叫做一條指令。一條指令規定了計算機執行的乙個動作。一台計算機所能懂得的指令的全體,叫做這個計算機的指令系統。不同型號的計算機的指令系統不同。

指令通常由幾個位元組組成,第乙個位元組是操作碼,它規定了計算機要執行的基本操作;後面的位元組是運算元,它規定了操作物件或操作物件的位址。

機器語言是直接用二進位制**指令表達的計算機語言,指令是用0和1組成的一串**,它們有一定的位數,並分成若干段,各段的編碼表示不同的含義,例如某台計算機字長為16位,即有16個二進位制數組成一條指令或其它資訊。16個0和1可組成各種排列組合,通過線路變成電訊號,讓計算機執行各種不同的操作。

如某種計算機的指令為1011011000000000,它表示讓計算機進行一次加法操作;而指令1011010100000000則表示進行一次減法操作。它們的前八位表示操作碼,而後八位表示位址碼。從上面兩條指令可以看出,它們只是在操作碼中從左邊第0位算起的第6和第7位不同。這種機型可包含256(=28)個不同的指令。

機器語言或稱為二進位制**語言,計算機可以直接識別,不需要進行任何翻譯。每台機器的指令,其格式和**所代表的含義都是硬性規定的,故稱之為面向機器的語言,也稱為機器語言。它是第一代的計算機語言。機器語言對不同型號的計算機來說一般是不同的。

使用機器語言編寫程式是一種相當煩瑣的工作,既難於記憶也難於操作,編寫出來的程式全是由0和1的數字組成,直觀性差、難以閱讀。不僅難學、難記、難檢查、又缺乏通用性,給計算機的推廣使用帶來很大的障礙。

最早的程式語言都採用機器語言來編寫。當時,要在計算機上執行的所有演算法都必須直接用機器語言來表達,計算機才能接受。演算法的運算序列包括運算物件和運算結果都必須轉換為指令序列。其中的每一條指令都以編碼(指令碼和位址碼)的形式出現。與演算法語言表達的演算法,相差十萬八千里。對於沒受過程式設計專門訓練的人來說,乙份程式恰似乙份"天書",讓人看了不知所云,可讀性極差。

用機器語言表達演算法的運算、資料和控制十分繁雜瑣碎,因為機器語言所提供的指令太初等、原始。機器語言只接受算術運算、按位邏輯運算和數的大小比較運算等。對於稍複雜的運算,都必須一一分解,直到到達最初等的運算才能用相應的指令替代之。機器語言能直接表達的資料只有最原始的位、位元組、和字三種。演算法中即使是最簡單的資料如布林值、字元、整數、和實數,也必須一一地對映到位、位元組和字中,還得一一分配它們的儲存單元。對於演算法中有結構的資料的表達則要麻煩得多。機器語言所提供的控制轉移指令也只有無條件轉移、條件轉移、進入子程式和從子程式返回等最基本的幾種。用它們來構造迴圈、形成分支、呼叫函式和過程得事先做許多的準備,還得靠許多的技巧。

直接用機器語言表達演算法有許多缺點。

大量繁雜瑣碎的細節牽制著程式設計師,使他們不可能有更多的時間和精力去從事創造性的勞動,執行對他們來說更為重要的任務。如確保程式的正確性、高效性。

程式設計師既要駕馭程式設計的全域性又要深入每乙個區域性直到實現的細節,即使智力超群的程式設計師也常常會顧此失彼,屢出差錯,因而所編出的程式可靠性差,且開發周期長。

由於用機器語言進行程式設計的思維和表達方式與人們的習慣大相徑庭,只有經過較長時間職業訓練的程式設計師才能勝任,使得程式設計曲高和寡。

因為它的書面形式全是"密"碼,所以可讀性差,不便於交流與合作。

因為它嚴重地依賴於具體的計算機,所以可移植性差,重用性差。

為了克服機器語言上述的缺點,出路在於程式語言的抽象,讓它盡可能地接近於演算法語言。為此,人們首先注意到的是可讀性和可移植性,因為它們相對地容易通過抽象而得到改善。於是,很快就出現組合語言。這種語言對機器語言的抽象,首先表現在將機器語言的每一條指令符號化:指令碼代之以記憶符號,位址碼代之以符號位址,使得其含義顯現在符號上而不再隱藏在編碼中,可讓人望"文"生義。其次表現在這種語言擺脫了具體計算機的限制,可在不同指令集的計算機上執行,只要該計算機配上組合語言的乙個匯程式設計序。這無疑是機器語言朝演算法語言靠攏邁出的一步。但是,它離演算法語言還太遠,以致程式設計師還不能從分解演算法的資料、運算和控制到彙編才能直接表達的指令等繁雜瑣碎的事務中解脫出來。

用能反映指令功能的助記符表達的計算機語言叫組合語言。它是符號化了的機器語言。用組合語言編寫的程式叫組合語言源程式,計算機無法執行。必須用匯程式設計序把它翻譯成機器語言目標程式,計算機才能執行。這個翻譯過程稱為彙編過程。

組合語言是用助記符表示指令功能的計算機語言。與機器語言相比,組合語言具有以下的幾個特點:第一,它使用符號來表示操作碼和位址碼,這種符號便於記憶,稱為記憶碼。第二,匯程式設計序自動處理儲存分配,毋需程式設計師做儲存分配工作。第三,程式設計師可以直接書寫十進位制數`

例如,要計算c=7+8,可以用如下幾條彙編命令:

標號        指令                   說明

start      get 7;          把7送進累加器acc中

add 8;         累加器acc+8送進累加器acc中

put c;         把累加器acc送進c中

end        stop;          停機

其中(acc)表示累加器中的值,等等。

如此簡單的組合語言,只是符號形式的機器語言,但用它來編寫程式或閱讀已經編寫好的程式比起機器語言來要簡單和方便多了。這就是計算機語言發展中的第二代語言—組合語言。人們使用這種助記符編寫程式後,要是計算機能夠接受,還必須把編好的程式逐條翻譯成二進位制編碼的機器語言。當然,這個工作並不是有程式設計師來完成,而是有稱為「匯程式設計序」的程式自動完成的。匯程式設計序的功能就是把由組合語言編寫的程式(稱為組合語言源程式)翻譯成機器語言程式,計算機才能執行該程式。這個翻譯過程稱為彙編。

組合語言比起機器語言在很多方面都有很大的優越性,如編寫容易、修改方便、閱讀簡單、程式清楚等,但在計算機語言系統中,把組合語言仍然列入「低階語言」的範疇,它仍然是屬於面向機器的語言,也就是說,不同的計算機可以有不同的指令集。

程式語言(機器語言 組合語言 高階語言)

直接對硬體操作的語言,由多個0 1構成的。是低階語言底層。組合語言同機器語言一樣直接對硬體操作。組合語言雖麻煩,但是所能完成的操作不是一般高階語言能夠實現的。且生成的可執行檔案小,執行速度快 高階語言所編制的程式不能直接被計算機識別,必須經過轉換才能執行。按轉換方式又分為以下兩類 編譯類和解釋類語言...

機器語言 組合語言和高階語言之間的關係

看了一篇講解高階語言 組合語言和機器語言的部落格,感覺很受益,在這裡簡單總結一下。1.機器語言 計算機執行的二進位制命令,都是0和1表示的。2.組合語言 具有一定意義的文字命令,與機器語言一一對應。組合語言可以通過彙編得到機器語言,機器語言可以通過反彙編得到組合語言。彙編過程還包括變數記憶體管理,即...

機器語言社會到彙編社會

機器語言 最接近硬體的語言,有機器指令組成,機器指令是一串二進位制 機器把他們處理成電平脈衝,實現對硬體的驅動使他們執行。但是機器指令晦澀難懂,阻礙了行業的發展,一種新的處理方式的出現成為必然,這就是組合語言。例如 mov ax bx 把bx暫存器中的資料移動到bx暫存器中,就沒有必要寫諸如1110...