计算机中十类指令寻址方式总结

数据寻址方式

数据寻址有多种,需要在指令中明确指出采用哪一种寻址方式,可以专门设置一个寻址方式特征字段,或纳入地址码中。

在这里插入图片描述
形式地址 A A : 指令字中的地址
有效地址 E A EA : 操作数的真实地址

有效地址由形式地址根据寻址方式来确定。

在大多数机器中,指令字长 = 存储字长 = 机器字长。


一、立即寻址

又称为立即数寻址,即指令中的形式地址部分不是一个操作数的地址,而是操作数本身,因此该指令的执行过程不需要寻址。

在这里插入图片描述

如指令 " M O V MOV A X , 20 H AX, 20H ",将 20 H 20H 放入 A X AX 寄存器中,其中立即数可正可负,负数需要用补码来表示。

特点

  • 立即寻址的指令执行阶段不访存
  • A 的位数限制了立即数的范围

二、直接寻址

指令中的形式地址部分即为有效地址,即 E A = A EA = A

例如指令 " M O V MOV A X , [ 20 H ] AX, [20H] ",即是将 [20H] 地址中的数据传输到 AX 寄存器中。

在这里插入图片描述

扫描二维码关注公众号,回复: 9783010 查看本文章

特点

  • 执行阶段访问一次存储器
  • A 的位数限制了该指令操作数的寻址范围
  • 操作数的地址不易修改

三、隐含寻址

指令中不直接给出操作数地址,操作数地址通常隐含在操作码或某个(约定)寄存器中。

A D D ADD 操作,即是默认另一个操作数在 A C C ACC 中。将 A A 地址中的数取出与 A C C ACC 中的数进行加法运算。

在这里插入图片描述


四、间接寻址

指令中的形式地址不是操作数的地址,而是 “操作数地址的地址”。

在这里插入图片描述

其中在多次间址时,需要查看数据单元格中的第一位数据,如果为 1 1 则表示继续间址,如果为 0 0 则为真正地址。

特点

  1. 可以扩大寻址范围
  2. 便于编制转移程序

在这里插入图片描述

J M P JMP @ A @A 指令,表示跳转到 A A 单元中所指示的地址,为间接寻址。正因为这条间址指令,我们转入子程序时只需修改 A 单元中数据,即可实现从子程序再跳转回主程序的功能。


五、寄存器寻址

指令中的形式地址直接指出寄存器的编号,操作数存储于寄存器中,即 E A = R i EA=R_i ,有效地址即为寄存器编号。

如 " M O V MOV A X , B X AX, BX " 指令,即是将 B X BX 寄存器中的数据送到 A X AX 中。

在这里插入图片描述

特点

  • 执行阶段不访存,只访问寄存器,执行速度快
  • 寄存器个数有限,可缩短指令字长

六、寄存器间接寻址

指令中的形式地址为寄存器的编号,寄存器的内容是操作数的有效地址。

E A = ( R i ) EA = (R_i) ,有效地址在寄存器中。

如指令 " M O V MOV A X , [ B X ] AX, [BX] ",就是根据 B X BX 寄存器中的地址,去主存中访问对应数据,并将数据存入 A X AX 寄存器中。

在这里插入图片描述

特点

有效地址在寄存器中,操作数在存储器中,执行阶段访存便于编制循环程序。

  • 可以访存一次,就将寄存器数值加1,实现类似于数组的访问。

七、基址寻址

指令中的形式地址与基址寄存器内容之和为有效地址。

  1. 采用专用寄存器作为基址寄存器(隐式)
  2. 采用通用寄存器作为基址寄存器(显式)

专用寄存器基地寻址

E A = ( B R ) + A EA=(BR)+A ,其中 B R BR 为基址寄存器

在这里插入图片描述

通用寄存器基址寻址

需要给出寄存器编号作为基址寄存器。

在这里插入图片描述

  • 可指定由哪个通用寄存器作为基址寄存器。
  • 在程序的执行过程中 R 0 R_0 内容不变,形式地址 A A 可变。

特点

  • 可扩大寻址范围
  • 有利于多道程序
    • 将程序开头地址定位于某个寄存器中,即可实现更换通用寄存器,即实现程序切换。
  • 基址寄存器内容由操作系统或管理程序确定

八、变址寻址

指令中的形式地址与变址寄存器内容之和为有效地址。

E A = ( I X ) + A EA = (IX) + A ,与基地寻址非常相似。唯一的不同点在于基址寄存器中的值由操作系统或管理程序决定,而 IX 的内容由用户指定。

在这里插入图片描述

特点

  • 可以扩大寻址范围
  • 由于 I X IX 的内容由用户指定,因此在程序执行过程中, I X IX 内容可变,可以用于设计处理一些数组问题。

九、相对寻址

有效地址为程序计数器 P C PC 的值与形式地址之和。

E A = ( P C ) + A EA = (PC) + A A A 的位数决定操作数的寻址范围,可编写浮动程序(程序放哪都能执行)。

在这里插入图片描述


十、堆栈寻址

堆栈有两个操作,分别是 P U S H PUSH (压栈) 与 P O P POP (弹栈)。进栈与出栈的操作分别由 S P SP 指针的加减完成。

在这里插入图片描述

参考资料: MOOC
发布了244 篇原创文章 · 获赞 115 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_41552508/article/details/103724614
今日推荐