AT& T構文の(%eax)の意味?
-
06-07-2019 - |
質問
すみませんが、私はx86アセンブリの初心者であり、一般的なアセンブリです。
だから私の質問は、次のようなものです:
addl %edx,(%eax)
%eaxは、整数へのポインタを保持するレジスタです。 xp
と呼びましょうこれは、 * xp = * xp +%edx
と言っているということですか? (%edx
は整数です)
addlが結果を保存する場所がわかりません。 %eax
がintへのポインタである場合、(%eax)
はそのintの実際の値である必要があります。 addl
は%edx +(%eax)
の結果を * xp
に保存しますか?誰かがこれを私に説明してくれることを本当に楽しみにしています!
ご協力ありがとうございます!
解決
はい、この指示はあなたが思っているとおりにしています。
ほとんどのx86算術命令は、ソースとデスティネーションの2つのオペランドを取ります。 AT& T構文(ここで使用)では、宛先は常に正しいオペランドです。次のような指示で:
addl %edx, %eax
edx
と eax
の値が加算され、結果が eax
に保存されます。ただし、この例では、(%eax)
はメモリオペランドです。これがAT& T構文での括弧の意味です(NASM構文の角かっこなど)。
これは、 eax
がポインターとして扱われることを意味するため、右オペランドは eax
が指すアドレスから取得され、結果は同じアドレスに格納されます。 。
所属していません StackOverflow