|「计算机组成原理」:常见的指令寻址方式


常见寻址方式操作数的寻址方式 , 就是CPU根据指令的操作数如何寻找真实的数据 , 或者真实的数据如何在指令 表示 。
寻址方式是指寻找指令或者操作数的有效地址的方式 。 即确定本条指令的数据地址及下一条指令将要执行的指令地址的方法 。指令中的地址码字段并不代表操作数的真实地址 , 地址码中的字段 , 称为形式地址(A) 。 用形式地址结合寻址方式可以计算出操作数在存储系统中的真实地址 , 称为有效地址(EA) 。对于符号 (A) , 整个内容表示的是地址为A的数值 。 而A可以是寄存器的标号 , 也可以是内存地址 , 所以(A)是对应的数值 。 例如EA = (A) , 可以表示为有效地址为地址为A的数值 。
这一部分可以用指针的知识理解 , (A)相当于*A ,而EA = (A)相当于 , EA = *(*A)寻址方式分为指令寻址跟数据寻址两大类 。 寻找下一条要执行的指令地址 , 称为指令寻址 。 寻找操作数的地址称之为数据寻址 。
指令寻址

  1. 顺序寻址 程序的指令序列在主存中顺序存放 , 程序执行的时候 , 从第一条指令开始 , 逐条取出并逐条执行 。 这种程序的顺序执行 , 称为顺序寻址方式 。为了达到顺序寻址的目的 , CPU中必须有一个程序计数器(PC).对指令的顺序号进行计数 。 PC中开始时存放的是程序的首地址 , 每执行一条指令 , PC+1 , 用来指明下一条指令所在内存的地址 , 直到程序结束 。 这里一定注意 , PC中存放的是下一条指令的地址 。
  2. 跳跃寻址 当程序出现分支或者循环的时候 , 就会改变程序的执行顺序 , 此时对指令寻址采取跳跃寻址方式 。。 所谓跳跃 , 便是指下条指令的地址并不是通过PC的当前值来获取的 , 而是由指令本身给出 , 跳跃的处理方式是重新修改PC的内容 , 然后进入取指阶段(也就是说 , 下一条指令的地址仍由PC所给出 , 只不过它的值被修改了 。 )

|「计算机组成原理」:常见的指令寻址方式
本文插图

数据寻址数据的寻址方式比较多样 , 其过程就是把操作数的形式地址 , 变换成操作数的有效地址的过程 。 通常数据寻址的指令格式如下:
|「计算机组成原理」:常见的指令寻址方式
本文插图

通常我们约定:指令字长 = 存储字长 = 机器字长 。
根据操作数存放的不同位置 , 从而衍生出各种不同的寻址方式 , 往往不同的计算机有不同的寻址方式 。 而操作数 , 通常位于:
  • 包含在指令中
  • 包含在CPU的某一寄存器中
  • 包含在主存储器中
  • 包含在I/O设备的端口中
1. 隐含寻址
这种类型的指令 , 不是明显的给出操作数的地址 , 而是在指令中隐含着操作数的地址 , 显然单地址指令就是如此 。 (比如利用ACC作为第二操作数的地址 , 因此 , 累加器ACC对单地址指令格式来说是隐含地址) 。
优点:利于缩短指令字长 , 可简化地址结构 , 是获取操作数最快的方式
缺点:需要增加存储操作数的硬件或者隐含地址的硬件 。
2. 立即寻址
种类型的指令 , 地址字段是操作数本身 , 因此 , 又称立即数寻址 , 数据采用补码的方式存放 。看下面的汇编代码,分号后面是注释:
1.mov ax,2308H ;2308 ->ax意思是将2308H这个地址移动到ax寄存器中 , 这样 , 给出的地址就是操作数本身 。
|「计算机组成原理」:常见的指令寻址方式
本文插图