1. 3条原则
(1) 在8086CPU中,只有寄存器bx、si、di、bp这四个寄存器可以用在[...]中来进行内存单元的寻址。
如以下指令都是正确的
mov ax, [bx] mov ax, [bx+si] mov ax, [bx+di] mov ax, [bp] mov ax, [bp+si] mov ax, [bp+di]
而下面的指令则都是错误的
mov ax, [cx] ; 错误
mov ax, [ax] ; 错误
mov ax, [dx] ; 错误
mov ax, [ds] ; 错误
(2) 在[...]中,这4个寄存器可以单个出现,或只能以4种组合出现。即 bx和si, bx和di、bp和si, bp和di
如下面正确的指令:
mov ax, [bx] mov ax, [si] mov ax, [di] mov ax, [bp] mov ax, [bx+si] mov ax, [bx+di] mov ax, [bp+si] mov ax, [bp+di] mov ax, [bx+si+idata] mov ax, [bx+di+idata] mov ax, [bp+si+idata] mov ax, [bp+di+idata]
而下面的指令是错误的:
mov ax, [bx+bp] ; 错误
mov ax, [si+di] ; 错误
(3) 只要在[...]中使用寄存器bp, 而指令中没有显式地给出段地址,则段地址默认在ss中.
如:
mov ax, [bp] ; 含义: (ax) = ((ss)*16 + (bp))
mov ax, [bp+idata] ; 含义: (ax) = ((ss)*16 + (bp) + (idata))
mov ax, [bp+si] ; 含义: (ax) = ((ss)*16 + (bp) + (si))
mov ax, [bp+si+idata] ; 含义: (ax) = ((ss)*16 + (bp)+ (si) + (idata))