Linux で作成した最も単純なアセンブリ プログラムでさえ、FreeBSD マシンで実行するのに問題がありました。問題のあるコードは次のとおりです(これをできるだけ単純にしようとしています):
#counts to sixty
.section .data
.section .text
.global _start
_start:
movl $1, %ecx #move $1 into ecx
movl $1, %eax
start_loop:
addl %ecx, %eax #add ecx to eax
cmpl $60, %eax #compare $60 and eax...
je end_loop #if eax = 60 go to end_loop
cmpl $60, %eax #
jle start_loop #jump if eax is < $60...
jmp start_loop #...to start_loop
end_loop:
movl %eax, %ebx #move the value of eax into ebx because ebx holds
#the return value
movb $1, %al #Move $1 into eax (int 1 is the value for the
#exit() syscall
int $0x80
Linux マシンは予期される結果である 60 を返しますが、FreeBSD マシンは戻りコードとして一貫して 164 を返します。これがなぜなのか誰か知っていますか?もしそうなら、何が起こっているのか説明してもらえますか?また、どちらも実際に x86 CPU を実行していることに言及する必要があります。前もって感謝します :)