28

すみませんが、私は x86 アセンブリ、およびアセンブリ全般にまったく慣れていません。

だから私の質問は、私は次のようなものを持っています:

addl %edx,(%eax)

%eax は、整数へのポインタを保持するレジスタです。それをxpと呼びましょう

これは、次のように言っているということ*xp = *xp + %edxですか? (%edxは整数)

addl が結果をどこに保存するのか混乱しています。%eaxが int へのポインタである場合(%eax)、その int の実際の値である必要があります。の結果をaddl保存%edx+(%eax)*xpますか?誰かにこれを説明してもらいたいです!

どんな助けにも本当に感謝します!

4

1 に答える 1

51

はい、この命令は、あなたが思っていることを正確に実行しています。

ほとんどの x86 算術命令は、ソースとデスティネーションの 2 つのオペランドを取ります。AT&T 構文 (ここで使用) では、宛先は常に右側のオペランドです。したがって、次のような命令を使用します。

addl %edx, %eax

edxとの値eaxが加算され、結果が に格納されeaxます。ただし、あなたの例で(%eax)は、メモリオペランドです。これが、AT&T 構文での括弧の意味です (NASM 構文の角括弧のように)。

これは、eaxがポインターとして扱われることを意味するため、 が指すアドレスから右側のオペランドが取得されeax、結果が同じアドレスに格納されます。

于 2009-10-24T21:15:23.217 に答える