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

考研408《计算机组成原理》复习笔记,第四章(2)——指令寻址和数据寻址

一、寻址概念

看图,重点就是:

寻址】就是:【指令寻址】【操作数寻址】

  • 【指令寻址】包括:
    • 【顺寻寻址】【跳跃寻址】(后面细学)
  • 【操作数寻址】包括:
    • 【立即寻址】【直接寻址】【间接寻址】【寄存器寻址】【寄存器间接寻址】【相对寻址】【变址寻址】.......(后面细学)

二、指令寻址

1、顺序寻址

知识点:

  • 读取指令依靠【PC】,它存的是【下一条预执行指令】
  • 记住以后【PC】自增不再单纯是【PC = PC + 1】,要写成PC = PC + “1”,因为这个+ “1”】其实是【下一条指令的起始位置
  • 比如:若一个计算机【按字节编址】
    • 若【1条指令】刚好就是【1字节】,那么满足【PC = PC + 1】
    • 若【1条指令】是【2字节】,那么则是【PC = PC + 2】

2、跳跃寻址

知识点:

  • 【下一条预执行指令】不再依靠【PC】获得,而是依靠【上一条指令要求去哪】获得    
  • 比如:若一个计算机【按字节编址】
    • 若【1条指令】刚好就是【1字节】,那么满足【PC = PC + 1】
    • 然而【PC】执行在执行第一条指令时【控制器的CU】译码后发现要执行【跳转到指令0x18】
    • 所以命令【PC】马上跳去【0x18】,【PC】也没办法,只能跳过0x17、直接跳到0x18

三、操作数寻址

1、概念重点!!

前面我们刚学指令概念的时候,说指令的结构是【操作码OP + 地址码A】

现在学到了寻址,我们就要在原基础上再分出一个结构【寻址方式 M(method)】

那么对应不同的【寻址方式】,会有不同的【二进制代码】,比如:

  • 其中我们通常把【指令中的 “形式地址”】标作【A】
    • (有的教材也会把【指令中的 “形式地址”】标作【D】)
  • 真实存放在【主存】或【CPU寄存器】的这种数据地址叫做【EA】

2、六种简单操作数寻址

1)立即寻址

重点是:

  • 【指令的 “形式地址”】:存的就是【操作数本身
  • 存时:操作数】和【指令】都 一起 放在【主存
  • 取指令时:操作数】和【指令】一起放在IR(只有“立即寻址”这样,别的都没有)
  • 执行指令时:【直接从IR取出  指令+操作数  执行】

2)直接寻址

重点是:

  • 【指令的 “形式地址”】:存的是【操作数的主存地址
  • 存时:操作数】和【指令】都 分开 存放在【主存
  • 取指令时:只有【指令】放到【IR
  • 执行指令时:IR取指令执行】主存取数据】

3)间接寻址

重点是:

  • 【指令的 “形式地址”】:是【操作数的间接地址
    • (立即寻址是【操作数本身】)
    • (直接寻址是【操作数的主存地址】)
  • 存时:操作数】和【指令】都 分开 存放在【主存
  • 取指令时:只有【指令】放到【IR
  • 执指令行时:IR取指令执行】
    • 先去根据【形式地址】到【主存】取【操作数的有效地址】
    • 根据【操作数的有效地址】到【主存】取【操作数数据】
  • 干嘛要这么麻烦?原因就是:
    • 扩大了数据【寻址的范围】!!!!
    • 对比【直接寻址】和【间接寻址】可以发现:
      • 【直接寻址】里【数据的有效地址】直接就在【形式地址】给出了,但是【形式地址】大小有限,限制了【寻址范围】
      • 【间接寻址】里【数据的有效地址】是在【主存】,先去【主存】找到【数据的有效地址】,再找到【数据】,那明显【主存的大小】会比【形式地址的大小】大(就好比:你问你朋友要个电影来爽爽,但是如果你朋友直接发个 “网盘链接” 你,你能看的电影量就很少那他要是给你一个 “资源分享网站”,那你在那还能看到别的网友分享更多的 “网盘链接”,网盘链接里又有很多很多电影

4)寄存器寻址

重点是:

  • 【指令的 “形式地址”】:是【操作数所在的寄存器编号
    • (立即寻址是【操作数本身】)
    • (直接寻址是【操作数的主存地址】)
    • (间接寻址是【操作数的间接地址】)
  • 【存时】:完全分开 存放,操作数】在【CPU寄存器】指令】在【主存】
  • 【取指令时】:依旧只有【指令】放到【IR
  • 【执行指令时】:IR取指令执行】【CPU寄存器取数据】

5)寄存器间接寻址

重点是:

  • 【指令的 “形式地址”】:是【操作数地址所在的寄存器编号
    • (立即寻址是【操作数本身】)
    • (直接寻址是【操作数的主存地址】)
    • (间接寻址是【操作数的间接地址】)
    • (寄存器寻址是【操作数所在的寄存器编号】)
  • 【存时】:操作数】和【指令】都 分开 存放在【主存
  • 【取指令时】:依旧只有【指令】放到【IR
  • 【执行时】:【IR取指令执行】
    • 先根据【形式地址】去找到含有【数据主存地址】的【CPU寄存器】
    • 然后再根据【数据在主存地址】去【主存】取出执行

6)隐含寻址

重点是:

  • 不管需要几个操作数,总有一个隐含放在【ACC累加寄存器】,无需【形式地址】提供
    • ​​​​​​​减少了【指令字长】,不过就得增加存这个隐含地址的寄存器

