当前位置: 代码迷 >> 综合 >> 指令系统 寻址方式(重要 计组笔记)
  详细解决方案

指令系统 寻址方式(重要 计组笔记)

热度:3   发布时间:2023-12-11 21:29:36.0

一研为定,万山无阻!

文章目录

  • 指令寻址
    • 顺序寻址
    • 跳跃寻址
  • 数据寻址(重要)
    • 隐含寻址(了解)
    • 立即寻址
    • 直接寻址
    • 间接寻址
    • 寄存器寻址
    • 寄存器间接寻址
    • 前六种寻址方式总结
    • 基址寻址
    • 变址寻址
    • 相对寻址
    • 堆栈寻址 (了解)
  • 例题
  • 总结

在这里插入图片描述

指令寻址

始终由程序计数器PC给出

顺序寻址

  • 不一定只是 PC 加1, 如果指令为32位,即为4个字节 那就是 (PC) + 4 -->PC ,如果指令为64 位,即为 8 个字节,那就是 (PC)+8 --> PC

跳跃寻址

条件转移指令给出

在这里插入图片描述

  • 下面为汇编语言的形式

在这里插入图片描述
在这里插入图片描述

数据寻址(重要)

在这里插入图片描述

  • 寻址方式位 寻址特征
  • 形式地址 指令字中的地址
  • 有效地址 操作数的真实地址(可以由 寻址特征 + 形式地址 推导出)
  • 约定 指令字长 = 存储字长 = 机器字长
  • 指令是由操作码字段和地址码字段组成的,其中它的地址码字段并不一定代表操作数的真实地址,它称为形式地址A。通过形式地址,结合寻址方式,可以计算出操作数在存储器中的真实地址,这个真实地址称为有效地址EA。

在这里插入图片描述

  • 寻址特征用于区分寻址方式

参考链接

隐含寻址(了解)

在这里插入图片描述
优点: 单地址指令,有利于缩短指令字长
缺点 : 需要增加存储操作数或隐含地址的硬件(如上述的ACC)

立即寻址

  • 这种类型的指令的地址码字段指出的不是操作数的地址,而是操作数本身,又叫立即数。数据采用补码的形式存放。立即寻址的优点是指令在执行阶段不访问主存,指令执行的时间最短,缺点是A的位数限制了立即数的范围。(在定长指令码格式下,所有指令的长度都是一样的,这时候取每条指令的时间都一样,执行指令时立即数寻址最快,但是如果在变长指令码下,受到形式地址位数的限制,如果操作数比较大,那立即寻址方式在取指令的时间上要用时更多一点)

不需要取操作数,直接将操作数放于形式地址那边,该寻址特征为 #

在这里插入图片描述
一条指令的执行:取指令访存1次,执行指令访存0次,暂不考虑存结果,共访存1次

优点:指令执行阶段不访问主存,指令执行时间最短
缺点 : A的位数限制了立即数的范围,如A的位数为n,且立即数采用补码时,可表示的数据范围为-2(n-1) ~ 2(n-1)-1

直接寻址

  • 这种类型的指令的地址码字段的形式地址就是操作数的真实地址,取数操作直接取地址里面的内容。

形式地址就是操作数的地址
在这里插入图片描述

  • 一条指令的执行:取指令访存1次,执行指令访存1次,暂不考虑存结果共访存2次。

优点:简单,指令执行阶段仅访问一次主存,不需专门计算操作数的地址。
缺点 : A的位数决定了该指令操作数的寻址范围。操作数的地址不易修改。

间接寻址

在这里插入图片描述

  • 上述为一次间址

下面为两次间址
在这里插入图片描述
优点:1、可扩大寻址范围(有效地址EA的位数大于形式地址A的位数)2、便于编制程序(用间接寻址可以方便地完成子程序返回)

缺点 :指令在执行阶段要多次访存(需两次访存,多次寻址需根据存
最高位确定几次访存)

寄存器寻址

  • 这种类型的指令是直接给出操作数所在的寄存器的编号,EA=Ri,操作数就在Ri内存放。寄存器寻址的优点是指令在执行阶段不访问主存,只访问寄存器,因此执行速度快,因为寄存器数量少,所以寄存器编号所占的位数也少,指令字长也比较短。
  • 与直接寻址差不多,就是把直接寻址的主存(数据)换成寄存器

