質問

さて、私は次のコードのスニペットを扱っています:

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です。

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