可以回顾【一地址指令】:

总结

3、其他重要复杂寻址方式

重要,我们需要知道它们的【寻址数据过程】和【怎么算操作数地址】就行

那么我还是把有用的重点写在最前面,你看完之后爱看配图看配图,不爱看你也大概知道什么意思了

1)偏移寻址

首先记住这三种寻址方式都叫【偏移寻址】

  • 他们的指令的 “形式地址”】存的都是【偏移量
  • 寻找操作数的方式都是——【某个寄存器的值】+【形式地址(偏移量)】
【相对寻址】

重点:

  • 1、【指令的 “形式地址”】:【相对于当前PC值】-【真实操作数主存地址】所差的【偏移量
    • ​​​​​​​比如:当前PC=2真实数据地址在 4【形式地址】=【偏移量】= 4 - PC = 2
  • 2、【存时】:操作数】和【指令】都 分开 存放在【主存
  • 3、记住:有效地址 = 当前PC + 形式地址 (偏移量)
    • 写作:EA = (PC) + AEA = (PC) + D(A/D都是表示 “形式地址”)
    • 注意:PC的值往往是执行完一条指令后【自增】后的结果
      • 如果题目直接给出【PC=?】,那么直接【EA = (PC) + A】
      • 如果题目没有给出PC的值,那么要在上一条指令执行完的结尾地址基础【+ “1”】                                                                
  • 例子
 【基址寻址】

重点是:

  • 1、单独专门用一个【基址寄存器】来存储一个【基地址】
    • 基址寄存器】可以是【专用寄存器BR
    • 基址寄存器】也可以是【通用寄存器R
  • 2、【指令的 “形式地址”】:【当前基址寄存器 BR 值】-【操作数主存地址】所差的【偏移量
  • 3、基址寄存器值】+【形式地址(偏移量)】才构成——>【操作数主存地址
    • 写作:EA = (BR) + AEA = (BR) + D
  • 4、【指令结构】会多一个【存储器编号】
  • 5、【基址寄存器】是面向 操作系统OS管理程序 的,不能由用户更改
    • 所以【基址寄存器BR】的地址不可变!!
    • 【形式地址A(偏移量)】可以变
  • 6、每一个程序都可以有一个自己的基址寄存器
    • 从而用户只用关心当前程序存在主存什么位置
    • 利用了【多道程序设计】,可用于【编制浮动程序

【变址寻址】

重点是:

  • 1、单独专门用一个【变址寄存器 I】来存储一个【基地址】
  • 2、【指令的 “形式地址”】:【当前变址寄存器 I值】-【操作数主存地址】所差的【偏移量
  • 3、变址寄存器 I 值】+【形式地址(偏移量)】才构成——>【操作数主存地址
    • 写作:EA = (I) + AEA = (I) + D
  • 5、变址寄存器 I 值】会自己【自增】
    • 所以变址寄存器 I 值】的地址可以变!!
    • 【形式地址A(偏移量)】不会变
    • 和【基址寻址】刚好相反
  • 6、适合用于【数组】的应用!!!!
【堆栈寻址】

重点,记住这几点就够了:

  • 1、【零地址指令】爱用
  • 2、有一个专门寄存器叫【SP】,也叫【堆栈指针】,用于记录 读/写单元地址
  • 3、在【寄存器】的叫【硬堆栈】;在【主存】的叫【软堆栈】
  • 还有它的大概流程:

总结

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

相关文章:

  • K8s-kubernetes(二)资源限制-详细介绍
  • 2025 年电赛 C 题 发挥部分 1:多正方形 / 重叠正方形高精度识别与最小边长测量
  • 悲观锁乐观锁与事务注解在项目实战中的应用场景及详细解析
  • 如何解决EMI中传导干扰
  • Spring-解决项目依赖异常问题
  • 【从零开始java学习|第六篇】运算符的使用与注意事项
  • 因果推断在用户流失预警的案例研究
  • 第2节:多模态的核心问题(多模态大模型基础教程)
  • 【Unity3D】Spine 3.8版本使用记录
  • 机器学习入门:从概念到实践的核心知识梳理
  • 【Linux系统】进程的生命旅程:从创建到独立的演绎
  • 智能体评测技术与实践:从评估维度到DeepEval实战指南
  • LeetCode Day6 -- 图
  • 速卖通商品详情接口深度开发:从多语言解析到跨境合规处理
  • 从零开始搭建React+TypeScript+webpack开发环境——基于MobX的枚举数据缓存方案设计与实践
  • react + i18n:国际化
  • HTML5二十四节气网站源码
  • 【web自动化】-1- 前端基础及selenium原理和环境安装
  • 传输层协议TCP(3)
  • Observer:优雅管理事件订阅的秘密武器
  • TCP 连接管理:深入分析四次握手与三次挥手
  • C++:浅尝gdb
  • 创客匠人:共情力在创始人IP塑造中的作用
  • 使用Docker和Miniconda3搭建YOLOv13开发环境
  • 如何在 Ubuntu 24.04 LTS Noble Linux 上安装 Wine HQ
  • Java多线程进阶-深入synchronized与CAS
  • RS232串行线是什么?
  • 考研408《计算机组成原理》复习笔记,第五章(1)——CPU功能和结构
  • C#WPF实战出真汁01--搭建项目三层架构
  • 解决 pip 安装包时出现的 ReadTimeoutError 方法 1: 临时使用镜像源(单次安装)