《计算机组成原理》----1.5 存储程序的概念
本節書摘來自華章出版社《計算機組成原理》一書中的第1章,第1.5節, 作 者 Computer Organization and Architecture: Themes and Variations[英]艾倫·克萊門茨(Alan Clements) 著,沈 立 王蘇峰 肖曉強 譯, 更多章節內容可以訪問云棲社區“華章計算機”公眾號查看。
1.5 存儲程序的概念
本節介紹存儲程序計算機其中會精確地描述直到20世紀70年代許多計算機還在采用的運行過程。今天的計算機已經偏離了這個簡單的模型,因為它們能夠并行地(甚至是亂序地)而不是串行地完成內部操作。下面的偽碼描述了存儲程序計算機的基本操作。
這段偽碼表明,從存儲器中取出每條指令都需要進行一次訪存操作(即讀存儲器)??梢杂孟旅娴膫未a描述“執行指令”這一動作:
在這臺機器上執行一條指令需要至少兩次訪存。第一次訪存是讀取指令。第二次訪存要么從存儲器中讀出指令需要的數據,要么將它之前的指令產生的或修改過的數據寫回存儲器。有時候也稱存儲程序計算機是按照讀取/執行(fetch/execution)周期的兩階段模式工作的。
因為每條指令必須兩次訪問存儲器,人們用“馮·諾依曼瓶頸”一詞表明CPU與存儲器之間的通路是存儲程序計算機的制約因素之一。人們設計了不同體系結構的機器來解決這一問題,后續章節將會介紹這些內容。
下面簡要介紹一下存儲程序計算機上執行的指令的格式。存儲程序計算機的一種直觀合理的指令格式可以用下面的形式表示
這里Operation表示要執行的指令的動作,Address1、Address2和Address3分別是3個操作數在存儲器中的位置。在這條一般性的指令中,操作數為數據的地址,而不是數據本身。
本書用粗體字表示地址是數據的目的地址而不是源地址。ADD P,Q,R是一條典型的三操作數指令,這里P、Q、R是三個存儲單元地址的符號名。操作數的書寫順序沒有嚴格標準。有些計算機使用destination, source1, source2的形式,另一些則使用source1, source2, destination的形式。
這個三操作數指令格式可用RTL符號表示為
Address2和Address3所指定的存儲單元的內容由指令所指定的二元操作(例如,加、減、乘,等等)處理。操作的結果保存在Address1所指的存儲單元中。圖1-13描述了這樣一條指令的執行過程,它一共需要4次訪存(即一次取指令,兩次取兩個源操作數,一次保存結果)。指令與操作數P、Q、R可存放在存儲器中的任何位置。
圖1-14描述了指令的4個字段與CPU、存儲器以及指令的執行方式之間的關系。這臺計算機只能執行4條指令并僅有8個可能的存儲單元(圖1-14中僅顯示了4個單元)。當前指令為ADD P,Q,R,它將存儲單元Q的內容與R的相加,并將結果保存在P中。該指令的二進制編碼為10011010001,存儲單元P、Q和R分別為011、010和001(二進制)或3、2和1(十進制)。
圖1-14描述了如何用操作碼選擇一個操作(四選一),用源地址選擇兩個存儲單元,以及用目的地址選擇寫回操作數的存儲單元。該圖還說明了加法指令執行期間所產生的信息流。后面我們還會看到操作碼如何被轉換為實現目標指令的動作序列。
1.兩地址指令
有些計算機實現了兩地址指令,其格式為
這里Address2為源操作數,Address1既是源操作數也是目的操作數。這種指令格式意味著從存儲器中讀出源操作數,對其進行操作,并將結果寫回存儲器中第一個源操作數的位置。指令ADD P,Q的RTL定義為
兩地址指令會破壞它的一個操作數。也就是說,它會用結果替換源操作數P。本書絕大部分章節都約定兩地址指令的格式為:
而在實際的計算機中,一般都不會允許同一條指令中使用兩個存儲地址。絕大多數計算機(如Pentium或更現代一些的Core i7處理器)都規定一個地址是存儲器地址,另一個地址是寄存器。寄存器是計算機內的存儲單元,其名如r0,r1,r2,...,r31,用來保存計算過程中生成的臨時數據。本書在介紹計算機的結構時會用大量篇幅介紹寄存器。
2.單地址指令
將指令數量減到最少的壓力使得第一代計算機沒能實現兩操作數指令。它們一般都實現了單地址指令,形如
由于指令中只提供了一個操作數地址而指令卻需要至少兩個地址,處理器不得不使用一個不需要顯式地址的第二操作數。也就是說,第二個操作數來自CPU內一個叫作累加器(accumulator)的寄存器。術語累加器今天已經很少使用了,因為現在絕大多數微處理器中都帶有幾個片上寄存器。圖1-15描述了一條單操作數指令執行過程中的信息流。操作結果將一直保存在寄存器中,直到另一條指令將它送入存儲器。這樣一臺計算機很難稱得上簡潔,如下面實現P = Q + R的序列所示。
在這個例子里,我們必須將第一個操作數Q載入累加器,與第二個操作數R相加,并將結果保存在第三個操作數P中。請注意累加器是怎樣成為瓶頸的,因為所有操作數都要流過它。
尋址方式是計算機指令集的一個重要特征,它是確定操作數位置的方法。例如,可以直接(即它的地址為1234)或間接(即寄存器5的內容是我們所需要的操作數的地址)給出操作數的位置。第3章和第4章將詳細介紹尋址方式。不過,在討論計算機體系結構時,有時我們并不希望指定實際的尋址方式,因此我們使用有效地址這種更一般的形式。例如,我們會說將有效地址處的數據載入寄存器r1中。之所以使用有效地址,因為它代表了生成操作數地址的所有不同方式,因而可以避免指定某個特定的尋址方式。
3.計算機的分類
前面已經指出,計算機中既擁有能夠存儲大量數據的主存,也擁有CPU內臨時保存中間結果的寄存器。第一代微處理器中大約有6個寄存器,而典型的現代微處理器可能有16個、32個或64個寄存器。我們可以按照計算機的指令處理數據的方式對計算機分類。如果一條指令能夠從存儲器中讀出源操作數,對數據完成某個操作,并將結果保存在存儲器中,那么這臺計算機就叫作是存儲器–存儲器型的。使用了Intel IA32 CPU(8086、Pentium、Core i7)的計算機具有寄存器–存儲器型體系結構,它們能夠處理兩個數據,其中一個位于存儲器中,另一個位于寄存器中(結果要么被寫回存儲器,要么被寫回寄存器)。
某些使用了ARM和MIPS CPU的計算機只能對寄存器中的內容進行操作,稱作是寄存器–寄存器型的。這些計算機必須通過LOAD指令將數據讀入寄存器并使用STORE指令將數據從寄存器送回存儲器。由于LOAD和STORE操作是僅有的存儲器訪問指令,這些計算機也經常被稱作load/store型計算機。后面我們還會看到寄存器–存儲器型計算機被歸為CISC機器一類,而load-store型計算機被歸為RISC機器一類。
當討論計算機體系結構的問題時,我們通常會用不同的微處理器作為例子。然而,由于希望學生們能夠理解程序是如何構造和執行的,我們一開始會將注意力集中在ARM處理器上。
總結
以上是生活随笔為你收集整理的《计算机组成原理》----1.5 存储程序的概念的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 江苏省教育厅与阿里云合作变革“智慧教育”
- 下一篇: 《C++ 开发从入门到精通》——1.3