Я написал это, но он не работает (сбой при п> 6):функция Фибоначчи с поплавками в x86 ассемблере
section .data
one: dq 1.0
two: dq 2.0
section .text
fib:
call print_float
fld qword [two]
fcomip
ja fin
fld st0 ; copy arg
fld qword [one]
fsub
call fib ; st0=fib(n-1), st1=arg
fld st1
fld qword [two]
fsub
call fib ; st0=fib(n-2), st1=fib(n-1), st2=arg
fadd ; st0=fib(n-2)+fib(n-1), st1=arg
fstp st1 ; st0=fib(n-2)+fib(n-1)
fin:
ret
Что я делаю неправильно и/или как я должен делать это?
Примечание: Я знаю, что есть инструкция по загрузке 1.0
. Я просто делаю это так для обеспечения последовательности, чтобы свести к минимуму подмножество x86, с которым мне приходится иметь дело.
Пробовал ли вы один шаг по коду в отладчике? –
@PaulR Я просто пишу x86 asm в Блокноте под Windows, компилируя с NASM, а затем связываюсь с GCC в оболочке MinGW. Я понятия не имею о лучших инструментах Windows. Чтобы вы посоветовали? –
Я не пользователь Windows, но я знаю, что вы можете получить gdb как часть Cygwin, и я уверен, что на выбор также должно быть много других отладчиков Windows. Если вы собираетесь заниматься серьезным программированием, вам действительно нужно будет справиться с достойным отладчиком. –