
相关链接|
有的地址码指的就是真实地址,如
JMP 7



¶直接寻址

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

一条指令的执行:
-
取指令 访存1次
-
执行指令 访存1次
不考虑存结果
共访存2次
-
优点:
简单,指令执行阶段仅访问一次主存
不需要专门计算操作数的地址
-
缺点:
A 的位数决定了该指令操作数的寻址范围
操作数的地址不易修改
¶间接寻址

-
优点:
可扩大寻址范围(有效地址EA的位数大于形式地址A的位数)。
便于编制程序(间接寻址可以方便地完成子程序返回)
-
缺点:
指令在执行阶段要多次访存(一次间址需两次访存,多次寻址需要根据存储字的最高位确定几次访存)
¶寄存器寻址

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

¶隐含寻址

¶立即寻址

如果指令后加了 # 然后马上跟了一个数字,则说明 # 后面的是立即数,而不是地址
一条指令的执行:
取指令 访存1次
执行指令 访存1次
暂不考虑存结果
共访存1次
-
优点:指令执行阶段不访问主存,指令执行时间最短
-
缺点:
A 的位数限制了立即数的范围
如 A 的位数位n,且立即数采用补码时,可表示的数据范围为 $-2^{n-1} ~ 2^{n-1}-1$
¶偏移寻址

¶基址寻址

注:
BR——base address register
EA——effective[1] address
BR:专门的基址寄存器
可对比操作系统第三章第一节,OS课中的“重定位寄存器”就是“基址寄存器”
-
优点:便于程序“浮动”,方便实现多道程序并发运行
拓展:程序运行前,CPU 将 BR 的值修改为该程序的起始地址(存在操作系统PCB中)
基址寄存器是面向操作系统的,其内容由操作系统或管理程序确定。在程序执行过程中,基址寄存器的内容不变(作为基地址),形式地址可变(作为偏移量)。
当采用通用寄存器作为基址寄存器时,可由用户决定哪个寄存器作为基址寄存器,但其内容仍由操作系统确定
-
优点:
可扩大寻址范围(基址寄存器的位数大于形式地址A的位数)
用户不必考虑自己的程序存于主存的哪一块空间区域,故有利于多道程序设计,以及用于编制浮动程序(整个程序在内存里面的浮动)
¶变址寻址

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

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

-
优点:
在数组处理过程中,可设定 A 为数组的首地址,不断改变变址寄存器 IX 的 内容,便可以很容易形成数组中任一数据的地址,特别适合编制循环程序。
¶复合寻址
¶相对寻址
==$EA = (PC) + A$,其中 A 是相对于PC 所指地址的位移量,可正可负,补码表示

A 并不是相对于当前指令地址的位移量
因为PC总会指向下一条将要执行的指令
在取得当前指令后,PC的值会自动加1,从而指向下一条指令
A 应该是基于下一条地址的偏移量

-
优点
操作数的地址不是固定的,它随着PC指的变化而变化,而且与指令地址之间总是相差一个固定值,因此便于程序浮动(一段代码在程序内部的浮动)
相对寻址广泛用于转移指令
硬件如何实现数的“比较”


有的机器把 PSW 称为 标志寄存器
¶堆栈寻址
操作数存放在堆栈中,隐含使用堆栈指针(SP)作为操作数地址。
堆栈是存储器(或专用存储器)中一块特定的按“后进先出(LIFO)”原则管理的存储区,该存储器中被读/写的地址是用一个特定的寄存器给出的,该寄存器称为堆栈指针(SP)。



对于软堆栈,对栈的压入或者弹出,都需要进行一次访存
而 硬堆栈则不需要
堆栈可用于函数调用时,保存当前函数的相关信息(可参考数据结构“算法空间复杂度”的视频)
¶总结


