指令执行过程中通常需要操作数,和存储运算结果,这时就要计算数据的地址,称为数据寻址。 数据寻址,即寻找数据的有效地址,或真实地址,它并不是指令的地址码。 所以,为了区别 我们常把指令的地址码称为形式地址,记作A;而数据的有效地址记作EA,或E,它是由寻址方式和形式地址共同决定的。根据有效地址取出的内容称为值,用小括号E表示。
1. 立即数寻址
最直接的数据寻址就是在指令中直接给出操作数的数值。只要取到指令,就可以立即处理指令中的操作数,所以这种操作数称为“立即数”,这种寻址方式称为“立即数寻址”,简称“立即寻址”。
立即数寻址方式主要用来给寄存器或存储单元赋值,例如,将16进制57赋值到ax寄存器,井号表示立即数。因此这种寻址方式不能用于单操作数指令;若用于双操作数指令,也只能用于源操作数字段,不能用于目标操作数字段。
立即数寻址方式主要用来给寄存器或存储单元赋值,因此这种寻址方式不能用于单操作数指令;若用于双操作数指令,也只能用于源操作数字段,不能用于目标操作数字段。
“立即数寻址”的不足在于指令或程序功能是固定的。要想改变指令或程序功能,就要重新编写程序。
另外,由立即数的大小是由指令中地址码的位数决定的,而指令的长度是有限的,所以指令中所能表示的立即数的大小是有限的,只能表示绝对值较小的数据。
2. 寄存器寻址
如果指令的操作数是寄存器名(寄存器编号),且指令要处理的数据就存储在该寄存器中这种寻址方式就称为“寄存器寻址”。
由于空间的限制,处理器内部的寄存器数量很少,这带来两方面的结果:
(1). 寄存器地址码的长度很短,使得指令中可以存放两个或三个寄存器地址;
(2). 能够同时存储的数据的量受限,或者在同一时间仅能存储少量的数据。但所存储的数值的大小是由寄存器本身的位数决定的,和寄存器的数量无关。
“寄存器寻址”的优点是增加了指令中操作数的个数,增强了指令的功能。另外,“寄存器寻址”还有一个优势就是获取操作数的速度快。这种寻址方式只访问寄存器,不访问主存,而访问寄存器的速度要大大快于访问主存的速度。