尋址方式的概念
- 指令或操作數在存儲器中的地址:某個操作數或某條指令存放在某個存儲單元時,其存儲單元的編號
- 在存儲器中,操作數或指令字寫入或讀出的方式,有:地址指定方式、相聯存儲方式和堆棧存取方式
- 采用 地址指定方式 形成操作數或指令地址的方式,稱為尋址方式
- 尋址方式分為 2 類,即:指令尋址方式 和 數據尋址方式
指令尋址方式
指令的尋址方式有 2 種:① 順序尋址方式;② 跳躍尋址方式
順序尋址
- 程序的指令序列在主存順序存放,當執行一段程序時,通常是一條指令接一條指令的順序執行
- 即從存儲器取出第一條指令,然后執行這條指令
- 接着從存儲器取出第二條指令,在執行第二條指令
- 接着再取出第三條指令
- ……
- CPU中設置 [程序計數器PC (又稱指令指針寄存器)] 對指令的順序號進行計數。PC開始時存放程序的首地址,每執行一條指令,PC 加 "1",指出下條指令的地址,直到程序結束
- 演示
跳躍尋址
- 當程序要轉移執行的順序時,指令的尋址就采取跳躍尋址方式
- 跳躍,又稱跳轉,是指下條指令的地址碼不是由程序計數器給出,而是由本條指令給出
- 注意!程序跳躍后,按新的指令地址開始順序執行;指令計數器的內容也必須相應改變,以便及時跟蹤新的指令地址
- 演示
數據尋址方式
隱含尋址
- 有些指令的操作碼中不僅包含了操作的性質,還隱含了部分操作數的地址
- 舉例:MUL BL
- 乘法指令MUL,在這條指令中只需指明乘數的地址,被乘數以及乘積的地址是隱含且固定的
- 把AL中的內容與BL中的內容相乘,乘積送到AX寄存器,即 AL x BL → AX
立即尋址
直接尋址
- 操作數位於存儲器中,操作數所在的存儲器單元的地址存放在指令的地址字段A中,即:
- DATA = (EA):指令字中的 形式地址A 就是操作數的 有效地址E
- EA = A:該類指令中的 形式地址A 又稱為 "直接地址"
- 操作數的字長取決於指令中的另一個寄存器操作數,e.g. AX → 讀2個單元,AL/AH → 讀1個單元
寄存器直接尋址
存儲器直接尋址方式
- 一般簡稱直接尋址方式,其指令地址碼字段直接給出存放在存儲器中操作數的存儲地址
- 舉例
- 特點
- 提供訪問主存的操作
- 獲得數據要訪問主存,指令執行速度慢
- 地址字段的位數決定了訪存空間大小
間接尋址
- 倘若指令字中的形式地址不直接指出操作數的地址,而是指出操作數有效地址所在的存儲單元地址,也就是說,有效地址是由形式地址間接提供的,即為間接尋址,即 DATA = (EA),EA = (A),A為操作數地址的地址
- 直接尋址 & 間接尋址
寄存器間接尋址
- 寄存器間接尋址時,地址碼字段給出的是寄存器編號R。需先訪問寄存器,從寄存器讀出操作數地址后,再訪問存儲器才能取得操作數
- EA = (R),即Data = (EA) = ((R))
- 特點
- 解決了直接尋址方式下地址字段的位數限制訪存范圍大小的問題
- 獲得數據只需訪問主存1次
- 寄存器尋址 & 寄存器間接尋址
存儲器間接尋址
- 存儲器間接尋址時,地址碼字段給出的是操作數主存地址的地址。需訪問兩次存儲器才能取得數據,第 1 次先從存儲器讀出操作數地址,第 2 次才能根據讀出的操作數地址再取出真正的操作數
- EA = (A),即 Data = (EA) = ((A))
- 特點
- 解決了直接尋址方式下地址字段的位數限制訪存范圍大小的問題
- 獲得數據要訪問主存 2 次,指令執行速度太慢
相對尋址
- 所謂相對尋址方式,是指根據一個 {基准地址} 及其 {相對量} 來尋找操作數地址的方式
- 根據基准地址的來源不同,它又分為 [基址方式] 、[變址方式] 以及 [PC相對尋址方式]
PC相對尋址
- PC相對尋址方式,一般簡稱相對尋址方式,是指將 程序計數器PC 的內容(即當前執行指令的地址)與地址碼部分給出的位移量Disp通過加法器相加,所得之和作為操作數的有效地址的方式
- EA = (PC) + Disp
- 舉例
- 特點
- 可節省指令中的地址位數,便於程序在內存中成塊移動
- 注意PC的改變對計算E的影響,+指令字長
基址尋址
- 計算機設置一個寄存器,專門用來存放基准地址,該寄存器就是 基址寄存器(RB)。RB既可在CPU中專設,也可由指令指定某個通用寄存器擔任
- 基址尋址方式是將CPU中基址寄存器RB的內容加上指令格式中的形式地址A而形成操作數的有效地址
- EA = (RB) + Disp // 地址碼A 在這種方式下通常被稱為位移量(Disp)
- 特點
- 使用基址寄存器(位數比通用寄存器多) 可以訪問更大的主存空間
- 對某一程序而言,基址值設定后不變,故要訪問不同數據需修改 Disp,而 Disp 又是指令的形式地址部分的值,所以必須要改變指令
變址尋址
-
變址尋址方式與基址尋址方式計算有效地址的方法很相似,它把CPU中某個 變址寄存器(RI) 的內容與 Disp 相加來形成操作數有效地址
-
使用變址尋址方式的目的不在於擴大尋址空間,而在於實現程序塊的規律性變化
-
EA = (RI) + Disp
-
特點
- 不改變指令即可改變數據的有效地址,可在循環中使用
- 在字符串處理,向量運算等等成批數據處理中非常有用
-
變址尋址 & 基址尋址區別
- 采用 [基址尋址] 時,基址寄存器提供地址基准量,指令提供偏移量
- 采用 [變址尋址] 時,變址寄存器提供修改量,指令提供基准量
堆棧尋址
堆棧尋址主要用來暫存中斷和子程序調用時現場數據及返回地址
- 存儲器堆棧
- 堆棧的結構
數據尋址方式總結
例題