1

x86で8ビット値を32ビットレジスタに追加する方法はありますか?

たとえば、「ADD EAX,8」を実行すると、8 は 32 ビット値としてエンコードされるため、バイナリには「08000000」が含まれます。1 つずつ追加する場合は、明らかに INC 命令を使用できますが、x86 アセンブリで一般的な 8 ビット値を追加する方法はありますか?

「ADD AL,8」を実行できるとは思わないことに注意してください。AL に既にたとえば xFE が含まれている場合、キャリーは実行されないからです。しかし、"ADC AL,8" はどうでしょうか? それは AH に値を伝えますか?

4

1 に答える 1

5

8 ビット符号拡張即値を使用するエンコーディングがあり、ADD r/m32, imm8opcodeとしてリストされてい83 /0ます。エンコーディングが必要であることを示す方法は、アセンブラによって異なりますが、使用するものについて言及するのを忘れています。nasmたとえば、最適化をオンにするか、次のように明示的に要求すると、このエンコーディングが自動的に使用されますadd eax, byte 8。GNUアセンブラも短いエンコーディングを使用しているようですが、実際には32ビットに強制する方法がわかりません(問題の逆のようなものです)。

于 2012-11-14T02:18:41.460 に答える