アセンブリでプログラムが終了してしまう
アセンブリの練習のためにbmi(Body Mass Index)を計算するプログラムを書いています。
最初にyour_height
を表示してからstdinを読み込もうとするのですが、your_height
の最初の1文字を表示した後、すぐにプログラムが終了してしまいます
なぜなのでしょうか?
環境: Ubuntu 16.04 x86_64 (gccでのコンパイル時に-m32
をつけてx86として実行)
.data
emessage: .string "file open error\n"
your_height: .string "Please enter the your height (m): "
your_weight: .string "Please enter the your weight (kg): "
newline: .string "\n"
.bss
tmp: .skip 128, 0x00
.text
.global main
main:
push %ebp
movl %esp, %ebp
pushl $your_height
call print
call read
pushl $your_weight
call print
call read
movl -4(%ebp), %eax
movl -8(%ebp), %ebx
divl %ebx
divl %ebx
read:
movl $3, %eax
movl $0, %ebx
movl $tmp, %ecx
movl $64, %edx
int $0x80
cmpl $-1, %eax
je write_error_message
movl %eax, %esi
pushl %esi
ret
write_error_message:
movl $4, %eax
movl $1, %ebx
movl $emessage, %ecx
movl $16, %edx
int $0x80
call exit
exit:
movl $1, %eax;
xorl %ebx, %ebx;
int $0x80
print:
movl $4, %eax
movl 4(%esp), %ecx
movl $1, %ebx
movl $1, %edx
write:
cmpb $0x00, (%ecx)
je ret_func
int $0x80
incl %ecx
jmp write
ret_func:
ret