尋址方式是指尋找指令或操作數有效地址的方式,尋址方式分為指令尋址和數據尋址兩大類。
指令中的地址碼字段並不代表操作數的真實地址,這種地址成為形式地址A,由形式地址結合尋址方式,可以計算出操作數在存儲器中的真實地址,這種地址稱為有效地址EA
其中(A)代表地址為A的數值。
指令尋址和數據尋址:
1.指令尋址:
1)順序尋址:通過程序計數器PC加一(一個指令字長),自動形成下一條指令的地址。
2)跳躍尋址:通過轉移類命令實現,下一條指令的地址不由PC自動給出,而是由當前指令給出指令地址的計算方式,跳躍的結果是當前的指令修改PC的值,所以本質上下一條指令仍通過PC給出
2.數據尋址:
數據尋址的方式較多,為區分各個方式,通常在指令字中設置一個字段,用指明屬於那種尋址方式。
常見的數據尋址方式:
1.隱含尋址:
這種類型的指令不指明操作數的地址,而在指令中隱含操作數的地址
優點:可以縮短指令字長,缺點:需要增加存儲操作數或隱含地址的硬件。
2.立即尋址:
地址字段給出的不是操作數的地址,而是操作數本身,又稱立即數,采用補碼表示。
優點:指令在執行階段不訪問主存,執行時間最短。缺點:A的位數限制了立即數的范圍
3.直接尋址:
指令字的形式地址A是操作數的真實地址EA,及EA=A
優點:簡單,在執行階段只訪問一次主存。缺點:A的位數決定了操作數的尋址范圍,操作數的地址不易修改
4.間接尋址:
指令的地址字段給出的形式地址不是操作數的真正地址,而是操作數有效地址所在存儲單元的地址,即是操作數地址的地址,即EA=(A)
優點:可以擴大尋址范圍。缺點:在指令的執行階段要訪問多次主存
5.寄存器尋址:
寄存器尋址是指指令字中直接給出操作數所在的寄存器編號,即EA=R,其操作數由R所指的寄存器中:
優點:指令在執行階段不用訪問主存,由於寄存器數量少,對應的地址碼長度少,執行速度快。
缺點:價格昂貴,寄存器的數量有限。
6.寄存器間接尋址:
寄存器R中給出的不是操作數,而是操作數所在主存單元的地址,即EA=(R)
優點:與一般的間接尋址相比速度更快。缺點:指令的執行階段需要訪問主存。
7.相對尋址:
相對尋址是把PC的內容加上指令格式中的形式地址A而形成操作數的有效地址,即EA=(PC)+ A
相對尋址的操作數地址不是固定的,它隨PC值的變化而變化,且指令地址之間總是相差一個固定值,因此便於程序的浮動。
相對尋址被廣泛的用於轉移指令。
8.基址尋址:
基址尋址是CPU中的基址寄存器(BR)的內容加上指令格式中的形式地址A,而形成的有效地址,即EA=(BR)+ A
基址寄存器是面向操作系統的,其內容有操作系統或管理員確定,主要用於解決程序員邏輯空間與存儲器物理空間的無關性
9.變址尋址:
變址尋址是指有效地址EA,等於指令字中的形式地址A與變址寄存器IX的內容之和,即EA=(IX)+ A。IX為變址寄存器(專用)
變址寄存器是面向用戶的,在程序的執行過程中,變址寄存器的內容可有用戶改變(作為偏移量),形式地址A不變,作為基地址。
變址尋址與基址尋址:
基址尋址面向系統,主要用於為多道程序或數據分配存儲空間,因此基址寄存器的內容通常由操作系統或管理程序確定,在程序的執行過程中其值不變,而指令字中的A是可變的。
變址尋址立足於用戶,主要用於處理數組問題,在變址尋址中,變址寄存器的內容由用戶確定,在程序執行過程中其值可以改變,而指令字中的A是不可變的。
九大數據尋址方式比較: