問題タブ [addressing-mode]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - NASM がいつ mov 操作のサイズを推測できるかを判断する
しばらくの間、x86 アセンブリで何かが混乱しました。NASM が操作のサイズを推測できる方法/タイミングです。例を次に示します。
ここでは、eax に保持されているアドレスに格納されている 4 バイトを ebx に移動しています。レジスタが 32 ビットであるため、操作のサイズは 4 バイトと推測されます。
ただし、この操作は推論されず、コンパイル エラーがスローされます。
もちろん、解決策はこれです:
これにより、数値 123456 の 32 表現が、eax に保持されているアドレスに格納されているバイトに移動されます。
しかし、これは私を混乱させます。確かに eax が 32 ビットであることを確認できるので、mov の後に dword を指定しなくても 32 ビット値として保存したいと考えるべきではありませんか?
確かに、12345 の 16 ビット表現 (16 ビットに収まる小さい数値) を eax に入れたい場合は、次のようにします。
assembly - 命令 "mov ax,[ax]" はコンパイルされません
「emu8086」と呼ばれるx8086エミュレーターを使用しています。簡単なコードを書いたのですが、実行するとエラーが発生します。何が問題なのかわかりません。 http://prntscr.com/8bpivm
assembly - インデックスレジスタとしてのスタックポインタ
スタック ポインタ (esp / rsp) をインデックス レジスタとして使用できないのはなぜ[esi + esp*4]
ですか?
assembly - メモリ位置の内容を参照します。(x86 アドレッシング モード)
別のキャラクターと比較したいキャラクターを含むメモリの場所があります(スタックの一番上にないので、それだけpop
ではできません)。比較できるように、メモリの場所の内容を参照するにはどうすればよいですか?
基本的に、構文的にどのように行うのですか。
assembly - LEA 命令でレジスタを減算しますか?
LEA 命令は負の変位をサポートしていますか?
上記のコードを asm ファイルで使用すると、エラーが発生しました。
Cで次のようなポインター演算を実行できることを私は知っています:
次に、次のように仮定します。
動作します。
また、次を使用して GCC コンパイラが何をするかを確認しようとします。
しかし、私の asm の知識は、GCC コンパイラからの asm 出力を理解するには十分ではありません。
誰でも理由を説明できますか:
動作しません。そして、私はこれらを使用して同じことを達成しています:
また
それを行うより標準的な方法は何ですか?
MAC OSX 10.11で2015年11月26日にコンパイルされたNASMバージョン2.11.08を使用しています
よろしくお願いします。