存储器既可用来存放数据,又可用来存放指令。
顺序指令寻址方式:指令在内存中按顺序安排,当执行一段程序时,通常是一条指令接一条指令的顺序执行。
跳跃指令寻址方式:程序采用转移执行的顺序,也就是执行的下一条指令的地址码是由该指令给出,而不是程序计数器。
形成操作数的有效地址的方法,称为操作数的寻址方式。
形式地址A也称作偏移地址,它是指令字结构中给定的地址量。
寻址方式特征位,此处有间址位和变址位组成。
如果指令无间址和变址的要求,则形式地址就是操作数的有效地址。如果指定中指明变址或间址变换,那么形式地址就不是操作数的有效地址,而要经过指定方式的变换,才能形成有效地址。
方式 | 算法 | 主要优点 | 主要缺点 |
隐含地址 | 操作数在专用寄存器 | 无存储器访问 | 数据范围有限 |
立即寻址 | 操作数 = A | 无存储器访问 | 操作数赋值有限 |
直接寻址 | EA = A | 简单 | 地址范围有限 |
间接寻址 | EA = (A) | 大的地址范围 | 多重存储器访问 |
寄存器寻址 | EA = R | 无存储器访问 | 地址范围有限 |
寄存器间接寻址 | EA = (R) | 大的地址范围 | 额外存储访问 |
偏移寻址 | EA = A+ (R) | 灵活 | 复杂 |
段寻址 | EA = A + (R) | 灵活 | 复杂 |
堆栈寻址 | EA = 栈顶 | 无存储器访问 | 应用有限 |
隐含寻址:是指不明显地给出操作数的地址,而是在指令中隐藏着操作数的地址。
立即寻址:是指指令的地址字段指出的不是操作数的地址而是操作数本身。
直接寻址:是指在指令的地址字段中直接指出操作数在内存中的地址。
间接寻址:间接寻址是相对于直接寻址而言的,在间接寻址的情况下,指令地址字段中的形式地址A不是操作数D的真正地址,而是操作数地址的指示器。在间接寻址的情况下,由于特征位给予指示。
若须知特征位I=0,表示直接寻址,这时有效地址EA=A;若I=1,则表示间接寻址,这时的有效地址EA=(A)
寄存器寻址:是指操作数不在内存中,而是放在CPU的通用寄存器中时,采用的寄存器寻址方式。
寄存器间接寻址:是指指令格式中的寄存器内容不是操作数,而是操作数的地址,该地址指明操作内存中的地址。
偏移寻址:有效地址计算公式: EA = A + (R) 要求指令中包含两个有两个地址段,至少有一个是显示的,容纳在一个地址字段中的形式地址A直接被使用;另一个地址地段,或基于操作码的一个隐含引用,指的是某个专用寄存器。
段寻址方式(实质为基址寻址):给定一个20位的地址,就会有2^20=1MB的存储空间的直接寻址能力,为此将1MB空间存储器以64KB为单位划分为若干段,寻址时,由一个基地址再加上某些寄存器提供的16位偏移量来形成实际的20位物理地址。
堆栈寻址:堆栈有寄存器堆栈和存储器堆栈两种形式,都是先进后出的原理存储数据,不论是寄存器堆栈还是存储器堆栈,数据的存取都与栈顶地址打交道,为此需要一个隐式或是显示的堆栈指示器。