天天看點

《計算機系統:系統架構與作業系統的高度內建》——2.2 如何設計指令集

本節書摘來自華章計算機《計算機系統:系統架構與作業系統的高度內建》一書中的第2章,第2.2節,作者:(美)拉姆阿堪德蘭(ramachandran, u.)(美)萊希(leahy, w. d.)著, 更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

計算機由計算的機器演化而來,在早期的計算機設計中,指令集的選擇很大程度上由硬體能否實作這些指令來決定。這是因為當時的硬體非常昂貴,而程式都是直接用彙編語言寫成的。是以,指令集的設計很大範圍内是電子工程師的工作,因為他們對硬體實作的可行性有非常好的想法。然而,硬體成本降低了,程式設計也日趨成熟,進階語言被開發出來,是以問題從硬體實作的可行性轉移到指令是否實際有用上來,即指令是否有利于用進階語言編寫出高效而緊湊的程式。

事實證明,指令集負責安排處理器内部做什麼,而計算機使用者很少需要直接和指令集打交道。毫無疑問,當你在玩視訊遊戲的時候,你不會關心處理器正在執行什麼指令。用彙編語言寫程式比用進階語言寫程式容易出錯是共識。

從人工手寫彙編語言程式到編譯器将進階語言程式轉換為機器代碼的變化是指令集體系結構演化的主要原因。這個變化意味着我們将尋求一個簡單的指令集使進階語言結構能夠轉化為高效代碼。

這裡有一點需要注意,指令集的優雅是非常重要的,體系結構領域在這個方向上做了大量工作。然而,與此同等重要甚至需要首先關注的是指令集實作的效能。具體來說,在努力實作更簡單、更快的指令集的時候,指令集體系結構的規律性是一個非常值得考慮的因素。我們在第3章和第5章讨論實作細節的時候還會再提到這一點。

雖然每種進階語言都有其獨特的文法和語義特性,但我們依然可以找出一組在大部分進階語言中都存在的基本功能。我們首先要做的就是找出這樣一組功能。我們以編譯這樣的功能作為讨論和開發指令集的基本動機。正如我們在本章開頭提到的那樣,除了編譯進階語言結構之外,指令集還受到許多其他因素的影響。我們将在2.11節讨論這些因素。