【计算机系统】寻址模式详解与总结
完整意义上的指令应该由操作码和操作数构成,实际中操作数经常存放在与指令不同的位置,寻址指的就是根据指令本身和CPU当前状态决定操作数位置,并获取操作数的过程。假设指令为:
o p [ A d d r ] op [Addr]
op[Addr]
其中 A d d r Addr Addr即为形式地址,[ ]为访存符号。所谓形式地址就是一种抽象意义的地址,可以是寄存器(指令里的寄存器相当于数值化地址的宏定义)、操作数或是实际地址等,依据指令的具体形式来确定形式地址。
将上述寻址模式中形式地址 A d d r Addr Addr与有效地址EA(Effective Address)的对应用图2给出
图1、图2只介绍了常见的寻址模式,而图3是寻址模式更加完整的框架图。例如利用基址寄存器BR、变址寄存器IR、比例因子S和偏移量A可以映射
E A = [ B R , I R , S , A ] = [ B R + I R × S + A ] EA=[BR,IR,S,A]=[BR+IR×S+A]
EA=[BR,IR,S,A]=[BR+IR×S+A]
只要根据此框架组合就可以得到不同的寻址模式。
从有效地址到操作数实际存储的物理地址还需要考虑段基地址,一般而言:
物理地址=段基地址+有效地址
段基地址存储在段寄存器中,例如DS,CS,SS,ES;有效地址由基址寄存器(例如BX、BP)和变址寄存器(例如DI、SI、IP等)进行映射,当然基址和变址寄存器也可用通用寄存器代替。
在计算机中引入如此繁多的寻址方式的目的在于:
①打破现实约束:指令本身长度有限(常等于一个机器字长),难以存放多个庞大的内存地址
②满足灵活性要求:丰富的寻址模式更适合编程中的实际需求。例如间接寻址扩大了寻址的范围。
③满足安全性要求:保护模式
总之,多种寻址模式比直接基于平坦的线性空间进行编程更加适合工程实践。