movzwl、%ax、および負の値で奇妙な結果
-
26-10-2019 - |
質問
さて、私は次のコードのスニペットを扱っています:
push %ebp
mov %esp,%ebp
push %ebx
mov 0x8(%ebp),%eax
movzwl %ax,%edx
したがって、これは、肯定的な価値を扱うときに期待どおりに動作します。 %EDXにコピーされた値は、16ビットの%EAX(または%ax)です。
ただし、負の数を入れた場合、すべてが奇妙になり始め、予想どおりに振る舞っていないようです。
たとえば、%EAXの値が-67043552の場合、%EDXにコピーされた値は65312です。
私はアセンブリがかなり初めてです。これが私の側の明らかな誤解である場合は申し訳ありません。どんな助けも大歓迎です。
解決
それを覚えておいてください movzwl
ビットのみをコピーします %ax
の中へ %edx
高い16ビットを埋めます %edx
ゼロと。
そう %edx
常に65535以下の正の数になります。
詳細に: -67043552
ヘックスでは fc00ff20
. 。それで、それが入っている場合 %eax
, 、 それから %ax
含む ff20
. 。あなたがそれを移動する場合 %edx
ゼロエクステンションで %edx
取得 0000ff20
. 。それは65312です。
所属していません StackOverflow