sub [si-300h],ax
这是寻址方式中的寄存器相对寻址
所以目的操作数的地址是段地址为ds,偏移地址为si-300h的物理地址,
即目的操作数的地址为(ds*10H+si-300h)
ps:若有不明白的地址,可以追问
寻址方式的简介
段地址(SA)和偏移地址(EA)
1.直接寻址
直接寻址方式是指操作数的偏移地址在指令中直接给出,例如
MOV AX,[1234H]
EA = 1234H,SA=DS
2.寄存器间接寻址
寄存器间接寻址是指操作数的偏移地址在BX,BP,SI,DI四个寄存 器之一中
(1) 当以BX,SI或DI寄存器进行间接寻址时,操作数的物理地址 有DS中的段地址与BX,SI或DI中的偏移地址构成
(2) 当以BP寄存器进行间接寻址时,操作数的物理i地址有SS中的段地址与BP中的偏移地址构成
MOV AX,[BX,SI或DI]
EA = BX,SI或DI,SA = DS
MOV AX,[BP] EA = BP,SA = SS
3.寄存器相对寻址
寄存器相对寻址是指操作数的偏移地址是BX,BP,SI,DI之一的值和一个8位或16位偏移地址之和
(1) 当以BX,SI或DI寄存器进行间接寻址时,操作数的物理地址 有DS中的段地址与BX,SI或DI中的偏移地址构成
(2) 当以BP寄存器进行间接寻址时,操作数的物理i地址有SS中的段地址与BP中的偏移地址构成
MOV AX,[BP+100H] EA = BP+100H,SA = SS
MOV AX,[BX,SI或DI + 100H] EA = BX,SI或DI + 100H,SA = DS
[BX+100H] 等价于 200H[SI]
4.基址变址寻址
基址变址寻址是指操作数的偏移地址是一个基址寄存器BX,BP的值和一个变址寄存器SI,DI的值之和
(1) 当以BX作为基址寄存器时,操作数物理地址由DS中的段地址与SI或DI中的偏移地址构成
(2) 当以BP作为基址寄存器是,操作数物理地址由SS中的段地址与SI或DI中的偏移地址构成
MOV AX,[BX+DI或SI] EA = BX+SI或DI,SA = DS
MOV AX,[BP+DI或SI] EA = BP+SI或DI,SA = SS
[BX+SI] 等价于 [BX]+[SI]
5.相对基址变址寻址
相对基址变址寻址是指操作数的偏移地址是一个基址寄存器BX,BP的值加上一个变址基础器SI,DI的值,再加上指令中的一个8位,16位偏移量之和
(1) 当以BX作为基址寄存器时,操作数物理地址由DS中的段地址与SI或DI中的偏移地址构成
(2) 当以BP作为基址寄存器是,操作数物理地址由SS中的段地址与SI或DI中的偏移地址构成
MOV AX,[BX+100H+DI或SI] EA = BX+DI或SI+100H,SA = DS
MOV AX,[BP+100H+DI或SI] EA = BP+DI或SI+100H,SA = SS
[BX+SI+100H] 等价于 100H[BX+SI] 等价于 [BX]+[SI]+100H
目的操作数的地址: DS*16+[SI+(-300H)],此时-300H要转化成补码再相加,它的补码为FD00H,所以也就是DS*16+(SI+FD00H),其中SI+FD00H为偏移地址,相加之后为16位数,如果有进位要舍弃,然后再和DS*16相加.