2016-04-27 13 views
0

私はこのようにしていたときに、まだ現在の日には存在しない理由古いセグメントを登録し使用することが古くなっている場合:この「DS」と「ES」はなぜrep movbはデータセグメントを使用していますか?

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

何をしているのですか?セグメントがなければ同じではないでしょうか?

+0

セグメントを省略してください。 'rsi'のセグメントのデフォルトは' ds'で、 'rdi'のセグメントのデフォルトは' es'です。あなたはそれを言う必要はありません。 –

+2

@RaymondChenこれは明らかに64ビットコードでは、とにかく無視されます。デフォルトのセグメントと暗黙的なオペランドを表示するのが好きな愚かな逆アセンブラからの出力のようです。 – Jester

+0

objdump:/そしてgdbはまた、セグメントを示しています... – int3

答えて

5

これらは指定する必要はありませんが、「存在する」のままです。しかし、それらは "セグメントレジスタ"として使用されていません。それらはセレクタとして使用されています。

セグメントレジスタは、メモリ領域とその読み書き権限を定義するために使用されるグローバルディスクリプタ(または場合によってはローカルディスクリプタ)テーブルのセレクタとして使用されるようになりました。

+0

は、rdiやrsiに書かれたアドレスや命令の実行に必要なアドレスがあればGDTに "尋ねる"のと同じですか? – int3

+0

Mmm ..それは聞いていない、それは言っている。 EDIはESセレクタを使用し、ESIはDSセレクタを使用します。 –

関連する問題