1

次のコードがガスで違法なのはなぜですか?

# cat -n gas.asm
1
2  .code64
3  pushb $12
4
# as gas.asm
gas.asm: Assembler messages:
gas.asm:3: Error: suffix or operands invalid for `push'

一致しませんか:

| Opcode* | Instruction | Op/En | 64-Bit Mode | Compat/Leg Mode | Description |
|      6A | PUSH imm8   | C     | Valid       | Valid           | Push imm8.  |

ただし、次のコードは NASM で機能します。

bits 64
push byte 12

なぜガスが X86-64 プラットフォームでそのエラーを受け取るのですか?

ありがとう!

4

1 に答える 1

2

このスレッドを参照してください。

引用:

あなたが言及しているのは「0x6APUSHimm8」だと思います。これは、バイトをスタックにプッシュしません。命令の一部としてエンコードされたバイト値を、ワード(16ビット)またはCPUサイズ[32ビットCPUの場合はロングワード(32ビット)、64ビットCPUの場合はクアッドワード(64ビット)としてプッシュします。 ]現在のCPUモードのスタックサイズとサイズオーバーライドプレフィックスによって異なります。

要するに、これは事実上pushwです。gasこの事実を明確にし、を使用するように強制しますpushw $12

于 2012-07-02T10:13:59.340 に答える