私はこのようにしていたときに、まだ現在の日には存在しない理由古いセグメントを登録し使用することが古くなっている場合:この「DS」と「ES」はなぜrep movbはデータセグメントを使用していますか?
rep movsb %ds:(%rsi),%es:(%rdi)
何をしているのですか?セグメントがなければ同じではないでしょうか?
私はこのようにしていたときに、まだ現在の日には存在しない理由古いセグメントを登録し使用することが古くなっている場合:この「DS」と「ES」はなぜrep movbはデータセグメントを使用していますか?
rep movsb %ds:(%rsi),%es:(%rdi)
何をしているのですか?セグメントがなければ同じではないでしょうか?
これらは指定する必要はありませんが、「存在する」のままです。しかし、それらは "セグメントレジスタ"として使用されていません。それらはセレクタとして使用されています。
セグメントレジスタは、メモリ領域とその読み書き権限を定義するために使用されるグローバルディスクリプタ(または場合によってはローカルディスクリプタ)テーブルのセレクタとして使用されるようになりました。
は、rdiやrsiに書かれたアドレスや命令の実行に必要なアドレスがあればGDTに "尋ねる"のと同じですか? – int3
Mmm ..それは聞いていない、それは言っている。 EDIはESセレクタを使用し、ESIはDSセレクタを使用します。 –
セグメントを省略してください。 'rsi'のセグメントのデフォルトは' ds'で、 'rdi'のセグメントのデフォルトは' es'です。あなたはそれを言う必要はありません。 –
@RaymondChenこれは明らかに64ビットコードでは、とにかく無視されます。デフォルトのセグメントと暗黙的なオペランドを表示するのが好きな愚かな逆アセンブラからの出力のようです。 – Jester
objdump:/そしてgdbはまた、セグメントを示しています... – int3