AT&Tx86アセンブリ言語を学んでいます。整数nを取り、結果(n / 2 + n / 3 + n / 4)を返すアセンブリプログラムを作成しようとしています。これが私がしたことです:
.text
.global _start
_start:
pushl $24
call profit
movl %eax, %ebx
movl $1, %eax
int $0x80
profit:
popl %ebx
popl %eax
mov $0, %esi
movl $4, %ebp
div %ebp
addl %eax, %esi
movl %ecx, %eax
movl $3, %ebp
div %ebp
addl %eax, %esi
movl %ecx, %eax
movl $2, %ebp
div %ebp
addl %eax, %esi
movl %esi, %eax
cmpl %ecx, %esi
jg end
pushl %ebx
ret
end:
mov %ecx, %eax
ret
問題は、セグメンテーション違反が発生していることです。問題はどこだ?