指令尋址與PC自增
一、指令尋址方式
定義:尋找下一條將要執行的指令地址的過程。
核心部件:程序計數器(PC),用于指示待執行指令的地址。
執行流程:
- CPU根據PC值從主存取指令。
- 取指后,PC自動自增,指向下一條指令。
- 跳轉指令會修改PC為目標地址,打破順序執行。
1. PC自增規則
PC自增取決于主存編址方式和指令字長:
- 按字節編址:
- 指令字長=1字節:PC = PC + 1
- 指令字長=4字節:PC = PC + 4
- 按字編址(假設字長=4字節):
- 指令字長=4字節:PC = PC + 1(以字為單位)
- 關鍵點:PC自增在取指階段完成后執行,確保指向下一條指令。
2. 跳轉指令
- 特點:PC不按順序自增,而是修改為跳轉目標地址。
- 示例:當前PC=100,指令為“跳轉到當前地址+3”,PC改為103。
- 常用尋址:相對尋址,EA = (PC) + A(PC已自增,A為相對位移量)。
- 8位補碼A的尋址范圍:(PC) - 128 ~ (PC) + 127
- 執行流程:
- 取指:從PC地址讀取跳轉指令。
- PC自增:按指令字長自增。
- 計算目標地址(EA):根據尋址方式(如相對尋址)。
- 修改PC:PC = EA,下一條指令從EA取指。
二、數據尋址方式
定義:尋找指令中操作數的真實地址(有效地址EA)。
指令格式:|操作碼OP|尋址特征|形式地址A|
核心:形式地址A不一定是EA,需通過尋址特征轉換。
1. 立即尋址
- 特點:A為操作數本身(立即數,補碼形式)。
- 優點:無需訪存,速度快。
- 缺點:A位數限制立即數范圍。
- 格式:|OP|立即尋址特征|立即數A|
2. 直接尋址
- 特點:A即EA(EA=A)。
- 優點:簡單,執行階段只需訪存一次。
- 缺點:A位數限制尋址范圍,修改地址需改A。
- 格式:|OP|直接尋址特征|A|
3. 隱含尋址
- 特點:操作數地址隱含在操作碼或寄存器(如ACC)中。
- 優點:縮短指令字長。
- 缺點:需額外硬件存儲隱含地址。
- 示例:一地址加法指令,ACC作為第二操作數。
4. 間接尋址
- 特點:A指向操作數地址的地址。
- 一次間接:A → 主存 → EA → 操作數
- 二次間接:A → 主存 → 中間地址 → EA → 操作數
- 優點:擴大尋址范圍(EA位數 > A位數)。
- 缺點:多次訪存,效率低。
5. 寄存器尋址
- 特點:A為寄存器編號,操作數在寄存器中(EA=Ri)。
- 優點:無需訪存,速度快。
- 缺點:寄存器資源有限且昂貴。
- 格式:|OP|寄存器尋址特征|Ri|
6. 寄存器間接尋址
- 特點:寄存器Ri存儲操作數的主存地址(EA=(Ri))。
- 優點:比間接尋址少一次訪存。
- 執行:訪問Ri取地址,再訪存取操作數。
- 格式:|OP|寄存器間接尋址特征|Ri|
7. 基址尋址
- 特點:EA = A + (BR),BR為基址寄存器。
- 關鍵:
- BR由OS管理,用戶不可修改。
- 支持多道程序設計和內存保護。
- 程序可浮動(通過修改BR)。
- 分類:
- 隱式:專用BR寄存器。
- 顯式:通用寄存器指定。
8. 變址尋址
- 特點:EA = A + (IX),IX為變址寄存器。
- 與基址尋址區別:
- IX用戶可修改,A固定。
- BR由OS管理,A用戶可修改。
- 應用:數組處理,A為數組首地址,IX修改訪問不同元素。
9. 相對尋址
- 特點:EA = (PC) + A,PC為下一條指令地址(已自增)。
- 應用:轉移指令,A為相對位移量(補碼)。
- 尋址范圍(8位A):(PC) - 128 ~ (PC) + 127
- 格式:|OP|相對尋址特征|A|
三、總結
- PC自增:按指令字長和編址方式(PC+1或PC+n)。
- 跳轉指令:修改PC為目標地址,常用相對尋址(EA=(PC)+A)。
- 尋址方式:
- 立即:操作數在指令中。
- 直接:A為操作數地址。
- 隱含:地址隱含在操作碼/寄存器。
- 間接:A為地址的地址。
- 寄存器:操作數在寄存器。
- 寄存器間接:寄存器存操作數地址。
- 基址:EA=A+(BR),OS管理BR。
- 變址:EA=A+(IX),用戶改IX。
- 相對:EA=(PC)+A,PC已自增。
示例分析
假設:
- 按字節編址,指令字長=4字節,當前PC=100。
- 跳轉指令(相對尋址),A=3。
- 取指:讀取PC=100的指令。
- PC自增:PC = 100 + 4 = 104。
- 計算EA:EA = 104 + 3 = 107。
- 修改PC:PC = 107,下一指令從107取。