2016-04-27 106 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選擇器。 –

相關問題