0%

4.2.2-数据寻址

💡 TIP

image-20241229222335572

相关链接|

有的地址码指的就是真实地址,如 JMP 7

image-20241229222809441

image-20241229222838337

image-20241229222917091

image-20241229222942725

直接寻址

image-20241229223149541

指令字中的形式地址 A 就是操作数的真实地址 EA,即 EA = A。

image-20241229223207428

一条指令的执行:

  • 取指令 访存1次

  • 执行指令 访存1次

    不考虑存结果

共访存2次

  • 优点

    简单,指令执行阶段仅访问一次主存

    不需要专门计算操作数的地址

  • 缺点

    A 的位数决定了该指令操作数的寻址范围

    操作数的地址不易修改

间接寻址

image-20241229225005777

  • 优点

    可扩大寻址范围(有效地址EA的位数大于形式地址A的位数)。

    便于编制程序(间接寻址可以方便地完成子程序返回)

  • 缺点

    指令在执行阶段要多次访存(一次间址需两次访存,多次寻址需要根据存储字的最高位确定几次访存)

寄存器寻址

image-20241231100202456

  • 优点

    指令在执行阶段不访问主存,只访问寄存器,

    指令字短且执行速度快,支持向量/矩阵 运算

  • 缺点

    寄存器价格昂贵,计算机中寄存器个数有限

寄存器间接寻址

image-20241231100554000

隐含寻址

image-20241231100639114

立即寻址

image-20241231100724816

如果指令后加了 # 然后马上跟了一个数字,则说明 # 后面的是立即数,而不是地址

一条指令的执行:

​ 取指令 访存1次

​ 执行指令 访存1次

​ 暂不考虑存结果

​ 共访存1次

  • 优点:指令执行阶段不访问主存,指令执行时间最短

  • 缺点

    A 的位数限制了立即数的范围

    如 A 的位数位n,且立即数采用补码时,可表示的数据范围为 $-2^{n-1} ~ 2^{n-1}-1$

偏移寻址

image-20241231101536101

基址寻址

image-20241231102246944

注:

BR——base address register

EA——effective[1] address

BR专门的基址寄存器

💡 TIP

可对比操作系统第三章第一节,OS课中的“重定位寄存器”就是“基址寄存器”

  • 优点:便于程序“浮动”,方便实现多道程序并发运行

拓展:程序运行前,CPU 将 BR 的值修改为该程序的起始地址(存在操作系统PCB中)

基址寄存器是面向操作系统的,其内容由操作系统或管理程序确定。在程序执行过程中,基址寄存器的内容不变(作为基地址),形式地址可变(作为偏移量)。

当采用通用寄存器作为基址寄存器时,可由用户决定哪个寄存器作为基址寄存器,但其内容仍由操作系统确定

  • 优点

    可扩大寻址范围(基址寄存器的位数大于形式地址A的位数)

    用户不必考虑自己的程序存于主存的哪一块空间区域,故有利于多道程序设计,以及用于编制浮动程序(整个程序在内存里面的浮动)

变址寻址

image-20241231103834477

💡 TIP

变址寄存器是面向用户的,在程序执行过程中,变址寄存器的内容可由用户改变(IX 作为偏移量),形式地址 A 不变(作为基地址)

基址寻址中,BR保持不变作为基地址,A作为偏移量

image-20241231104517735

可以用变址寻址解决循环中连续访问空间编程不方便的问题

image-20241231104942234

  • 优点

    在数组处理过程中,可设定 A 为数组的首地址,不断改变变址寄存器 IX 的 内容,便可以很容易形成数组中任一数据的地址,特别适合编制循环程序

复合寻址

image-20241231105509220

相对寻址

==$EA = (PC) + A$,其中 A 是相对于PC 所指地址的位移量,可正可负,补码表示

image-20241231105644417

⚠️ WARNING

A 并不是相对于当前指令地址的位移量

因为PC总会指向下一条将要执行的指令

在取得当前指令后,PC的值会自动加1,从而指向下一条指令

A 应该是基于下一条地址的偏移量

image-20241231110347916

  • 优点

    操作数的地址不是固定的,它随着PC指的变化而变化,而且与指令地址之间总是相差一个固定值,因此便于程序浮动(一段代码在程序内部的浮动)

    相对寻址广泛用于转移指令

💡 TIP

硬件如何实现数的“比较”

image-20241231111423976

image-20241231111359043

💡 TIP

有的机器把 PSW 称为 标志寄存器

堆栈寻址

操作数存放在堆栈中,隐含使用堆栈指针(SP)作为操作数地址。

堆栈是存储器(或专用存储器)中一块特定的按“后进先出(LIFO)”原则管理的存储区,该存储器中被读/写的地址是用一个特定的寄存器给出的,该寄存器称为堆栈指针(SP)。

image-20241231112155686

image-20241231112214445

image-20241231112356855

对于软堆栈,对栈的压入或者弹出,都需要进行一次访存

而 硬堆栈则不需要

堆栈可用于函数调用时,保存当前函数的相关信息(可参考数据结构“算法空间复杂度”的视频)

总结

image-20241231112525333


(完)

相关注解

  1. effective /ɪˈfektɪv/ adj. 产生预期结果的,有效的;实际的,事实上的;(法律、规则等)生效的,起作用的;给人深刻印象的