在计算机之中,每进行一项操作,都会执行很多条指令。在数目庞大的指令之下,计算机是如何准确的依次完成相应的指令呢?那是因为在计算机中,存在一种特殊的操作叫寻址方式。
寻址方式是指确定每条指令的数据及下一条将要执行的指令地址的方法,它与硬件结合紧密,而且直接影响指令格式和指令功能。寻址方式可以分为指令寻址和数据寻址。指令寻址方式较为简单,故本文主要比较数据寻址方式。
对于数据寻址方式的理解
1、立即寻址
理解:操作数直接存放在指令中,紧跟在操作码之后的寻址方式就是操作数。
优点:指令执行时间很短,不需要访问内存取数,从而节省了访问内存的时间。
缺点:形式地址的位数限制的操作数的范围。
2、直接寻址
理解:在指令格式的地址的字段中直接指出操作数在内存的地址。
优点:寻找操作数较为简单,不需专门计算操作数的地址,仅仅在指令执行阶段对主存访问一次。
缺点:形式地址的位数限制的操作数的寻址范围,且必须修改形式地址的值,才能修改操作数。
3、隐含寻址
理解:在指令中隐含着操作数的地址。
优点:有利于缩短指令字长。
缺点:不利于编程人员调试。
4、间接寻址
理解:指令地址字段中的形式地址不是操作数的真正地址,而是操作数地址的指示器。
优点:扩大了操作数的寻址范围,有利于编程。
缺点:指令执行阶段需要访存2次或多次,指令执行时间长。
5、寄存器寻址
理解:指令中给出的操作数地址不是内存的地址单元号,而是通用寄存器的编号。
优点:操作数不在主存中,减少了执行时间。
缺点:寄存器数目较少,操作数个数受限。
6、寄存器间接寻址
理解:指令格式中的寄存器内容不是操作数,而是操作数的地址。
优点:比间接寻址少访存一次。
缺点:寄存器数目较少,有效地址个数受限。
7、基站寻址
理解:将CPU中的基址寄存器的内容,加上变址寄存器的内容而形成操作数的有效地址。
优点:可以扩大寻址能力。
缺点:寻址过程较为复杂,内部部件增加。
8、变址寻址
理解:把CPU中某个变址寄存器的内容与偏移量D相加来形成操作数有效地址。
优点:实现程序块的规律变化。
缺点:寻址过程较为复杂,变址寄存器的位数影响操作数的寻址范围。
9、相对寻址
理解:以当前程序计数器pc的内容为基址,加上指令给出的一字节补码数形成新的pc值的寻址方式称为相对寻址。
优点:转移地址不固定,可随PC值得变化而变化,有利于编写浮动程序。
缺点:操作数的地址需计算,执行步骤复杂。
10、堆栈寻址
理解:操作数只能从栈顶地址指示的储存单元存取。
优点:存取有序。
缺点:若想取非栈顶指示的操作数的执行步骤较为复杂。
数据寻址方式的心得
1、在高级语言方面,机器的寻址方式影响不大,但是在汇编语言上,程序员必须了解机器的寻址方式,才能正确编写程序;
2、寻址方式会影响机器的指令格式;
3、不同的寻址方式适用方向不同;
4、对于不同的寻址方式,目的就是节省空间,提高CPU运行效率,减少执行时间,方便编程。