x86でAT&T構文を使用して長いレジスタにイミディエートバイトを追加するにはどうすればよいですか?
-
29-10-2019 - |
質問
Intelのマニュアルを読んで理解していることから、add $0x7f, %ebx
のような命令を書くことが可能であり、合計3バイトの83 /0 ib
としてエンコードされている必要があります。
ただし、これを行うと(add
、addb
、またはaddl
のいずれを使用する場合でも)、常に即値を32ビット値に「プロモート」し、81 /0 id
としてエンコードして6バイトを使用します。同じ問題がadc
、sub
などにも存在します。GNUas
でAT&T構文を使用していることに注意してください。
1日以上解決策を探していましたが、見つかりませんでした。誰かアドバイスしてもらえますか?
解決
驚いたことに、私にはそのような問題はありません。
gcc
(DJGPP)によって生成されたこのアセンブリコードを使用しました:
ジェネラコディセタグプレ
そしてそれをas
でコンパイルしました、そしてこれは私がa.outで見ているものです:
ジェネラコディセタグプレ
そしてCプログラムは: ジェネラコディセタグプレ
イミディエートオペランドを8ビットの符号付き整数として表すことができますか?-128〜 + 127の範囲外の場合、アセンブラはより長いエンコーディングを使用する必要があります。
所属していません StackOverflow