2016-04-27 4 views
0

Si vous utilisez les anciens segments registres est obsolète pourquoi existe encore dans les jours actuels quand j'ai comme ceci:pourquoi rep movb utilise des segments de données?

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

Quel est ce « ds » et « es » faire? Ce ne serait pas la même chose sans les segments?

+0

Allez-y et omettez les segments. Le segment pour 'rsi' par défaut' ds' et le segment pour 'rdi' par défaut' es', vous n'avez donc pas besoin de le dire. –

+2

@RaymondPour ne pas mentionner que dans le code 64 bits que cela est clairement, ils sont ignorés de toute façon. Cela ressemble à la sortie d'un désassembleur stupide qui aime afficher les segments par défaut et les opérandes implicites. – Jester

+0

objdump:/et gdb montre aussi les segments ... – int3

Répondre

5

Vous n'avez pas besoin de les spécifier, mais ils sont toujours "là". Ils ne sont pas utilisés comme "registres de segment", cependant; ils sont utilisés comme sélecteurs. Les registres de segment sont maintenant utilisés comme sélecteurs dans la table descripteur global (ou éventuellement descripteur local), qui est utilisée pour définir les régions de mémoire et leurs autorisations de lecture/écriture.

+0

est comme "demander" GDT si l'adresse que rdi ou rsi a est disponible pour écrire ou quoi que l'instruction doit faire? – int3

+0

Mmm .. Ce n'est pas demander, c'est raconter. EDI utilisera le sélecteur ES et ESI utilisera le sélecteur DS. –