指针寄存器可以使用两次吗?
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]
在此之后。
大家好我是汇编的新手,我很难理解为什么下面的代码可以工作。我了解到 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]
在此之后。