push命令(pushl)で invalid instruction suffix for push というエラーになる
下記のアセンブリの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命令は省略