当前位置: 首页 > news >正文

26-计组-寻址方式

指令寻址与PC自增

一、指令寻址方式

定义:寻找下一条将要执行的指令地址的过程。
核心部件:程序计数器(PC),用于指示待执行指令的地址。
执行流程

  1. CPU根据PC值从主存取指令。
  2. 取指后,PC自动自增,指向下一条指令。
  3. 跳转指令会修改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
  • 执行流程
    1. 取指:从PC地址读取跳转指令。
    2. PC自增:按指令字长自增。
    3. 计算目标地址(EA):根据寻址方式(如相对寻址)。
    4. 修改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)。
  • 寻址方式
    1. 立即:操作数在指令中。
    2. 直接:A为操作数地址。
    3. 隐含:地址隐含在操作码/寄存器。
    4. 间接:A为地址的地址。
    5. 寄存器:操作数在寄存器。
    6. 寄存器间接:寄存器存操作数地址。
    7. 基址:EA=A+(BR),OS管理BR。
    8. 变址:EA=A+(IX),用户改IX。
    9. 相对:EA=(PC)+A,PC已自增。

示例分析

假设:

  • 按字节编址,指令字长=4字节,当前PC=100。
  • 跳转指令(相对寻址),A=3。
  1. 取指:读取PC=100的指令。
  2. PC自增:PC = 100 + 4 = 104。
  3. 计算EA:EA = 104 + 3 = 107。
  4. 修改PC:PC = 107,下一指令从107取。
http://www.dtcms.com/a/276406.html

相关文章:

  • 暑假Python基础整理 -- 函数篇
  • 【6.1.2 漫画分布式事务技术选型】
  • 常用 pkill 命令速查表
  • CentOS 系统紧急恢复:从 lib64 目录崩溃到救援实战
  • vue3 canvas 选择器 Canvas 增加页面性能
  • 用FunctionCall实现文件解析(三):ChatOpenAI单例工厂
  • lnmp环境搭建
  • 使用Pycharm集成开发工具远程调试部署在虚拟机上的flask项目:超级详细的完整指南
  • springboot AOP面向切面编程
  • SpringAI实现聊天记录保存到MySQL
  • 连接池的核心接口和常用属性
  • ReentrantLock 源码解析与 AQS 扩展
  • 首次让机器人具备类人的「主动感知」能力
  • 淘宝商品评论API接口操作详解
  • oc分类和swift扩展有哪些区别
  • 火山引擎:字节跳动的技术赋能初解
  • AI智能体 | 使用Coze制作一键生成单词洗脑循环视频,一天批量生成100条视频不是梦!(附保姆级教程)
  • NW728NW733美光固态闪存NW745NW746
  • HashMap的原理
  • 技术面试问题总结二
  • 多模态大模型》多模态基础模型》多模态对齐、融合和表示
  • 关于数字签名
  • xml映射文件的方式操作mybatis
  • 集合类
  • 【2024CSP-J初赛】阅读程序(1)试题详解
  • python-while循环
  • Raft-领导者选举
  • import 和require的区别
  • python-range函数
  • jxWebUI--数据表