計算機組成原理:史上最全尋址方式集合

史上最全尋址方式集合

話不多說,直接上我們這次說的主題:尋址方式
尋址方式中,我們的大框架可以分爲兩種:指令尋址數據尋址,來看看吧!
提前術語說明:
(A)指的是A所指向的單元地址。

指令尋址

指令尋址比較簡單,分爲兩種,順序尋址跳躍尋址
順序尋址: 通過程序計數器PC加1,自動形成下一條指令的地址;
跳躍尋址: 通過轉移類指令實現。
在這裏插入圖片描述從上圖中我們可以看到,從指令地址0,1,2,3一直是順序尋址,從3跳躍到7是跳躍尋址,指令爲JMP 7。

數據尋址

數據尋址方式很多,基本原理是地址碼僅僅是形式地址,我們這裏記爲A,真實地址我們幾位EA,還有幾位表示尋址特徵。

1.立即尋址
這種尋址方式形式地址就是操作數本身,也叫立即數
優點: 尋址簡單,不必訪問存儲器。
缺點: 位數有限,限制了操作數的範圍。

2.直接尋址
這種尋址方式的形式地址A就是操作數的地址EA(EA=A),在這種尋址方式中,執行階段訪問一次存儲器。
優點: 尋址簡單,無需計算操作數地址。
缺點: A的位數限制了尋址範圍,且需要修改A的值才能修改操作數地址。

3.隱含尋址
隱含尋址是指指令字不直接給出操作數,而操作數是隱含在寄存器或操作碼中。
在這裏插入圖片描述
這個例子是一個一地址格式加法指令,其中一個操作數的地址有A直接給出,另一個操作數隱含在累加器ACC中。
優點: 一個操作數隱含在寄存器或操作碼中,便可減少地址數目,有利於縮短指令字長。
缺點: 同樣的,A的位數限制了尋址的範圍。

4.間接尋址
在這種尋址方式中,形式地址A不再直接是操作數的地址,而是知道指出操作數地址所在的地址,操作數的地址由形式地址A間接提供,爲間接尋址。另一方面,間接尋址不一定只有一次尋址,也有可能多次間接尋址。例如:
在這裏插入圖片描述
圖(b)中就是兩次間接尋址,即EA=((A)),在多次間接尋址中,我們會足以到(A)首位爲1,表示間接尋址未結束,爲0就是改地址內容就爲操作數的地址。
優點: 擴大了操作數的尋址範圍,在前面的尋址方式中,直接利用形式地址A來進行尋址,但是我們知道A小於指令字長,我們姑且認爲指令字長與存儲字長相同,我們不妨設字長均爲16位,A爲8位,由此,前面三種尋址範圍僅爲28,而利用間接尋址,我們的尋址範圍可以達到216,即使是間接尋址,也有215;另一方面,從編程序角度來講,間接尋址是十分方便的,如圖
在這裏插入圖片描述
我們可以十分簡單的完成子程序的返回(JMP@A可以無條件轉回原地址,如81,202)。
缺點: 在我們的指令執行階段,我們至少得訪問存儲器兩次,多次尋址則更多。

5.寄存器尋址
顧名思義,形式地址A指出的是寄存器的編號,操作數在該寄存器中
優點: 無需訪存,指令字短,有效地縮短指令中某個地址段的位數。

6.寄存器間接尋址
顧名思義,就是形式地址A指出寄存器編號,寄存器中存放有操作數的地址EA,由EA找到操作數。這種尋址方式比間接尋址少訪存一次。

7.基址尋址
接下來是重頭戲,基址尋址需要設有專門的基址寄存器BR,操作數的有效地址EA等於指令字中的形式地址A與基址寄存器BR中的內容相加,BR中的內容我們將其稱爲基地址
在這裏,我們有一些重要的概念需要區分:
1.BR的內容是由操作系統或者是管理系統確定的,從這個層面上來講BR的內容是可變的,當程序執行時,我們的BR中的內容是不變的。
2.基址尋址是面向系統的。
3.基址尋址在多道程序中極爲有用。用戶不必考慮自己的程序位於主存的哪個位置,完全由操作系統或管理程序根據主存的使用狀況,賦予基址寄存器一個初始值。

8.變址尋址
變址尋址與基址尋址非常的相似,變址尋址的專用寄存器爲IX,操作數的有效地址EA等於形式地址A與變址寄存器IX的內容相加。
但是變址尋址與基址尋址的區別還是相當大的,這種區別要從本質上來看:變址尋址中,由形式地址A提供的基準量是不變的,變址寄存器IX中的內容由用戶設定,在程序執行時他的值可變,這種方式山東大學計算機組成原理實驗,基準量(A)相當於數組的首地址,(IX)相當於數組的下標;而基址尋址則是由指令提供位移量,寄存器BR提供基準量,這一點主要用於爲程序和數據分配存儲空間:由於指令中形式地址A的位數限制,無法實現對主存的全盤訪問,但是將主存分爲若干個訪問段,每一個段的首地址存入BR中,形式地址A則是段內的地址,對於調用程序時,BR內的值是可變的,但是一旦調入,BR的值不變。從這個層面上來說,基址尋址面向操作系統的尋址方式,變址尋址面向用戶的尋址方式。
當然,變址尋址可以與其他的尋址方式結合使用,對於各類機器需要注意。

9.相對尋址
相對尋址是將程序計數器PC中的值(當前指令的地址)與指令字中的形式地址相加得到的操作數的地址EA,即EA = (PC) + A。
在這裏插入圖片描述
在這個圖中,形式地址A其實就是操作數地址相對於當前地址的距離。
但是在相對尋址方式中,每當CPU取出一個字節是,PC = (PC) + 1,或者這樣來講不是很直觀,我們來舉個例子
假設一個相對尋址的指令是三個字節,後兩個字節是相對位移量,低字節地址爲字地址,PC當前值是360(十進制),要轉到410,那麼取出指令後,PC = (PC) + 3(一個指令爲三個字節),偏移量爲2FH,A佔據後兩個字節,並且按低字節地址爲字地址編址,那麼二三字節的值爲2F00H。

10.堆棧尋址
堆棧尋址跟計算機中的堆棧硬件有關,比如寄存器組或者主存的一部分空間。堆棧的一些性質相信不用我多數說。
這裏,我們就用主存的部分空間說說堆棧:我們用一或兩個寄存器來作爲堆棧指針SP,用於指出棧頂地址,操作數只能從棧頂地址的存儲單元取出。
在這裏插入圖片描述
當壓入棧時,SP = (SP) - 1,出棧時,SP = (SP) + 1。
當然,SP的修改與主存的編址方式有關,若是按字節編址,修改量爲1;若是16位,修改量爲2;32位,修改量爲3。

到這裏,基本上所有的尋址方式都在這裏了。

學這玩意兒,真是麻煩到舌燦蓮花,口吐芬芳…

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