立即数寻址方式:MOV AX,0102H
源操作数是数 寄存器寻址方式 : MOV BX,AX 源操作数是寄存器。这些寄存器有:16位的AX BX CX DX SI DI SP BP 8位的AH AL BH BL CH CL DH DL 直接寻址方式 :MOV AX,[2000H] 源操作数是地址,与立即数寻址的区别就是,地址一般就是有【】 寄存器间接寻址方式 :MOV AX,[SI] 源操作数中的寄存器是BX BP SI DI 中的任意一个 寄存器相对寻址方式 :MOV AX,[DI+06H] ;AX←DS:[DI+06H] 源操作数是BX BP SI DI 中的任意一个与数字的和 基址变址寻址方式 :MOV AX,[BX+SI] ;AX←DS:[BX+SI] 源操作数是(BX BP)和( SI DI )这两组中的任意两个的和 相对基址变址寻址方式 :MOV AX,[BX+SI+06H] ;AX←DS:[BX+SI+06H] 这种寻址方式就是上两种的组合
8086/8088有7种基本的寻址方式:立即寻址,寄存器寻址,直接寻址,寄存器间接
寻址,寄存器相对寻址,基址加变址寻址方式,相对基址加变址寻址。 1 立即数寻址 操作数就在指令中,作为指令的一部分,跟在操作码后存放在代码段。 eg. 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等 eg. mov ah,ch mov bx,ax 3 直接寻址方式 操作数在存储器中,指令直接包含操作数的有效地址EA。 eg. mov ax,[1122h] ;将ds:1122的数据放在ax,默认段为DS mov es:[1234],al ;采用了段前缀 4 寄存器间接寻址 操作数在存储器中,操作数的有效地址在SI,DI,BX,BP这4个寄存器之一中。在不采用段前缀的情况下, 对于DI,SI,BX默认段为DS,而BP为SS。 eg. mov ah,[bx] mov ah,cs:[bx] ;使用了段前缀 5 寄存器相对寻址 操作数在存储器中,操作数的有效地址是一个基址寄存器(BX,BP)或变址寄存器(SI,DI)的内容加上8位或16位的位移之和。在指令中的8位和16位的常量采用补码表示,8位要被带符号扩展为16位。 eg. mov ah,[bx+6];段址默认情况与寄存器间接寻址相同 6 基址加变址寻址 操作数在存储器中,操作数的有效地址是一个基址寄存器(BX,BP)加上变址寄存器(SI,DI)的 内容。如果有BP,则默认段址为SS,否则为DS. eg. mov ah,[bx+si] 7 相对基址加变址寻址 操作数在存储器中,操作数的有效地址是一个基址寄存器(BX,BP)和变址寄存器(SI,DI)的内容加上8位或16位的位移之和。如果有BP,则默认段址为SS,否则为DS. eg. mov ax,[bx+di-2] mov ax,1234h[bx][di] [注]:上面3~7为存储器寻址方式