① 機器語言是如何在計算機內部被執行的呢
你該看看這個:
一、引言
在計算機科學中,編程語言是用來編寫可被計算機運行的一系列指令(計算機程序)的人工語言。與英語等自然語言相類似,編程語言具有詞彙、語法和句法。然而,自然語言不適合計算機編程,因為它們能引起歧義,也就是說它們的詞彙和語法結構可以用多種方式進行解釋。用於計算編程的語言必須具有簡單的邏輯結構,而且它們的語法、拼寫和標點符號的規則必須精確。
編程語言在復雜性和通用程度上大相徑庭。有些編程語言是為了處理特定類型的計算問題或為了用於特定型號的計算機系統而編寫的。例如,FORTRAN和COBOL等編程語言是為解決某些普遍的編程問題類型而編寫的——FORTRAN為了科學領域的應用,而COBOL為了商業領域的應用。盡管這些語言旨在處理特定類型的計算機問題,但是它們具有很高的可移植性,也就是說它們可以用來為多種類型的計算機編程。其他的語言,譬如機器語言,是為一種特定型號的計算機系統,甚至是一台特定的計算機,在某些研究領域使用而編寫的。最常用的編程語言具有很高的可移植性,可以用於有效地解決不同類型的計算問題。像C、PASCAL和BASIC這樣的語言就屬於這一范疇。
二、語言類型
編程語言可劃分為低級語言和高級語言。低級編程語言或機器語言,是編程語言中最基礎的類型,能被計算機直接理解。機器語言的區別取決於製造商和計算機的型號。高級語言是在計算機能夠理解和處理之前必須首先翻譯成機器語言的編程語言。C、C++、PASCAL和FORTRAN都是高級語言的例子。匯編語言是中級語言,非常接近於機器語言,沒有其他高級語言所表現出的語言復雜程度,但仍然得翻譯成機器語言。
1、機器語言
在機器語言中,指令被寫成計算機能夠直接理解的被稱之為比特的1和0的序列。機器語言中的一條指令通常告訴計算機4件事情:(1)到計算機主存儲器(隨機訪問存儲器)的哪個位置去找一或兩個數字或者簡單的數據段;(2)要執行的一個簡單操作,例如將兩個數字加起來;(3)將這個簡單操作的結果存放在主存儲器的什麼位置;以及(4)到哪裡找要執行的下一條指令。雖然所有的可執行程序最終都是以機器語言的形式被計算機讀取,但是它們並非都是用機器語言編寫的。直接用機器語言編程極端困難,因為指令是1和0的序列。機器語言中的一條典型的指令可能是10010 1100 1011,意思是將存儲寄存器A的內容加到存儲寄存器B的內容中。
2、高級語言
高級語言是利用人類語言中的詞和句法的一套相對復雜的語句。它們比匯編語言和機器語言更類似於正常的人類語言,因此用來編寫復雜的程序更容易。這些編程語言允許更快地開發更龐大和更復雜的程序。然而,在計算機能夠理解之前,高級語言必須被稱之為編譯器的另外一種程序翻譯成機器語言。因為這個原因,與用匯編語言編寫的程序比較起來,用高級語言編寫的程序可能運行的時間更長,佔用的內存更多。
3、匯編語言
計算機編程人員使用匯編語言使機器語言程序編寫起來更簡單一些。在匯編語言中,每條語句大致對應一條機器語言指令。匯編語言的語句是藉助易於記憶的命令編寫的。在典型的匯編語言的語句中,把存儲寄存器A的內容加到存儲寄存器B的內容中這一命令,可以寫成ADD B, A。匯編語言與機器語言具有某些共同特徵。例如,對特定的比特進行操作,用匯編語言和機器語言都是可行的。當盡量減少程序的運行時間很重要時,程序員就使用匯編語言,因為從匯編語言到機器語言的翻譯相對簡單。當計算機的某個部分必須被直接控制時,如監視器上的單個點或者流向列印機的單個字元,這時也使用匯編語言。
三、高級語言的分類
高級語言通常分為面向過程的、函數式的、面向對象的或邏輯的語言。當今最常見的高級語言是面向過程的語言。在這種語言中,執行某個完整功能的一個或多個相關的語句塊組成一個程序模塊或過程,而且被給予諸如「過程A」的名稱。如果在程序的其他地方需要同樣的操作序列,可以使用一個簡單的語句調回這個過程。實質上,一個過程就是一個小型程序。一個大程序可以通過將執行不同任務的過程組合在一起而構成。過程語言使程序變得比較短,而且更易於被計算機讀取,但是要求程序員將每個過程都設計得足夠通用,能用於不同的情況。
函數式語言像對待數學函數一樣對待過程,並允許像處理程序中的任何其他數據一樣處理它們。這就使程序構造在更高、更嚴密的水平上得以實現。函數式語言也允許變數——在程序運行過程中可以被用戶指定和更改的數據符號——只被賦值一次。這樣,通過減少對語句執行的確切順序給予關注的必要性,就簡化了編程,因為一個變數沒有必要每次在一個程序語句中用到,都重新定義或重新賦值。函數式語言的許多觀點已經成為許多現代過程語言的關鍵部分。
面向對象的語言是函數式語言的發展結果。在面向對象的語言中,用來編寫程序的代碼和程序處理的數據,組合成叫做對象的單元。對象進一步組合成類,而類則定義對象必須具有的屬性。類的一個簡單例子就是書這個類。這個類中的對象可能是小說和短篇小說。對象還有某些與其相關的功能,稱為方法。計算機通過使用對象的某種方法來使用這個對象。方法對對象中的數據執行某個操作,然後將值返回給計算機。對象的類也可更進一步組合成層,而在層中一個類的對象可繼承另一個類的方法。面向對象的語言中所提供的這種結構,使面向對象的語言對於復雜的編程任務非常有用。
邏輯語言將邏輯用作其數學基礎。一個邏輯程序由一系列的事實與「如果……則」規則組成,來具體說明一系列事實如何可以從其他實事中推斷出來,例如:
如果X語句為真,則Y語句為假。
在這樣一個程序的執行過程中,一條輸入語句可以按照邏輯從程序中的其他語句推斷出來。許多人工智慧程序使用這種語言編寫。
四、語言的結構與成分
編程語言使用特定類型的語句或指令,來給程序提供功能結構。程序中的一條語句是表達一個簡單意思的基本句子,其目的是給計算機一條基本指令。語句對允許的數據類型、數據如何處理以及過程和函數的工作方式進行定義。程序員利用語句來操作編程語言的常見成分,如變數和宏(程序中的小型程序)。
數據聲明語句給予稱為變數的程序元素以名稱和屬性。變數在程序中可以賦予不同的值。變數可以具有的屬性被稱作類型,它們包括:變數中可能存儲什麼樣的值,值中使用何種程度的數值精度,以及一個變數可以如何以有組織結構的方式——如以表或數組的形式——代表一組比較簡單的值等等。在許多編程語言中,一種關鍵的數據類型是指示字。指示字變數本身沒有值;相反,它們含有計算機可以用來查找某個其他變數的信息——也就是說,它們指向另一個變數。
表達式是語句的一段,描述要對一些程序變數執行的一系列運算,如X+Y/Z,其中X、Y和Z為變數,運算方法為加和除。賦值語句給一個變數賦予得自某個表達式的值,而條件語句則指定要被測試、然後用於選擇接下來應該執行的其他語句的表達式。
過程與函數語句將某些代碼塊定義為以後可在程序中返回的進程或函數。這些語句也規定程序員可以選擇的變數與參數種類,以及當一個表達式使用過程或函數時代碼將返回的值的類型。許多編程語言也容許叫做宏的小型翻譯程序。宏把使用程序員定義的語言結構編寫的代碼段翻譯成編程語言可以理解的語句。
五、歷史
編程語言幾乎可以追溯到20世紀40年代數字計算機發明之時。最早的匯編語言,隨著商業計算機的推出,出現於20世紀50年代末。最早的過程語言是在20世紀50年代末到20世紀60年代初開發的:FORTRAN語言由約翰•巴克斯創造,然後由格雷斯•霍珀創造了COBOL語言。第一種函數式語言是LISP,由約翰•麥卡錫於20世紀50年代末編寫。這3種語言今天仍在廣泛使用,但經歷過大量修改。
20世紀60年代末,出現了最早的面向對象的語言,如SIMULA語言。邏輯語言在20世紀70年代中期隨著PROLOG語言的推出而變得廣為人知;PROLOG語言是一種用於編寫人工智慧軟體的語言。在20世紀70年代,過程語言繼續發展,出現了ALGOL、BASIC、PASCAL、C和Ada等語言。SMALLTALK語言是一種具有高度影響力的面向對象的語言,它導致了面向對象的語言與過程語言在C++和更近期的JAVA語言中的結合。盡管純粹的邏輯語言受歡迎的程度有所下降,但其變體以現代資料庫所使用的關系語言——如結構化查詢語言——的形式,變得至關重要。
② 學習編程好不好
不好學。未來發展十分不錯。
1、編程的課程比較抽象。
編程是依靠計算機進行運算,並最終得到相應結果的過程。需要將解決的問題思路、方法和手段讓計算機能夠根據人的指令一步一步去工作,完成某種特定的任務。這種人和計算體系之間交流的過程就是編程。編程的課程比較抽象,理解起來會有點困難。
2、編程更傾向於實操。
計算機專業的人對編程更有發言權,編程的理論性東西居多,但實際上陣時,全靠實際操作。所以如果沒有老師從旁指導,很難理解為什麼代碼要這樣寫?
3、編程學習需要花費時間。
計算機專業的學生學習編程會稍微輕松一些。但是計算機零基礎的人,建議先買本《計算機組成原理》或者《微機原理》看看,了解下計算機的體系結構。學習一門技術,需要花費長時間的心思和精力。
隨著互聯網和移動互聯網的發展,企業對於程序員的需求量也越來越大。編程的前景還是非常好的。