寻址的目的是为了找到我们想要的数值(操作数)。
快速复习的图:
在指令当中我们将地址前四位取出,进行寻址方式的区分(寻址特征):
直接寻址:
直接寻址:采用直接寻址的的方式获取目标值是符合我们的想法的,形式地址所表示的就是我们需要进行操作的值(操作数)所在的地址。所以当我们需要取得实际的值(操作数)的时候:
第一步:cpu访问内存中程序段取得指令。
第二步:访问内存中数据段取出数据。一共进行了两次访存,若是只算指令执行期间的话:只进行了一次访存。
优点:访存次数较少。运行速度较快
缺点:我们可以访问的地址受限,形式地址的位数少了。
立即寻址
立即寻址:寻得的不是地址,而是数值(操作数)!所以我们只需要进行进行一次取指令就可以取得我们需要的数值(操作数)了。所以仅考虑指令执行过程中时:不用访存。
优点:不用访存。
缺点:能表示的操作数大小受位数限制。
间接寻址:
所谓间接寻址:形式地址所指的不是我们需要的值(操作数),而是一个更靠近值(操作数)的地址。ps:如果是一次间接寻址,形式地址所指的就是值(操作数)存放的地址!
缺点:需要多次访存,一次间接就要三次访存,(指令执行期间:2次)分别是:取指令,取出新地址,取出新地址所对应的值(操作数)。
优点:扩充了我们的寻址范围。便于我们编制程序。
寄存器寻址
寄存器寻址就是本来我应该去主存里寻找值的,现在寄存器中有存放某个我需要的值(操作数),所以我的形式地址上填写的是某个寄存器的地址。所以我们此处除了取指,不访问主存。
寄存器间接寻址:
就是间接寻址+寄存器寻址。在访存次数上有点差别,比间接少了第一步的访存,比寄存器多了间接对主存的访问。仅此。
隐含寻址
就是有操作数被默认了。比如执行四则运算时,默认与acc中数据相运算了。
基址寻址
因为我们的程序不可能总是从0地址位开始。我们采用基址+形式地址(偏移地址)的方式可以查找到位置改变了的操作数。
如果存在专门的基址寄存器,我们不用对其内容进行相加,如果采用通用寄存器,我们需要在形式地址的高位对所使用的基址寄存器进行区分。
基址寄存器中的内容对程序猿透明。
变址寻址
变址寄存器相当于是形式地址所对应的地址的基础上,再相加,对形式地址的一个偏移。
优点:便于循环。
相对寻址:
相对于当前pc所指的位置进行的偏移。
堆栈寻址
主要是注意一下堆栈空间的操作即可。