1. 程式人生 > >每天進步一點點,踏踏實實向著理想邁進

每天進步一點點,踏踏實實向著理想邁進

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

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

機器語言是直接用二進位制程式碼指令表達的計算機語言,指令是用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)表示累加器中的值,等等。

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

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