1

私はアセンブリ言語の初心者で、今まで多くのことを理解していますが、何日も 1 つのセクションにとどまり、混乱を招き、インターネットでアクセスした多くのページで情報が再びねじれていることが最悪の原因です。このセクションはアドレッシング モード、具体的にはメモリ参照です。たとえば、アセンブリ言語のアドレッシング モード (IA-32 NASM)

2 つの指示は同じように見えますが、コメントは異なります

  1. mov esi, var : var のアドレス(0x0040120e など) を esi にコピーします
  2. mov dword [eax], var1 : var1 の
    を eax で指定されたメモリ スロットにコピーします。

どちらの命令もラベルである var または var1 を扱いますが、一方のコメントではコンテンツのコピーであり、他方のコメントではアドレスのコピーであると述べられています。

それで、別の質問をします。

  • mov bx, [var]

また、これらの指示の違いは何ですか

だから私は違いが何であるかを知る必要があり、私が読むことができる信頼できる情報源があり、それが正しいことを確認する必要があります.ちなみに、私はこのチュートリアルを使用しており、Windowsの下でアセンブラーとしてNASMを使用しています.

4

1 に答える 1

1

mov dword [eax], var1: var1 の値を、指定されたメモリ スロットにコピーします。eax

いいえ。var1がラベルの場合、 のアドレスが の var1指すメモリに 32 ビット値として格納されeaxます。たとえば、 のアドレスがvar1eax0x04000000に含まれている0x12345678場合、これはの0x04000000メモリに書き込まれ0x12345678ます。


この命令のコメントは何でしょう: mov bx, [var]?

; Move the word located at var into bx

(注:アセンブリでの「移動」は、実際にはコピーを意味します)


mov [var], bxこれは配列の場合にのみ適用されvarますか? そうでない場合、それは何と違うのmov var, bxですか?

型は、アセンブラによって実際に強制されるわけではありません。何でもどこにでも保存できます (つまり、プログラムが書き込みを許可されている場所ならどこにでも)。したがって、あなたが宣言varしたものはほとんど無関係です。アセンブラが気にかけているすべてのコードが に配置されている可能性がありますvar(自分が何をしているのか本当にわかっていない限り、これはおそらくあまり良い考えではありません)。

との違いmov var,bxは、それmov var,bxは有効な命令ではないということです。のアドレスvarは即時であるため、これは と言うようなものですがmov 5, bx、これは明らかに機能しません。


lea eax, [var]— の値varが配置されますEAX

いいえ。 のアドレスは varにありeaxます。ロード実効アドレスLEAを意味します。メモリにアクセスする場合と同じ方法でメモリオペランドを指定しますが、そのアドレスの値ではなく、アドレス自体を取得します。

LEA簡単な算術演算にも使用できます。たとえば、lea ebx,[eax*4 + eax]は計算eax*5して結果を に入れebxます。


LEA EBX, [MY_TABLE] ここでその平均有効アドレス

はい。これと前の例に違いはありません。

于 2014-06-09T18:48:29.933 に答える