汇编中的变址寄存器,指的是
- si ==》 源变址寄存器
 - di ==》 目标变址寄存器
 
变址寄存器实例
例如,使用si和di进行字符串的复制
首先使用ds:si指向要复制的原始字符串,用ds:di指向复制的目的空间,并使用一个循环完成复制
data segment
    db 'abcddcba'
data ends
code segment
    assume cs:code, ds:data
start:
    mov ax, data
    mov ds, ax              ; 把ds指向data
    mov si, 0               ; 源字符串起始0
    mov di, 8               ; 目标字符串起始8
    mov cx, 8               ; 循环8次
    s:
        mov al, [si]
        mov [di], al
        inc si
        inc di
        loop s
    mov ax, 24H
    mov ds:[16], ax      ; 结束标记为$,ASCII为24h
    lea dx, ds:[0]
    mov ah, 9h
    int 21h
    mov ax, 4c00h
    int 21h
code ends
end start
在这里, si和di是两个辅助的寄存器,可以让代码看起来更清晰
在相对寻址时,不单可以[bx],还可以[bx+idata],以及
- [bx+si]
 - [bx+si+idata]
 
这里的idata表示常量,[bx+idata]表示寄存器+常量,而[bx+si]表示两个寄存器,最后一个表示寄存器+寄存器+常量方式进行变址寻址
这里的bx,不能换为ax,而si可以换为di,因为通用寄存器中相对寻址仅能bx,而si和di均为变址寄存器,另外还可以使用的有bp寄存器,明确不能用的ax, cx, dx, ds, 而能使用的组合寄存器则仅有以下4个,否则也会报错
- bx 和 si
 - bx 和 di
 - bp 和 si
 - bp 和 di
 
bp不指定寄存器时,默认跟着ss,而不是ds
