菜鸟学汇编010 寄存器bx、si、di、bp

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))

你可能感兴趣的:(汇编)