У меня были проблемы с тем, что даже самые простые программы на ассемблере, которые я пишу для 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 возвращает ожидаемый результат, который равен шестидесяти, тогда как машина FreeBSD последовательно возвращает 164 для кода возврата.Кто-нибудь знает, почему это?Если да, не могли бы вы объяснить мне, что происходит?Кроме того, я должен отметить, что они оба действительно работают на процессорах x86.Заранее спасибо:)