x86でAT&T構文を使用して長いレジスタにイミディエートバイトを追加するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/8409707

質問

Intelのマニュアルを読んで理解していることから、add $0x7f, %ebxのような命令を書くことが可能であり、合計3バイトの83 /0 ibとしてエンコードされている必要があります。

ただし、これを行うと(addaddb、またはaddlのいずれを使用する場合でも)、常に即値を32ビット値に「プロモート」し、81 /0 idとしてエンコードして6バイトを使用します。同じ問題がadcsubなどにも存在します。GNUasでAT&T構文を使用していることに注意してください。

1日以上解決策を探していましたが、見つかりませんでした。誰かアドバイスしてもらえますか?

役に立ちましたか?

解決

驚いたことに、私にはそのような問題はありません。

gcc(DJGPP)によって生成されたこのアセンブリコードを使用しました: ジェネラコディセタグプレ

そしてそれをasでコンパイルしました、そしてこれは私がa.outで見ているものです: ジェネラコディセタグプレ

そしてCプログラムは: ジェネラコディセタグプレ

イミディエートオペランドを8ビットの符号付き整数として表すことができますか?-128〜 + 127の範囲外の場合、アセンブラはより長いエンコーディングを使用する必要があります。

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