《深入瞭解計算機系統》筆記——組合語言和機器語言
組合語言和機器語言
我們不需要完全瞭解掌握機器語言、組合語言來進行程式設計(這是計算機生產廠家要做的事)。我們所要知道的是如何看懂組合語言就行了。我們所編寫的高階語言,被翻譯成組合語言時,編譯器會自動進行一些優化處理。
機器語言
計算機是不能直接識別我們所編寫的C程式或者Java程式的。它只能識別機器語言,而機器語言是用二進位制程式碼表示的計算機能直接識別和執行的一種機器指指令系統令的集合。
但要用機器語言編寫程式,程式設計人員要首先熟記所用計算機的全部指令程式碼和程式碼的涵義。手程式設計序時,程式設計師得自己處理每條指令和每一資料的儲存分配和輸入輸出,還得記住程式設計過程中每步所使用的工作單元處在何種狀態。這個工作十分繁瑣且困難。編寫程式花費的時間往往是實際執行時間的幾十倍或幾百倍;並且編出的程式只是0和1的指令程式碼,直觀性差,還容易出錯。
這時候我們就需要用到組合語言了:
組合語言
組合語言的主體是彙編指令。彙編指令和機器指令的差別在於指令的表示方法上,彙編指令是機器指令便於記憶的書寫格式。
計算機是隻認識機器指令的,這時候我們就需要編譯器將組合語言轉換成機器指令的工具。
程式設計師->(輸入)彙編指令->編譯器->(轉化)機器碼->計算機
組合語言是直接面向處理器(Processor)的程式設計語言。
處理器是在彙編指令的控制下工作的,處理器可以識別每一條指令為機器指令。
組合語言另一個特點是是它所操作的物件不是具體的資料而是暫存器或者儲存器。(組合語言直接和暫存器和儲存器打交道),這也是組合語言比其他語言執行速度要快的原因(相應的也比其他語言更復雜)。
組合語言指令是機器指令的一種符號表示,而不同型別的CPU 有不同的機器指令系統,也就有不同的組合語言。因此組合語言程式與機器有著密切的關係。也正因如此,組合語言的通用性和可移植性要比高階語言程式低。
總結:對機器有相關性、高速度&效率、(相對於高階語言)編寫和除錯複雜
高階語言
高階語言並不是指一種語言,而是包括很多程式語言,比如Java、C、C++、C#、python等等,是高度封裝的程式語言。