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

考研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.xdnf.cn/news/17891.html

相关文章:

  • 飞算JavaAI:革新Java开发体验的智能助手
  • 19. 什么是 TypedArray
  • buildroot 简单介绍
  • LeetCode Day5 -- 二叉树
  • 【LeetCode】6. Z 字形变换
  • 【R语言】RStudio 中的 Source on Save、Run、Source 辨析
  • 热门手机机型重启速度对比
  • Vue项目生产环境性能优化实战指南
  • 相机按键功能解析
  • python学习DAY40打卡
  • Easysearch 数据迁移之 INFINI Gateway
  • 天文与航天领域专业计算库介绍
  • Java 大视界 -- Java 大数据机器学习模型在金融资产配置优化与风险收益平衡中的应用(395)
  • 使用dify搭建hr简历助手-上传简历-对接飞书ai表格
  • 八月补丁星期二:微软修复 111 个漏洞
  • Excel怎么筛选重复项?【图文详解】查找/删除重复项?查找重复项公式?如何去重?
  • 飞凌OK3568开发板QT应用程序编译流程
  • HTML5 Canvas实现数组时钟代码,适用于wordpress侧边栏显示
  • C# 反射和特性(元数据和反射)
  • pycharm配置连接服务器
  • 服务器查看 GPU 占用情况的方法
  • 室外 3DVG 基准
  • C# 多线程:并发编程的原理与实践
  • 对线面试官之幂等和去重
  • Python图像处理基础(十三)
  • Ubuntu 20.04 虚拟机安装完整教程:从 VMware 到 VMware Tools
  • 【前端八股文面试题】【JavaScript篇8】作用域链介绍?
  • VMD+皮尔逊+降噪+重构(送报告+PPT)Matlab程序
  • 自动曝光算法参考
  • Datawhale AI夏令营 「2025全球AI攻防挑战赛-赛道一:图片全要素交互认证-生成赛」的赛事项目实践