28588


下記のアセンブリの`pushl`の部分で`invalid instruction suffix for push`  
というエラーが発生します

なぜ、`pushl`を使うとこのエラーが発生するのでしょうか?

環境  
\- gcc: 5.4.0  
\- os: ubuntu 16.04.2 x86_64

実行するアセンブリのコード (参考 <http://blog.livedoor.jp/hiroumauma/archives/1394375.html>)
:

[code]

    
    .set EXIT, 1
    .set READ, 3
    .set WRITE, 4
    
    .data
    PROMPT: .string "input string >> "
    
    .bss
    var: .skip 16, 0x00
    
    .text
    .global main
    
    main:
        pushl $PROMPT
        call print
    
        call scan
    
        pushl $var
        call print
    
        call exit
    
    print:
        movl 4(%esp) ,%ecx
        movl $1, %ebx         # 標準出力へ
        movl $1, %edx         # 1文字出力
    write:
        cmpb $0x00, (%ecx) # null文字かどうか
        je write_end
        movl $WRITE, %eax # write
        int $0x80
        incl %ecx                 # 次の文字
        jmp write
    write_end:
        ret
    
    scan:
        movl $READ, %eax  # readシステムコール
        xorl %ebx, %ebx     # 標準入力から
        movl $var, %ecx      # バッファを指定
        movl $16, %edx      # 16バイト読み込み
        int $0x80
        ret
    
    exit:
        movl $EXIT, %eax    # exit
        movl $0, %ebx         # 終了コード0
        int $0x80
        # プログラムが終了するので、ret命令は省略
    
    
    
    
[/code]


CC BY-SA 3.0
2016-08-29T14:45:53.580
28563
2016-08-30T13:46:20.657
2016-08-30T12:53:19.160
5246
5246
question
ubuntu assembly gcc
push命令(pushl)で invalid instruction suffix for push というエラーになる


[How to Compile 32-bit Apps on 64-bit
Ubuntu?](https://stackoverflow.com/a/29848936/4315484)にあるように`gcc-
multilib`パッケージをインストールし、`gcc -m32`でコンパイルすることで32bitバイナリを生成できます。


CC BY-SA 3.0
2016-08-30T13:46:20.657
28588
2016-08-30T13:46:20.657
2017-05-23T12:38:55.307
-1
4236
28563
answer