2016-04-27 61 views
0

如果使用旧段寄存器是过时的,为什么在当前的日子确实还存在时,我有这样的:为什么rep movb使用数据段?

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

这是什么“DS”和“ES”干什么?没有这些细分市场就不一样了?

+0

来吧,省略部分。 'rsi'的段默认为'ds','rdi'的段默认为'es',所以你不需要说。 –

+2

@RaymondChen更不用说,在64位代码中,这显然是无论如何都被忽略了。这看起来像一个愚蠢的反汇编程序的输出,喜欢显示默认段和隐式操作数。 – Jester

+0

objdump的:/和gdb也显示了段... – int3

回答

5

你并不需要指定他们,但他们仍然是“有”。但是,它们并未被用作“段寄存器”。他们被用作选择器。

段寄存器现在被用作选择出全局描述符(或者可能局部描述符)表,这是用来定义存储器区域和它们的读/写权限。

+0

就像是“问” GDT如果地址RDI或RSI已可写或任何指令需要做什么? – int3

+0

嗯..这不是问,它是说。 EDI将使用ES选择器,ESI将使用DS选择器。 –

相关问题