寄存器的编号就相当于形式地址

  • 执行指令不需要缓存,因为寄存器是直接在CPU 中,不需要再主存中访问操作数

一条指令的执行:取指令访存1次,执行指令访存0次,暂不考虑存结果
共访存1次。

在这里插入图片描述

优点:指令在执行阶段不访问主存,只访问寄存器,指令字短且执行速
度快,支持向量/矩阵运算。
缺点 : 寄存器价格昂贵,计算机中寄存器个数有限。

寄存器间接寻址

  • 这种类型的指令是相对于寄存器寻址的,指令中还是直接给出寄存器的编号,但是寄存器中存放的不是操作数而是操作数所在的地址,EA=(Ri)。它的优点是扩大了寻址范围,比间接寻址速度更快,但是指令执行阶段还是要访问主存的。

前六种寻址方式总结

在这里插入图片描述
在这里插入图片描述

基址寻址

在这里插入图片描述

这种类型的指令是将CPU中基址寄存器BR的内容加上指令格式中的形式地址,形成操作数的真实地址,EA=(BR)+A。其中,基址寄存器既可以采用专用寄存器,也可以采用通用寄存器。

基址寄存器是面向操作系统的,它的内容由操作系统或管理程序确定,主要用于解决程序逻辑空间与存储器物理空间的无关性。程序运行过程中,基址寄存器中的内容是不变的(作为基地址),形式地址是可变的(作为偏移量)。如果采用通用寄存器作为基址寄存器,可以由用户决定哪个寄存器作为基址寄存器,但是内容还是由操作系统决定

优点: 基址寻址的优点是可以扩大寻址范围(基址寄存器的位数大于形式地址A的位数),用户不用考虑自己的程序存放在主存的哪个区域,有利于多道程序设计,可用于编制浮动程序,常用于为程序和数据分配存储空间。

  • 隐式寄存器
    不需要特定指定寄存器
    在这里插入图片描述

  • 显式寄存器
    需要特点标注BR寄存器,如下图R0
    在这里插入图片描述

  • 关于有利于多道程序的设计,解释如下:(了解)

在这里插入图片描述

变址寻址

在这里插入图片描述

  • 正好于基址寻址方式相反

优点: 可以扩大寻址范围(变址寄存器的位数大于A的位数),主要用在数组处理过程中,可以设定A为数组首地址,然后不断改变IX中的值即可形成数组中任意一个数据的地址,适合编制循环程序。IX的位数足以表示整个存储空间。

常用于处理循环问题。处理数组问题

在这里插入图片描述

注释
1、LDA 将立即数0加载到ACC(累加器,用于存放操作数,或运算结果)
2、LDX 将立即数0 加载到 X变址寄存器中
3、如上图所示
4、INX 即为 increase x ,x 自增 (加1)
5、CPX compare 将x与10进行比较
6、条件跳转指令 M 即为左边绿色所示 (ADD X,D)

在这里插入图片描述

相对寻址

在这里插入图片描述

堆栈寻址 (了解)

  • 两个操作数都可以进行隐含起来
    堆栈是存储器中的一块按照后进先出原则管理的存储区,改存储区中被读/写单元的地址是由一个特定的寄存器给出的,该寄存器称为堆栈指针SP。堆栈可分为硬堆栈和软堆栈,硬堆栈是指寄存器堆栈,由于制作成本高,不适合做大容量,一般采用软堆栈,即从主存中划分出一段区域来作为堆栈。

  • 在采用堆栈结构的计算机系统中,大部分指令表面上都表现为无操作数指令的形式,因为操作数地址都隐含了SP。通常在读或写堆栈中的一个单元的前后都伴有自动完成对SP内容的增减。

  • 下图为硬堆栈表现形式:
    在这里插入图片描述

  • 软堆栈表现方式如下(即为在主存中划分一块)

例题

在这里插入图片描述

  • 黄色的部分为操作码,绿色的为当前的形式地址

取出操作码,PC 自动加1 ,取出形式地址。PC 自动加 1

在这里插入图片描述
1EFFH - 2002H 计算过程: 从右向左 :从0开始依次借位

在这里插入图片描述

总结

在这里插入图片描述