數據尋址方式
數據尋址有多種,需要在指令中明確指出採用哪一種尋址方式,可以專門設置一個尋址方式特徵字段,或納入地址碼中。
形式地址 : 指令字中的地址
有效地址 : 操作數的真實地址
有效地址由形式地址根據尋址方式來確定。
在大多數機器中,指令字長 = 存儲字長 = 機器字長。
一、立即尋址
又稱爲立即數尋址,即指令中的形式地址部分不是一個操作數的地址,而是操作數本身,因此該指令的執行過程不需要尋址。
如指令 " ",將 放入 寄存器中,其中立即數可正可負,負數需要用補碼來表示。
特點
- 立即尋址的指令執行階段不訪存
- A 的位數限制了立即數的範圍
二、直接尋址
指令中的形式地址部分即爲有效地址,即 。
例如指令 " ",即是將 [20H] 地址中的數據傳輸到 AX 寄存器中。
特點
- 執行階段訪問一次存儲器
- A 的位數限制了該指令操作數的尋址範圍
- 操作數的地址不易修改
三、隱含尋址
指令中不直接給出操作數地址,操作數地址通常隱含在操作碼或某個(約定)寄存器中。
如 操作,即是默認另一個操作數在 中。將 地址中的數取出與 中的數進行加法運算。
四、間接尋址
指令中的形式地址不是操作數的地址,而是 “操作數地址的地址”。
其中在多次間址時,需要查看數據單元格中的第一位數據,如果爲 則表示繼續間址,如果爲 則爲真正地址。
特點
- 可以擴大尋址範圍
- 便於編制轉移程序
指令,表示跳轉到 單元中所指示的地址,爲間接尋址。正因爲這條間址指令,我們轉入子程序時只需修改 A 單元中數據,即可實現從子程序再跳轉回主程序的功能。
五、寄存器尋址
指令中的形式地址直接指出寄存器的編號,操作數存儲於寄存器中,即 ,有效地址即爲寄存器編號。
如 " " 指令,即是將 寄存器中的數據送到 中。
特點
- 執行階段不訪存,只訪問寄存器,執行速度快
- 寄存器個數有限,可縮短指令字長
六、寄存器間接尋址
指令中的形式地址爲寄存器的編號,寄存器的內容是操作數的有效地址。
,有效地址在寄存器中。
如指令 " ",就是根據 寄存器中的地址,去主存中訪問對應數據,並將數據存入 寄存器中。
特點
有效地址在寄存器中,操作數在存儲器中,執行階段訪存便於編制循環程序。
- 可以訪存一次,就將寄存器數值加1,實現類似於數組的訪問。
七、基址尋址
指令中的形式地址與基址寄存器內容之和爲有效地址。
- 採用專用寄存器作爲基址寄存器(隱式)
- 採用通用寄存器作爲基址寄存器(顯式)
專用寄存器基地尋址
,其中 爲基址寄存器
通用寄存器基址尋址
需要給出寄存器編號作爲基址寄存器。
- 可指定由哪個通用寄存器作爲基址寄存器。
- 在程序的執行過程中 內容不變,形式地址 可變。
特點
- 可擴大尋址範圍
- 有利於多道程序
- 將程序開頭地址定位於某個寄存器中,即可實現更換通用寄存器,即實現程序切換。
- 基址寄存器內容由操作系統或管理程序確定
八、變址尋址
指令中的形式地址與變址寄存器內容之和爲有效地址。
,與基地尋址非常相似。唯一的不同點在於基址寄存器中的值由操作系統或管理程序決定,而 IX 的內容由用戶指定。
特點
- 可以擴大尋址範圍
- 由於 的內容由用戶指定,因此在程序執行過程中, 內容可變,可以用於設計處理一些數組問題。
九、相對尋址
有效地址爲程序計數器 的值與形式地址之和。
, 的位數決定操作數的尋址範圍,可編寫浮動程序(程序放哪都能執行)。
十、堆棧尋址
堆棧有兩個操作,分別是 (壓棧) 與 (彈棧)。進棧與出棧的操作分別由 指針的加減完成。