隐含寻址是寻址方式的一种。寻址方式是处理器根据指令给出的地址信息来寻找物理地址的方式,是确定本条指令的数据地址以及下一条要执行的指令地址的方法。
隐含寻址的指令不是明显地给出操作数的地址,而是在指令中隐含着操作数的地址,即要寻找的地址包含在操作码中。
寻址方式寻址方式就是处理器根据指令中给出的地址信息来寻找物理地址的方式,是确定本条指令的数据地址以及下一条要执行的指令地址的方法。1
在存储器中,操作数或指令字写入或读出的方式,有地址指定方式、相联存储方式和堆栈存取方式。几乎所有的计算机,在内存中都采用地址指定方式。当采用地址指定方式时,形成操作数或指令地址的方式称为寻址方式。寻址方式分为两类,即指令寻址方式和数据寻址方式,前者比较简单,后者比较复杂。值得注意的是,在传统方式设计的计算机中,内存中指令的寻址与数据的寻址是交替进行的。
指令的寻址方式有顺序寻址方式和跳跃寻址方式两种。由于大型机、小型机、微型机和单片机结构不同,从而形成了各种不同的操作数寻址方式,包括隐含寻址、立即寻址等多种方式。
隐含寻址简介这种类型的指令,不是明显地给出操作数的地址,而是在指令中隐含着操作数的地址,即要寻找的地址包含在操作码中。例如,单地址的指令格式,就不明显地在地址字段中指出第2操作数的地址,而是规定累加寄存器AC作为第2操作数地址。指令格式明显指出的仅是第1操作数的地址D。因此,累加寄存器AC对单地址指令格式来说是隐含地址。如DAA ;指令的操作对象为AL,结果也存于AL中。隐含寻址的优点是有利于缩短指令字长;缺点是需增加硬件。
在基于栈的虚拟机中的应用大多数编程语言采用的是虚拟机的实现方式,即把源代码编译成平台无关的字节码,然后交由虚拟机解释执行这些字节码。通过使用虚拟机的方式来实现编程语言有两个显而易见的好处,分别是安全性和平台无关性。安全性在于,虚拟机成为编程语言的宿主环境,可以对各种可能发生的危险行为,诸如数组越界,非法的内存访问,栈溢出等行为作出防范与控制。这类似于沙盒的机制,因为语言所表达的行为是需要通过虚拟机去执行的,而虚拟机则起到了沙盒一样的监控作用。平台性无关性在于,高级语言是被翻译成字节码之类的平台无关的指令集,由虚拟机来执行这些字节码,虽然虚拟机本身不跨平台,但是由于字节码平台无关,从而实现整个语言的平台无关性,或者说平台中立生。
大致上,虚拟机的实现方式可以分为两大类:基于栈的虚拟机和基于寄存器的虚拟机纵观大部分编程语言的虚拟机实现方式,基本上都采用了基于栈的设计。基于栈的虚拟机的特点是简化编译部分的实现,编译出来的字节码的寻址方式是隐含的。
如图所示。在基于栈的虚拟机中,加法操作往往会被翻译成以下几条指令:
1)POP 10
2)POP15
3)ADD10,15,reg
4)PUSH,reg
由于需要PUSH和POP对栈进行操作,所以需要4条指令来完成这个过程。但是基于栈的虚拟机的优势在于其操作数的地址是隐含的,因为我们可以通过SP(StackPointer)来对操作数进行寻址。也就是说,我们无需知道操作数的地址,存取操作数可以通过用PUSH和POP操作栈来完成。而在基于寄存器的虚拟机的实现中,操作数则往往是存储在寄存器中的,其实这个寄存器也是虚拟的。这就省去了PUSH和POP指令,但是指令需要知道操作数的地址。此时如果同样也是一条加法操作,只需要一条加法指令ADD R1,R2,R3即可完成。2
其他寻址方式立即寻址指令的地址字段指出的不是操作数的地址,而是操作数本身,这种寻址方式称为立即寻址。立即寻址方式的特点是指令执行时间很短,因为它不需要访问内存取数,从而节省了访问内存的时间。如:MOV AX,#5678H 注意:立即数只能作为源操作数,不能作为目的操作数。3
直接寻址直接寻址是一种基本的寻址方法,其特点是:在指令格式的地址的字段中直接指出操作数在内存的地址。由于操作数的地址直接给出而不需要经过某种变换,所以称这种寻址方式为直接寻址方式。在指令中直接给出参与运算的操作数及运算结果所存放的主存地址,即在指令中直接给出有效地址。
间接寻址间接寻址是相对直接寻址而言的,在间接寻址的情况下,指令地址字段中的形式地址不是操作数的真正地址,而是操作数地址的指示器,或者说此形式地址单元的内容才是操作数的有效地址。
寄存器寻址方式和寄存器间接寻址方式当操作数不放在内存中,而是放在CPU的通用寄存器中时,可采用寄存器寻址方式。显然,此时指令中给出的操作数地址不是内存的地址单元号,而是通用寄存器的编号(可以是8位也可以是16位(AX,BX,CX,DX))。指令结构中的RR型指令,就是采用寄存器寻址方式的例子。如:MOV DS,AX寄存器间接寻址方式与寄存器寻址方式的区别在于:指令格式中的寄存器内容不是操作数,而是操作数的地址,该地址指明的操作数在内存中。
相对寻址方式相对寻址是把程序计数器PC的内容加上指令格式中的形式地址D而形成操作数的有效地址。程序计数器的内容就是当前指令的地址。“相对”寻址,就是相对于当前的指令地址而言。采用相对寻址方式的好处是程序员无须用指令的绝对地址编程,因而所编程序可以放在内存的任何地方。
基址寻址方式在基址寻址方式中将CPU中的基址寄存器的内容,加上变址寄存器的内容而形成操作数的有效地址。基址寻址的优点是可以扩大寻址能力,因为与形式地址相比,基址寄存器的位数可以设置得很长,从而可以在较大的存储空间中寻址。
本词条内容贡献者为:
杜强 - 高级工程师 - 中国科学院工程热物理研究所