Memory 为什么rep movb使用数据段?

Memory 为什么rep movb使用数据段?,memory,assembly,x86,cpu-registers,Memory,Assembly,X86,Cpu Registers,如果使用旧的段寄存器已经过时,为什么在我现在有这样的寄存器时仍然存在: rep movsb %ds:(%rsi),%es:(%rdi) 这个“ds”和“es”在干什么?没有段就不一样了?您不需要指定它们,但它们仍然“存在”。但是,它们没有被用作“段寄存器”;它们被用作选择器 段寄存器现在用作全局描述符(或可能是本地描述符)表中的选择器,该表用于定义内存区域及其读/写权限。您不需要指定它们,但它们仍然在“那里”。但是,它们没有用作“段寄存器”;它们被用作选择器 段寄存器现在用作全局描述符(或可能

如果使用旧的段寄存器已经过时,为什么在我现在有这样的寄存器时仍然存在:

rep movsb %ds:(%rsi),%es:(%rdi)

这个“ds”和“es”在干什么?没有段就不一样了?

您不需要指定它们,但它们仍然“存在”。但是,它们没有被用作“段寄存器”;它们被用作选择器


段寄存器现在用作全局描述符(或可能是本地描述符)表中的选择器,该表用于定义内存区域及其读/写权限。

您不需要指定它们,但它们仍然在“那里”。但是,它们没有用作“段寄存器”;它们被用作选择器


段寄存器现在用作全局描述符(或可能是本地描述符)表中的选择器,该表用于定义内存区域及其读/写权限。

继续,忽略段。
rsi
的段默认为
ds
rdi
的段默认为
es
,因此您无需说出来。@RaymondChen更不用说,在64位代码中,这显然是,它们被忽略了。这看起来像是一个愚蠢的反汇编程序的输出,它喜欢显示默认段和隐式操作数。objdump:/gdb也显示段…指令通常写为
rep movsb
,仅此而已。@Jester我认为这些段仍然受到
fs
gs
的尊重,但是是的,
ds
es
要求是平面的,所以它们之间没有区别。(至少这是我对7.3.9.4“64位模式下的字符串操作”的理解。)继续并省略这些段。
rsi
的段默认为
ds
rdi
的段默认为
es
,因此您无需说出来。@RaymondChen更不用说,在64位代码中,这显然是,它们被忽略了。这看起来像是一个愚蠢的反汇编程序的输出,它喜欢显示默认段和隐式操作数。objdump:/gdb也显示段…指令通常写为
rep movsb
,仅此而已。@Jester我认为这些段仍然受到
fs
gs
的尊重,但是是的,
ds
es
要求是平面的,所以它们之间没有区别。(至少这是我对7.3.9.4“64位模式下的字符串操作”的理解。)就像“询问”GDT rdi或rsi的地址是否可以写入或指令需要执行的任何操作一样?嗯。。不是问,而是说。EDI将使用ES选择器,ESI将使用DS选择器。这类似于“询问”GDT rdi或rsi的地址是否可供写入或指令需要执行的任何操作?Mmm。。不是问,而是说。EDI将使用ES选择器,ESI将使用DS选择器。