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

计组-间接寻址

间接寻址(Indirect Addressing)的过程详解

间接寻址是一种通过寄存器或内存单元中存储的地址来访问最终操作数的寻址方式。其核心思想是“地址的地址”,具体步骤如下:


(1)间址周期的操作流程

以指令 ADD R1, (R2) 为例(假设 (R2) 是间接寻址):

  1. 取指令阶段

    • CPU 从 PC(程序计数器)指向的内存位置取出指令 ADD R1, (R2),并解码发现目标操作数是间接寻址。

  2. 间址周期(核心阶段)

    • 步骤 1:CPU 读取寄存器 R2 中存储的值(假设 R2 = 0x1000),这是一个中间地址

    • 步骤 2:CPU 访问内存地址 0x1000,读取该地址中存储的最终操作数的地址(假设 [0x1000] = 0x2000)。

    • 步骤 3:将最终地址 0x2000 存入 MDR(Memory Data Register,内存数据寄存器),供后续执行阶段使用。

  3. 执行阶段

    • CPU 根据 MDR 中的地址 0x2000 访问内存,读取最终操作数的值(假设 [0x2000] = 42)。

    • 执行加法操作:R1 = R1 + 42


(2)间址周期结束后 MDR 的内容
  • MDR 存放的是从中间地址读出的最终操作数的地址(如上例中的 0x2000)。

    • 如果是多级间接寻址(如 ((R2))),MDR 可能存储下一级间接地址,需继续访存。


2. 指令 (MDR) + (R1) → R1 的详细解释

假设当前状态:

  • MDR = 0x2000(存储的是最终操作数的地址)。

  • [0x2000] = 42(内存地址 0x2000 中的值是 42)。

  • R1 = 10(寄存器 R1 的初始值)。

执行过程
  1. 读取 (MDR)

    • (MDR) 表示对 MDR 中的值 0x2000 进行间接访问,即读取内存地址 0x2000 中的内容 42

  2. 读取 (R1)

    • (R1) 表示直接读取寄存器 R1 的值 10(如果是 ((R1)) 则需间接寻址)。

  3. 加法操作

    • 计算 42 + 10 = 52

  4. 结果写回

    • 将结果 52 存入 R1,最终 R1 = 52

关键点
  • (MDR) 是间接寻址,需通过 MDR 中的地址访问内存获取操作数。

  • (R1) 是直接寻址,直接使用寄存器值。

  • 该指令的实际含义是:将 MDR 指向的内存单元的值与 R1 的值相加,结果存回 R1


3. 间接寻址的硬件支持

  • MAR(Memory Address Register):存储要访问的内存地址(如 0x1000 或 0x2000)。

  • MDR(Memory Data Register):临时存储从内存读出的数据(地址或操作数)。

  • 总线协作:地址总线传送 MAR 中的地址,数据总线传输 MDR 的内容。


4. 间接寻址 vs. 直接寻址

特性间接寻址直接寻址
操作数获取需多次访存(先取地址,再取数据)直接访问内存或寄存器
指令格式ADD R1, (R2)ADD R1, 0x2000
MDR 内容存储最终操作数的地址存储操作数本身(无需间址)

5. 实际应用场景

  • 函数指针调用:通过指针间接跳转到目标函数地址。

  • 动态数据结构:如链表的 next 指针通过间接寻址访问下一个节点。

  • 系统调用:内核通过间接寻址访问用户空间传递的指针参数。


总结

  1. 间接寻址过程

    • 先通过寄存器/内存获取中间地址,再通过该地址访问最终操作数。

    • 间址周期后,MDR 存储的是最终操作数的地址(需进一步访存获取值)。

  2. (MDR) + (R1) → R1

    • 表示将 MDR 指向的内存值(42)与 R1 的值(10)相加,结果(52)写回 R1。

  3. 硬件依赖:MAR/MDR 和总线协作完成间址访存。

http://www.dtcms.com/a/335198.html

相关文章:

  • 抽象代数 · 代数结构 | 群、环、域、向量空间
  • 【QT】常⽤控件详解(八) Qt窗⼝ 菜单栏 工具栏 状态栏 浮动窗口 五种内置对话框
  • Oracle数据库文件管理与空间问题解决指南
  • Java中 23 种设计模式介绍,附带示例
  • IO流-打印流
  • leetcode hot100数组:缺失的第一个正数
  • 洛谷B3924 [GESP202312 二级] 小杨的H字矩阵
  • 洛谷B3865 [GESP202309 二级] 小杨的 X 字矩阵(举一反三)
  • CSDN部分内容改为视频转到B站-清单
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘opencv-python’问题
  • Cloudflare Tunnel 使用SAAS回源加速配置教程
  • 配置 Docker 镜像加速,解决 docker pull 拉取镜像失败、docker search 查询镜像失败等问题
  • Agent中的memory
  • 异构数据库兼容力测评:KingbaseES 与 MySQL 的语法・功能・性能全场景验证解析
  • MySQL性能优化:10个关键参数调整指南
  • ISO27001 高阶架构 之 支持 -2
  • 概率论基础教程第3章条件概率与独立性(三)
  • 从频繁告警到平稳发布:服务冷启动 CPU 风暴优化实践00
  • implement libwhich for Windows
  • 全面解析Tomcat生命周期原理及其关键实现细节
  • 牛 CDR3 单抗:抗病毒领域的 “纳米级精准导弹”
  • 掌握长尾关键词优化SEO技巧
  • [创业之路-550]:公司半年度经营分析会 - 常见差距与根因分析示例
  • Hugging Face 与 NLP
  • 【JavaEE】(13) Spring Web MVC 入门
  • (论文速读)低光照图像增强综述(一)
  • Web全栈项目中健康检查API的作用(现代云原生应用标准实践)(health check、healthcheck、livenessProbe、健康探针)
  • 从舒适度提升到能耗降低再到安全保障,楼宇自控作用关键
  • 机器学习——PCA算法
  • 《软件工程导论》实验报告五 设计建模工具的使用(一)类图