2016-08-24 4 views
0

NASMのマニュアルでmov eax, [ds:0x18]の指示に関する情報が見つかりません。NASMのマニュアルで[ds:0x18]が参照している情報が見つかりません

有効なアドレッシングのための有効な構文である点を除いて、NASMのドキュメントを見ると、[ds:0x18]のセマンティクスは書かれていません。

誰かがこの構文の機能を明確にし、可能であれば、そのセマンティクスが暗黙的に与えられているドキュメントの場所を参照できますか?

+0

その行は逆アセンブリから生成されましたか? 'ds:'部分はセグメントの上書きですが、Bo Perssonが答えで言及しているように 'ds'がここではデフォルトになっていたので、それを指定するのは冗長です。しかし、逆アセンブラの中にはまだそのようなアドレスが表示されることがあります。 – Michael

+0

Boの答えにちょうど無意味な追加:[MOV命令](http://x86.renejeschke.de/html/file_module_x86_id_176.html)、この場合の関連する変形は '8B/r'です。MOV r32、r/m32 32ビットのメモリ内容(アドレスds:0x18)を32ビットレジスタ(eax)に移動します。 – Ped7g

答えて

3

データセグメントのアドレス0x18からeaxがロードされます。データセグメントdsがデータロードのデフォルトセグメントであるため、これを接頭辞として使用することは非常に特殊な場合を除いて冗長です。

mov eax, [cs:0x18]でコードセグメントから何かを読み込むのが面白いでしょう。

+0

ありがとう@BoPersson。 NASMがなぜそれに言及していないのか知っていますか?それは構文がインテルのx86マニュアルから継承されているからですか? – Shuzheng

+0

フラットメモリモデルではすべてのセグメントが同じではありませんか? – Shuzheng

+1

場合によっては、 'fs'や' gs'を使ってスレッド情報/スレッドのローカルストレージを指すことがあります。 – Michael

関連する問題