アセンブリがsegmentation faultで止まる
アセンブリでプログラムが終了してしまう の質問を投稿したものです
アセンブリでbmi(Body Mass Index) を計算するプログラムを練習のために書いているのですが途中でsegmentation faultを出して止まってしまいます。
なぜなのでしょうか?
OS: ubuntu16.04 x86_64
gcc -m32
をつけて32bitとしてコンパイル
.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 %esp, %eax
movl 20(%esp), %ebx
divl %ebx
divl %ebx
pushl %eax
call print
call exit
read:
movl $3, %eax
movl $0, %ebx
movl $tmp, %ecx
movl $64, %edx
int $0x80
cmpl $-1, %eax
je write_error_message
movl $tmp, %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
movl $4, %eax
int $0x80
incl %ecx
jmp write
ret_func:
ret