學習開發環境和編程語言:彙編語言和C語言的比較

今天來學習開發環境和編程語言。

CPU懂的機器語言

單片機的CPU從存儲器讀取程序,但是一次只能讀取一條指令,然後解釋每條指令,並執行。存儲器中保存的內容,不管是程序還是數據,都是二進制代碼“0”和“1”組成的字符串。指令二進制代碼告訴CPU要做什麼,而數據二進制代碼則是CPU操作或處理指令時要使用的值。CPU的操作包含加、減運算等指令。這些像密碼一樣排列的“0”和“1”字符串就是機器語言。比如圖1左邊顯示的就是一個機器語言指令,意思是“將2放入寄存器A(寄存器是CPU內部的儲存區域)。

CPU總是按存儲器地址的順序讀取指令代碼,除非遇到跳躍指令。例如,如果復位後的地址是0000,則從0000開始按0001、0002、0003的順序讀取並執行指令。也可以說,一個程序就是按處理要求排列一系列的機器語言。

CPU只能理解如上所述的機器語言。因此,爲了使CPU運行,就必須使用機器語言的程序。但是,機器語言不易爲人們識別和讀寫。因此,人們用了更簡單易懂的字符串來代替機器語言,這就是彙編語言。例如,在“給寄存器A賦值2”這樣的處理時,如果用匯編語言來表示,就很簡單,請看圖1的右邊部分。彙編語言中,用MOV字符串表示賦值,所以“給寄存器A賦值2”的處理就可用“MOV A,#02”表示。

image

圖1:機器語言和 彙編語言的比較

雖然彙編語言比機器語言更加簡單易懂了,但是人們讀起來還是挺難理解的。而且,彙編語言還存在另一個問題,就是不同的CPU,機器語言的描述方式也不同。因此,如果更換了CPU,就必須改寫與機器語言有着密不可分關係的彙編語言,工作量比較大。(以上例子中的機器語言和彙編語言均爲瑞薩的RL78族單片機中的語言。)

如上所述,每更換一次CPU都必須對程序進行改編,不但造成生產性低下,還加重了編程人員的負擔。

人性化的C語言

能夠解決上述問題的編程語言就是C語言。C語言具有不依存於特定的CPU,又具有程序移植性高等的特點。另外,由於編程時可使用人們熟悉的英文單詞,所以對編程人員來說C語言是最容易使用的編程語言。下面我們將C語言和彙編語言做一個簡單地比較。

image

圖2: 彙編語言和C語言的比較

雖然C語言不依存於CPU而且還是人們最容易使用的編程語言,但對於CPU來說,C語言卻是一種完全無法理解的語言。因此,就需要一種可以將C語言翻譯爲機器語言的軟件,這就是被稱爲編譯器 (編譯程序) 的軟件。 經過編譯器翻譯的程序的文件格式被稱爲目標文件格式。如果目標文件格式最終沒有被配置到存儲器中,CPU就無法執行該程序。

另外,近來由於程序越來越趨於複雜化,所以幾乎都採取了將一個程序分割爲多個C語言程序文件的結構。所以,還需要一個工具將多個目標文件格式彙總成一個機器語言並配置到存儲器上,能夠擔當起此重任的就是連接編輯程序(linkage editor,也被稱爲“linker(鏈接器)”)。

其實做爲一個學習者,有一個學習的氛圍跟一個交流圈子特別重要這裏我推薦一個C/C++基礎交流583650410,不管你是小白還是轉行人士歡迎入駐,大家一起交流成長。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章