本篇主要介绍了操作系统中,七种寻址方式。
一、立即数寻址
操作数作为指令的一部分,直接写在指令中,这样的寻址方式是立即数寻址。如果立即数为16位或32位,则按照高高低低储存。
MOV AH, 80H
ADD AX, 1234H
C语言中int a = 10;
也是用到了立即数寻址。
二、寄存器寻址
在指令中,如果使用到了寄存器,无论是源操作数还是目标操作数,均为寄存器寻址。
常用的寄存器有:AH, AL, BH, BL, AX, BX, EAX, EBX等。
MOV EAX, EBX
MOV DH, BL
三、直接寻址
指令所要的操作数在内存,在指令中直接给操作数的有效地址。
MOV BX, [1234H]
MOV AX VARW ;VARW是变量名
方括号表示并不是将1234H
放入寄存器,而是将1234H
作为地址,去取出这个地址位置的数放入BX
中。该寻址方式可在64k的段内进行寻址。
汇编语言中定义变量:
.data sum DWORD 0
这样变量
sum·
就是0了。除了DWORD
,还有DB DW DD BYTE WORD
这些。
四、寄存器间接寻址
操作数在内存中,其地址用SI DI BX BP四个寄存器来指定。如果用前三个寄存器,则段寄存器为DS,若为BP寄存器,则段寄存器为SS。
MOV BX, [DI]
操作数最终的地址就是段地址加上寄存器中偏移地址。如果DS为1000H,DI为2345H,那么最终地址为12345H。
五、寄存器相对寻址
操作数在存储器中,有效地址为基址寄存器(BX, BP)或变址寄存器(SI, Di)的内容和指令中的8/16位偏移量之和。如果是SI DI BX来指定地址,则缺省的段寄存器为DS,如果是BP来指定,则缺省段寄存器为SS。
MOV BX, [SI+100H]
如果DS为1000H,SI为2345H,则最后的地址为123445H。
六、基址加变址寻址
操作数在储存器,有效地址是基址寄存器(BX, BP)和变址寄存器(SI, DI)之和。
MOV BX, [BX+SI]
DS地址为1000H,BX为2100H,SI为0011H。最后的地址为12111H。
七、相对基址加变址
操作数在存储器中,有效地址是基址寄存器、变址寄存器和一个偏移量之和。此种寻址方法有很多寻址方式。
MOV AX, [BX+SI+200H]
MOV AX, 1000H[BX+SI]
MOV AX, 1000H[BX][SI]
MOV AX, 1000H[SI][BX]
如果DS为1000H,BX为2100H,SI为0010H,则最后的地址为12310H。