【发布时间】:2010-12-01 19:58:11
【问题描述】:
我不明白有什么区别。
【问题讨论】:
标签: assembly x86 cpu-registers
我不明白有什么区别。
【问题讨论】:
标签: assembly x86 cpu-registers
我的程序集有点生锈,但一个是源索引,另一个是目标索引。像movsb 这样的指令将从SI 指向的内存位置复制一个字节,并将其移动到DI 指向的内存位置,然后将两者递增,所以如果你想复制存储在SI+1 到 DI+1,只需要进一步的 movsb 指令。
【讨论】:
当你使用像movsb这样的指令时,si被认为是s源寄存器,而di被认为是d目标寄存器。但它们都是普通的 x86 寄存器。
【讨论】:
如上所述,di 代表目标索引,si 代表源索引,当我们想要从内存中移动数据时,我们使用 si,例如 mov ax,[si]。 当我们想要将数据移动到内存时,我们使用 di。例如,mov [di],ax
都是16位寄存器,不能拆分成8位
【讨论】:
SI 代表源索引。源索引用作指向在字符串指令(LODS、MOVS 或 CMPS)中读取的当前字符的指针。在进行间接寻址时,源索引也可用作添加 Bx 或 Bp 的偏移量。
示例:
MOV [Bx + SI] , Ax
该指令将 Ax 的内容复制到地址为 Bx 和 SI 之和的内存位置。
DI 代表目标索引,用作指向在字符串指令中写入或比较的当前字符的指针。
它也可以像 SI 一样作为偏移量使用。
【讨论】: