從本章開始,程式語言從機器語言上公升到了組合語言。組合語言屬於低階語言,一般低階語言是「isa相關的」,而高階語言是「isa無關的」。彙編指令一般格式為:
label
opcode
operands
;comments
標號 操作碼 運算元 注釋
編寫組合語言需要在「彙編器」(assembler)中進行。
那彙編器是什麼呢?
彙編器是乙個軟體,這個軟體的主要功能是將組合語言「翻譯」成機器語言(即isa格式的機器指令)
我認為彙編器值得關注的地方是:1、彙編過程;2、偽操作的理解。
接下來我以自己的理解來闡述一下彙編器這個軟體工作的原理:
使用者在彙編器介面輸入相應的彙編指令;(當然此時鍵盤在不斷地接收輸入訊號,顯示器在不斷回顯輸入的字元,這個程式是作業系統寫好的程式)
使用者將所有的指令輸入完畢後,操作彙編器進行「翻譯」,彙編器中應該有乙個「指令表」(這個是作者自己猜測的,若有不對請指正),這個表說明了彙編指令對應的操作碼,如add對應0001;彙編器中還有乙個「符號表」,用來說明符號和位址之間的對映關係。彙編器進行翻譯時,會進行兩次掃瞄:
偽操作:即為彙編器指令。偽指令與指令的最大區別在於,偽指令只在編譯時起作用,而指令只能在程式執行時才發揮作用(這句話同樣適用於上文的lc與pc)。換句話說,偽指令對編譯器說話,而指令則是對cpu說話。
本章後記:說實話,作者學到這裡對於偽指令的工作原理還是不太能夠理解。為什麼偽指令能夠不生成實際的機器語言即可做出相應的控制:如程式初始位址,記憶體位址的值的初始化等等。我目前的理解是:組合語言和機器語言還是有乙個跳躍的。畢竟,彙編器是乙個軟體,需要工作在作業系統之下,而作業系統的概念我現在還完全沒有概念;回憶前幾章,其實也一直有乙個問題沒有解決:雖然前幾章說明了lc-3是如何執行指令的,但沒有說相應的機器語言指令最初是如何寫進記憶體的。
鑑於這些原因,我在本章選擇不糾結於此,希望在後面的章節中能夠解惑。
《深入理解計算機系統》第七章讀書筆記
前言 鏈結是將各種 和資料部分收集起來並組合成為乙個單一檔案的過程,這個檔案可被載入 或拷貝 到儲存器並執行。鏈結可以執行於編譯時,也就是在源 被翻譯成機器 時 也可以執行於載入時,也就是在程式被載入器載入到儲存器並執行時 甚至執行於執行時,由應用程式來執行。在早期的計算機系統中,鏈結是手動執行的。...
第七章讀書筆記
儘管linux 驅動直接與硬體打交道,但並不是 linux 驅動直接向硬體中的記憶體寫資料,而是與本機的 i o記憶體進行互動。所謂 i o記憶體是通過各種介面連線到主機的硬體在主機記憶體中的對映。led驅動與 word count 驅動的實現步驟類似,只是某些功能使用了不同的實現方法。對於解除安裝...
第七周讀書筆記 深入理解計算機系統
課程已經來到了第七周,經過了兩次大專案。在這兩次個人 結對專案裡,我深刻的感受到了自己在軟體工程 架構 對計算機系統的了解上所存在的不足。這一周我看的書是深入理解計算機系統,這本書從某種意義上來說,也可以說是計算機體系結構的教材之一,之所以選擇這本書,不僅是因為我對這個方面的很多知識很感興趣,而且也...