这个是最基本的数据寻址概念。
8086/8088有7种基本的寻址方式:立即寻址,寄存器寻址,直接寻址,寄存器间接
寻址,寄存器相对寻址,基址加变址寻址方式,相对基址加变址寻址。
1
立即数寻址
操作数就在指令中,作为指令的一部分,跟在操作码后存放在代码段。
mov ah,01h
mov ax,1204h
;如果立即数是16位的,则高地址放在高位,低地址放在低位
2
寄存器寻址
操作数在寄存器中,指令中指定寄存器号。对于8位操作数,寄存器可以是AL,AH,BL,BH,CL,CH,DL,DH。 对于16位操作数,寄存器可以是AX,BX,CX,DX,BP,SP,SI,DI等
mov ah,ch
mov bx,ax
3
直接寻址方式
操作数在存储器中,指令直接包含操作数的有效地址EA。
mov ax,[1122h]
;将ds:1122的数据放在ax,默认段为DS
mov es:[1234],al ;采用了段前缀
4
寄存器间接寻址
操作数在存储器中,操作数的有效地址在SI,DI,BX,BP这4个寄存器之一中。在不采用段前缀的情况下, 对于DI,SI,BX默认段为DS,而BP为SS。
mov ah,[bx]
mov ah,cs:[bx] ;使用了段前缀
5
寄存器相对寻址
操作数在存储器中,操作数的有效地址是一个基址寄存器(BX,BP)或变址寄存器(SI,DI)的内容加上8位或16位的位移之和。在指令中的8位和16位的常量采用补码表示,8位要被带符号扩展为16位。
mov ah,[bx+6];段址默认情况与寄存器间接寻址相同
6
基址加变址寻址
操作数在存储器中,操作数的有效地址是一个基址寄存器(BX,BP)加上变址寄存器(SI,DI)的
内容。如果有BP,则默认段址为SS,否则为DS.
mov ah,[bx+si]
7
相对基址加变址寻址
操作数在存储器中,操作数的有效地址是一个基址寄存器(BX,BP)和变址寄存器(SI,DI)的内容加上8位或16位的位移之和。如果有BP,则默认段址为SS,否则为DS.
mov ax,[bx+di-2]
mov ax,1234h[bx][di]
以上摘自杨季文教授 80x86 教程。我只举一例,其他的你自己领会:
以
寄存器寻址 为例:
你的代码 buf db 21,32,125,225,42,12,64,25,97,255
寻址为
mov ax,offset buf
;
数据偏移地址放入ax
mov al,byte ptr[ax]
;
用ax寄存器寻址、访问数据。
[
本帖最后由 东海一鱼 于 2009-10-25 10:26 编辑 ]