原文地址 : https://blog.csdn.net/jxq0816/article/details/52610240
來自博主:姜興琪
1.隱含尋址
在指令中隱含着操作數的地址。
如單地址的指令格式,就不是明顯地在地址字段中指出第二操作數的地址,而是規定累加器ACC作為第二操作數,指令格式明顯指出的僅是第一操作數的地址。因此,累加器ACC對單地址指令格式來說是隱含地址。
隱含尋址的優點是有利於縮短指令字長;缺點是需增加硬件。
2.立即(數)尋址
這種類型的指針的地址字段指出的不是操作數的地址么事操作數本身,又稱為立即數。數據是用補碼形式存放的。
| OP | #(立即尋址特征) | A操作數本身 |
立即尋址的優點是指令在執行階段不訪問主存,指令執行時間短;缺點是A的位數限制了立即數的范圍。
3.直接尋址
指令字的形式地址地址A就是操作數的真實地址EA,即EA=A。
直接尋址的優點是簡單,指令在執行階段僅訪問一次主存,不需要專門計算操作的地址;缺點是A的位數決定了該指令操作數的尋址范圍,操作數的地址不易修改。
4.間接尋址
間接尋址是相對於直接尋址而言的,指令的地址字段給出的形式地址不是操作數的真實地址,而是操作數有效地址所在的存儲單元的地址,也就是操作數地址的地址,即EA=(A).
間接尋址可以是一次間接尋址,還可以是多次間接尋址。
主存第一位為1時,表示取出的仍不是操作數的地址,即多次間址;當主存第一位為0時,表示取出的是操作數的地址。
間接尋址的優點是可以擴大尋址范圍(優點地址EA的位數大於形式地址A的位數),便於編制程序(用間接尋址可以方便地完成子程序返回);缺點是指令在執行階段要多次訪問。
5.寄存器尋址
在指令字中直接給出操作數所在寄存器編號,即EA=Ri,其操作數在由Ri所指的寄存器內。
寄存器尋址的優點是指令在執行階段不訪問主存,只訪問寄存器,指令字段短且執行速度快,支持向量/矩陣運算;缺點是寄存器價格昂貴,計算機中寄存器個數有限。
6.寄存器間接尋址
寄存器間接尋址是指在寄存器Ri中給出的不是一個操作數,而是操作數所在主存單元的地址,即EA=(Ri)
寄存器間接尋址的特點是與一般間接尋址相比速度更快,但指令的執行階段需要訪問主存(因為操作數在主存中)。
7.相對尋址
相對尋址是把程序計數器PC的內容加上指令格式中的形式地址A而形成操作數的有效地址。即EA=(PC)+A,其中A是相對於當前地址的位移量,可正可負,補碼表示。
A的位數決定操作數的尋址范圍。
相對尋址的優點是操作數的地址不是固定的,它隨着PC的值得變化而變化,並且與指令地址之間總是相差一個固定值,因此便於程序浮動,相對尋址廣泛應用於轉移指令。
對於轉移指令JMPA,當CPU從存儲器中取出一個字節時,會自動執行(PC)+1->PC.若轉移指令的地址為X,且占2個字節,在取出該指令后PC的值會增2,即(PC)=X+2,這樣在執行完該指令后,會指定跳轉到X+2+A的地址繼續執行。
8.基址尋址
基址尋址是將CPU中基址寄存器(BR)的內容加上指令格式中的形式地址A,而形成操作數的有效地址,EA=(BR)+A。其中基址寄存器既可采用專用寄存器,也可以采用通用寄存器。
基址寄存器是面向操作系統的,其內容由操作系統或管理程序確定。在程序執行過程中,基址寄存器的內容不變(作為基地址),形式地址可變(作為偏移量)。當采用通用寄存器作為基址寄存器時,可由用戶決定哪個寄存器作為基址寄存器,但其內容仍由操作系統確定。
基址尋址的特點是可擴大尋址范圍(基址尋址的位數大於形式地址A的位數);用戶不必考慮自己的程序存於主存的哪一空間區域,故有利於多道程序設計,以及可用於編制浮動程序。
9.變址尋址
有效地址EA等於指令中的形式地址A與編制寄存器IX的內容相加之和,即EA=(IX)+A,其中IX為變址寄存器(專用),也可用通用寄存器作為變址寄存器。
變址寄存器是面向用戶的,在程序執行過程中,變址寄存器的內容可由用戶改變(作為偏移量),形式地址A不變(作為基地址)。
變址尋址的優點是可擴大尋址范圍(變址寄存器的位數大於形式地址A的位數),在數組處理過程中,可設定A為數組的首地址,不斷改變變址寄存器IX的內容,便可很容易形成數組中任意數據的地址,特別適合編制循環程序。
顯然,變址尋址與基址尋址的有效地址形成過程及其相似。但從本質上來講,兩者有較大區別。基址尋址主要用於為多道程序或數據分配存儲空間,故基址寄存器的內容通常由操作系統和管理程序確定,在程序的執行過程中其值不可變,而指令字中的A是可變的;變址尋址主要用於處理數組問題,在變址尋址中,變址寄存器的內容是由用戶設定的,在程序執行過程中,其值可變,而指令字中的A是不可變的。
10.堆棧尋址
堆棧是存儲器(或專用寄存器組)中一塊特定的按“先進后出(LIFO)”原則管理的存儲區,該存儲區中被讀、寫單元的地址是用特定的寄存器給出的,該寄存器稱為堆棧指針(SP)。堆棧可分為硬堆棧和軟堆棧兩種。
寄存器堆棧又稱為硬堆棧。寄存器堆棧的成本比較高,不適合做大容量的堆棧;而從主存中划出一段區域來做堆棧是最合算且最常用的方法,這種堆棧稱為軟堆棧。
在采用堆棧結構的計算機系統中,大部分指令表面上都表現為為無操作數指令的形式,因為操作數地址都隱含使用了SP。通常情況下,在讀寫堆棧中的一個單元的前后都伴有自動完成對SP內容的增量或減量操作。
| 尋址方式 | 有效地址 | 訪存次數 |
| 隱含尋址 | 程序指定 | 0 |
| 立即尋址 | A既是操作數 | 0 |
| 直接尋址 | EA=A | 1 |
| 一次間接尋址 | EA=(A) | 2 |
| 寄存器尋址 | EA=Ri | 0 |
| 寄存器間接一次尋址 | EA=(Ri) | 1 |
| 相對尋址 | EA=(PC)+A | 1 |
| 基址尋址 | EA=(BR)+A | 1 |
| 變址尋址 | EA=(IX)+A | 1 |
