movsb指令中,x86寄存器表示源地址位置的是哪一个?
SI
(或32位系统中的ESI
)代表“源索引”,而DI
代表“目的地索引”,这来自于这些寄存器的特殊用途。 - Michael Burrds
可以被覆盖,es
是固定的。 - C. K. Youngds
的指令可以用段前缀覆盖;而使用 es
的指令(例如 stosb
等)是固定的,无法被覆盖。 - C. K. Young如何从手册中提取信息
现在您已经登录到osdev.org,是时候通过实际学习来偿还道德债务了。:-)
Intel 手册卷2 指令集参考 - 325383-056US September 2015 "MOVS/MOVSB/MOVSW/MOVSD/MOVSQ—从字符串到字符串移动数据" 节说:
将第二操作数(源操作数)指定的字节、字或双字移动到第一操作数(目的操作数)指定的位置。源操作数和目的操作数都位于内存中。源操作数的地址从DS:ESI或DS:SI寄存器读取。
最小测试程序
最后,您必须编写一个使用该指令的最小程序,以查看您是否正确理解了它:
section .data
src db 0
dest db 1
section .text
global _start
_start:
mov esi, src
mov edi, dest
cld
movsb
/* dest == 0*/
具有断言的可运行版本,请在GitHub上查看。
osdev.org
的入门问题! - Aquarius_Girl