指令寻址与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取。