質問

すみませんが、私は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 が指すアドレスから取得され、結果は同じアドレスに格納されます。 。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top