计算机中十类指令寻址方式总结
数据寻址方式
数据寻址有多种,需要在指令中明确指出采用哪一种寻址方式,可以专门设置一个寻址方式特征字段,或纳入地址码中。
形式地址 : 指令字中的地址
有效地址 : 操作数的真实地址
有效地址由形式地址根据寻址方式来确定。
在大多数机器中,指令字长 = 存储字长 = 机器字长。
一、立即寻址
又称为立即数寻址,即指令中的形式地址部分不是一个操作数的地址,而是操作数本身,因此该指令的执行过程不需要寻址。
如指令 " ",将 放入 寄存器中,其中立即数可正可负,负数需要用补码来表示。
特点
- 立即寻址的指令执行阶段不访存
- A 的位数限制了立即数的范围
二、直接寻址
指令中的形式地址部分即为有效地址,即 。
例如指令 " ",即是将 [20H] 地址中的数据传输到 AX 寄存器中。
特点
- 执行阶段访问一次存储器
- A 的位数限制了该指令操作数的寻址范围
- 操作数的地址不易修改
三、隐含寻址
指令中不直接给出操作数地址,操作数地址通常隐含在操作码或某个(约定)寄存器中。
如 操作,即是默认另一个操作数在 中。将 地址中的数取出与 中的数进行加法运算。
四、间接寻址
指令中的形式地址不是操作数的地址,而是 “操作数地址的地址”。
其中在多次间址时,需要查看数据单元格中的第一位数据,如果为 则表示继续间址,如果为 则为真正地址。
特点
- 可以扩大寻址范围
- 便于编制转移程序
指令,表示跳转到 单元中所指示的地址,为间接寻址。正因为这条间址指令,我们转入子程序时只需修改 A 单元中数据,即可实现从子程序再跳转回主程序的功能。
五、寄存器寻址
指令中的形式地址直接指出寄存器的编号,操作数存储于寄存器中,即 ,有效地址即为寄存器编号。
如 " " 指令,即是将 寄存器中的数据送到 中。
特点
- 执行阶段不访存,只访问寄存器,执行速度快
- 寄存器个数有限,可缩短指令字长
六、寄存器间接寻址
指令中的形式地址为寄存器的编号,寄存器的内容是操作数的有效地址。
,有效地址在寄存器中。
如指令 " ",就是根据 寄存器中的地址,去主存中访问对应数据,并将数据存入 寄存器中。
特点
有效地址在寄存器中,操作数在存储器中,执行阶段访存便于编制循环程序。
- 可以访存一次,就将寄存器数值加1,实现类似于数组的访问。
七、基址寻址
指令中的形式地址与基址寄存器内容之和为有效地址。
- 采用专用寄存器作为基址寄存器(隐式)
- 采用通用寄存器作为基址寄存器(显式)
专用寄存器基地寻址
,其中 为基址寄存器
通用寄存器基址寻址
需要给出寄存器编号作为基址寄存器。
- 可指定由哪个通用寄存器作为基址寄存器。
- 在程序的执行过程中 内容不变,形式地址 可变。
特点
- 可扩大寻址范围
- 有利于多道程序
- 将程序开头地址定位于某个寄存器中,即可实现更换通用寄存器,即实现程序切换。
- 基址寄存器内容由操作系统或管理程序确定
八、变址寻址
指令中的形式地址与变址寄存器内容之和为有效地址。
,与基地寻址非常相似。唯一的不同点在于基址寄存器中的值由操作系统或管理程序决定,而 IX 的内容由用户指定。
特点
- 可以扩大寻址范围
- 由于 的内容由用户指定,因此在程序执行过程中, 内容可变,可以用于设计处理一些数组问题。
九、相对寻址
有效地址为程序计数器 的值与形式地址之和。
, 的位数决定操作数的寻址范围,可编写浮动程序(程序放哪都能执行)。
十、堆栈寻址
堆栈有两个操作,分别是 (压栈) 与 (弹栈)。进栈与出栈的操作分别由 指针的加减完成。