大家好我是大会新成员,我很难理解为什么下面的代码有效。我学到的是si保存数据段的地址,因为a和b位于数据段的不同位置,它不能用于它们两者,我将不得不使用di作为b。 但由于某种原因,下面的代码(将a的第一个char复制到b的第一个char)工作正常
.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
我的主要误解是[si]与b [si]和[si]之间的区别是什么 任何解释都将受到高度赞赏。
答案 0 :(得分:2)
我学到的是si拥有数据段的地址
传统上。 SI表示“源索引”。但是,自保护模式以来,寻址模式已经大量放松,因此si
可以用于更多。毕竟,这是一个通用的注册表。
我的主要误解是[si]与...之间的区别是什么 b [si]和[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]
之后。