下記のアセンブリの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) :


.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命令は省略