• 5.2-寻址方式


    寻址方式的概念

    • 指令或操作数在存储器中的地址:某个操作数或某条指令存放在某个存储单元时,其存储单元的编号
    • 在存储器中,操作数或指令字写入或读出的方式,有:地址指定方式、相联存储方式和堆栈存取方式
    • 采用 地址指定方式 形成操作数或指令地址的方式,称为寻址方式
    • 寻址方式分为 2 类,即:指令寻址方式数据寻址方式

    指令寻址方式

    指令的寻址方式有 2 种:① 顺序寻址方式;② 跳跃寻址方式

    顺序寻址

    • 程序的指令序列在主存顺序存放,当执行一段程序时,通常是一条指令接一条指令的顺序执行
      • 即从存储器取出第一条指令,然后执行这条指令
      • 接着从存储器取出第二条指令,在执行第二条指令
      • 接着再取出第三条指令
      • ……
    • CPU中设置 [程序计数器PC (又称指令指针寄存器)] 对指令的顺序号进行计数。PC开始时存放程序的首地址,每执行一条指令,PC 加 "1",指出下条指令的地址,直到程序结束
    • 演示

    跳跃寻址

    • 当程序要转移执行的顺序时,指令的寻址就采取跳跃寻址方式
    • 跳跃,又称跳转,是指下条指令的地址码不是由程序计数器给出,而是由本条指令给出
    • 注意!程序跳跃后,按新的指令地址开始顺序执行;指令计数器的内容也必须相应改变,以便及时跟踪新的指令地址
    • 演示

    数据寻址方式

    隐含寻址

    • 有些指令的操作码中不仅包含了操作的性质,还隐含了部分操作数的地址
    • 举例:MUL BL
      • 乘法指令MUL,在这条指令中只需指明乘数的地址,被乘数以及乘积的地址是隐含且固定的
      • 把AL中的内容与BL中的内容相乘,乘积送到AX寄存器,即 AL x BL → AX

    立即寻址

    直接寻址

    • 操作数位于存储器中,操作数所在的存储器单元的地址存放在指令的地址字段A中,即:
      • DATA = (EA):指令字中的 形式地址A 就是操作数的 有效地址E
      • EA = A:该类指令中的 形式地址A 又称为 "直接地址"
    • 操作数的字长取决于指令中的另一个寄存器操作数,e.g. AX → 读2个单元,AL/AH → 读1个单元

    寄存器直接寻址


    存储器直接寻址方式

    • 一般简称直接寻址方式,其指令地址码字段直接给出存放在存储器中操作数的存储地址
    • 举例
    • 特点
      • 提供访问主存的操作
      • 获得数据要访问主存,指令执行速度慢
      • 地址字段的位数决定了访存空间大小

    间接寻址

    • 倘若指令字中的形式地址不直接指出操作数的地址,而是指出操作数有效地址所在的存储单元地址,也就是说,有效地址是由形式地址间接提供的,即为间接寻址,即 DATA = (EA),EA = (A),A为操作数地址的地址
    • 直接寻址 & 间接寻址

    寄存器间接寻址

    • 寄存器间接寻址时,地址码字段给出的是寄存器编号R。需先访问寄存器,从寄存器读出操作数地址后,再访问存储器才能取得操作数
    • EA = (R),即Data = (EA) = ((R))
    • 特点
      • 解决了直接寻址方式下地址字段的位数限制访存范围大小的问题
      • 获得数据只需访问主存1次
    • 寄存器寻址 & 寄存器间接寻址

    存储器间接寻址

    • 存储器间接寻址时,地址码字段给出的是操作数主存地址的地址。需访问两次存储器才能取得数据,第 1 次先从存储器读出操作数地址,第 2 次才能根据读出的操作数地址再取出真正的操作数
    • EA = (A),即 Data = (EA) = ((A))
    • 特点
      • 解决了直接寻址方式下地址字段的位数限制访存范围大小的问题
      • 获得数据要访问主存 2 次,指令执行速度太慢

    相对寻址

    • 所谓相对寻址方式,是指根据一个 {基准地址} 及其 {相对量} 来寻找操作数地址的方式
    • 根据基准地址的来源不同,它又分为 [基址方式] 、[变址方式] 以及 [PC相对寻址方式]

    PC相对寻址

    • PC相对寻址方式,一般简称相对寻址方式,是指将 程序计数器PC 的内容(即当前执行指令的地址)与地址码部分给出的位移量Disp通过加法器相加,所得之和作为操作数的有效地址的方式
    • EA = (PC) + Disp
    • 举例
    • 特点
      • 可节省指令中的地址位数,便于程序在内存中成块移动
      • 注意PC的改变对计算E的影响,+指令字长

    基址寻址

    • 计算机设置一个寄存器,专门用来存放基准地址,该寄存器就是 基址寄存器(RB)。RB既可在CPU中专设,也可由指令指定某个通用寄存器担任
    • 基址寻址方式是将CPU中基址寄存器RB的内容加上指令格式中的形式地址A而形成操作数的有效地址
    • EA = (RB) + Disp // 地址码A 在这种方式下通常被称为位移量(Disp)
    • 特点
      • 使用基址寄存器(位数比通用寄存器多) 可以访问更大的主存空间
      • 对某一程序而言,基址值设定后不变,故要访问不同数据需修改 Disp,而 Disp 又是指令的形式地址部分的值,所以必须要改变指令

    变址寻址

    • 变址寻址方式与基址寻址方式计算有效地址的方法很相似,它把CPU中某个 变址寄存器(RI) 的内容与 Disp 相加来形成操作数有效地址

    • 使用变址寻址方式的目的不在于扩大寻址空间,而在于实现程序块的规律性变化

    • EA = (RI) + Disp

    • 特点

      • 不改变指令即可改变数据的有效地址,可在循环中使用
      • 在字符串处理,向量运算等等成批数据处理中非常有用
    • 变址寻址 & 基址寻址区别

      • 采用 [基址寻址] 时,基址寄存器提供地址基准量,指令提供偏移量
      • 采用 [变址寻址] 时,变址寄存器提供修改量,指令提供基准量

    堆栈寻址

    堆栈寻址主要用来暂存中断和子程序调用时现场数据及返回地址

    • 存储器堆栈
    • 堆栈的结构

    数据寻址方式总结

    例题




  • 相关阅读:
    为什么编程是独一无二的职业
    TSQL 编程规范
    Windows实战Git环境配置msysGit+TortoiseGit
    Linux环境下Socket编程
    数据持久化
    Javascript类的定义和引用
    详解C中volatile关键字
    ACM HDU 1040 As Easy As A+B
    ACM POJ 1753Flip Game
    ACM HDU 1017 A Mathematical Curiosity
  • 原文地址:https://www.cnblogs.com/liujiaqi1101/p/13178292.html
Copyright © 2020-2023  润新知