指针寄存器可以使用两次吗?

Can a pointer register be used twice?

大家好我是汇编的新手,我很难理解为什么下面的代码可以工作。我了解到 si 保存数据段的地址,并且因为 a 和 b 位于数据段中的不同位置,所以不能同时用于它们,我必须将 di 用于 b。 但出于某种原因,下面的代码(将 a 的第一个字符复制到 b 的第一个字符)工作正常

.model  small
.stack  100H
.data
  a  db   '     This      is     a          test     $'
  b   db   100 dup('$')
.code
  mov si,0
  mov al,a[si]
  mov b[si],al
.exit
end

我的主要误解是a[si]到b[si]和to[si]有什么区别 任何解释将不胜感激。

What I learnt is si holds a address of the data segment

传统上。 SI 表示 "source index." 但是,自从保护模式以来,寻址模式已经放宽了很多,因此 si 可以用于更多。毕竟是通用寄存器。

My main misunderstanding is what is the difference between a[si] to b[si] and to [si] [...]

  • [si] 获取 si 中的地址并引用该地址处的数据。
  • a[si]si中的地址加上地址常量a来引用数据。
  • b[si]si中的地址加上地址常量b来引用数据。

mov al, a[si]

a + si 处的字节移动到 al

mov b[si], al

al 中的字节移动到 b + si 中的字节。这是一个可传递的操作链,因此 a[si] = b[si] 在此之后。