寄存器的功能是存储二进制代码,它是由具有存储功能的触发器组合起来构成的。一个触发器可以存储1位二进制代码,故存放n位二进制代码的寄存器,需用n个触发器来构成。下面小编给大家介绍一下“寄存器寻址和直接寻址的区别”
一、寄存器寻址和直接寻址的区别
1、寻址范围区别
寄存器寻址的寻址范围是:
1)4个工作寄存器组共有32个通用寄存器,但在指令中只能使用当前寄存器组(工作寄存器组的选择在前面专用寄存器的学习中,我们已知道,是由程序状态字PSW中的RS1和RS0来确定的),因此在使用前常需要通过对PSW中的RS1、RS0位的状态设置,来进行对当前工作寄存器组的选择。
2)部份专用寄存器。例如,累加器A、通用寄存器B、地址寄存器DPTR和进位位CY。
直接寻址的寻址范围是:
1)内部数据存储器,在指令中以直接地址表示。
2)特殊功能寄存器SFR,在指令中用寄存器名称表示。
2、指令区别
直接寻址会在指令格式的地址的字段中直接指出操作数在内存的地址。
寄存器寻址指定了寄存器名称就能得到操作数,指令中给出的操作数地址是通用寄存器的编号。
3、操作数所处位置区别
直接寻址的操作数在内存中。
寄存器寻址的操作数放在CPU的通用寄存器中,
4、寄存器寻址和直接寻址的例子
寄存器寻址方式(源或者目的地址有一个是寄存器):
a. 源操作数是寄存器寻址方式:
如:ADD VARD, EAX
其中:VARD表示双子,也可以是VARW(字)和VARB(字节)类型的内存变量。
b. 目的操作数是寄存器寻址方式
如:ADD BH, 78h ADD AX, 1234h MOV EBX, 12345678H等。
c. 源和目的操作数都是寄存器寻址方式
如:MOV EAX, EBX MOV AX, BX MOV DH, BL等。
直接寻址方式(地址值在括号里)
MOV AX,[8054]
如(DS) = 2000H,
则执行结果为(AX) = 3050H
(物理地址=20000+8054=28054H)
28054H里的内容为3050H
在汇编语言指令中,可以用符号地址代替数值地址
如:MOV AX,VALUE
此时VALUE为存放操作数单元的符号地址。
如写成:MOV AX,[VALUE]也是可以的,两者是等效的。
如VALUE在附加段中,则应指定段超越前缀如下:
MOV AX,ES:VALUE 或 MOV AX,ES:[VALUE]
(图片来源于互联网)
评论 (0)