当前位置: 汇编教程 > 03-指令系统 > 阅读正文

汇编 变址寄存器

2021.7.11.   396 次   691字

汇编中的变址寄存器,指的是

  • 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

本篇完,还有疑问?

加入QQ交流群:11500065636 IT 技术交流群