什么是寻址方式
汇编指令由操作码字段
和操作数字段
构成。
对于双操作指令,第一个操作数称为目的操作数,表示操作后的结果;第二个操作数称为源操作数,表示来源操作数。两者以逗号分隔。如:
寻址方式,通俗地说就是寻找操作数地址的方法。
寻址方式的数量代表了微机系统对存储器管理能力的强弱,合理地使用寻址方式可以扩大访存空间,缩短指令长度,满足各种程序设计需要。
与数据有关的寻址方式划分为三类:立即寻址方式,寄存器寻址方式,存储器寻址方式。
七种与数据有关的寻址方式
要求掌握下列七种与数据有关的寻址方式。其中后五种属于存储器寻址方式。
- 立即寻址方式(Immediate addressing)
- 寄存器寻址方式(Register addressing)
- 直接寻址方式(Direct addressing)
- 寄存器间接寻址方式(Register indirect addressing)
- 寄存器相对寻址方式(Register relative addressing)
- 基址变址寻址方式(Based indexed addressing)
- 相对基址变址寻址方式(Relative based indexed addressing)
选择寻址方式有两条原则:第一实用,第二有效。最终都应达到运行速度快、指令代码短的高效率目标程序的目的。立即寻址和寄存器寻址无论从指令长度和指令执行时间都比存储器寻址要好,但是也要根据具体情况选用。学会使用寻址方式是理解指令作用的关键。
1. 立即寻址方式
所要找的操作数直接写在指令中,这种操作数叫立即数。在8086、80286中立即数是8位或16位的,在80386以上可以是32位的立即数。立即寻址方式用来表示常数。
在DEBUG下数据都是十六进制表示的,因此不需要用H标注,同时要把十进制变为十六进制才行。
在DEBUG下执行:
-A MOV AX,3060 MOV AL,5 MOV BL,FF MOV BX,A46D MOV CX,17
接着用T命令单步执行,观察各寄存器的值。
注意:
执行T命令之前,指令指针寄存器IP的值要用R IP 修改成第一条指令的偏移地址,这样T命令才能从第一条指令开始执行。
2. 寄存器寻址方式
在寄存器寻址方式中,操作数在寄存器中,在指令中指定寄存器名即可。
MOV BX,1234
MOV AX,BX
3. 直接寻址方式
操作数存放在内存中。操作数的偏移地址(也称为有效地址EA)直接写在指令中,EA加上DS的基地址才是数据存放的物理地址。
(1)存储器读操作
MOV AX,DS:[2000H]
(2)存储器写操作
MOV DS:[4000H],AX
4. 寄存器间接寻址方式
操作数存放在内存中。指令形式如: MOV AX,[BX]
5. 寄存器相对寻址方式
操作数存放在内存中。指令形式如: MOV AX,[BX+1200H]
6. 基址变址寻址方式
操作数存放在内存中。指令形式如: MOV AX,[BX+SI]
7. 相对基址变址寻址方式
操作数存放在内存中。指令形式如: MOV AX,[BX+SI+1200H]
实验示例
根据题目要求,写出相应的汇编指令:
- AX、BX寄存器分别赋值为
0008H
和0006H
- AX和BX的内容相加,结果在AX中
- 用寄存器间接寻址将相加的结果保存到6号单元
MOV AX,0008H
MOV BX,0006H
ADD AX,BX
MOV [BX],AX
HLT ;停机指令