#recursion #x86 #nasm #fibonacci #sasm
# #рекурсия #x86 #nasm #фибоначчи #sasm
Вопрос:
Я пытаюсь разработать алгоритм в NASM, который должен вычислять n-е число Фибоначчи. Я написал некоторый код, но при запуске он выводит только 1, и я не могу понять, почему. Моя идея состояла в том, чтобы вызвать Фибоначчи для n-1 и для n-2, где параметр n хранится в регистре AX, а результат сохраняется в BX.
%include "io.inc"
section .text
global CMAIN
CMAIN:
mov ebp, esp; for correct debugging
xor eax, eax
xor ebx, ebx
push word 12
call fibonacci
pop word [trash]
PRINT_UDEC 1, ax
ret
fibonacci: push ebp
mov ebp, esp
mov ax, [ebp 8];se incarca ax cu parametrul primit prin stiva
cmp ax, 0
jne l1
mov bx, 0
jmp l3
l1: cmp ax, 1
jne l2
mov bx, 1
jmp l3
l2: sub ax, 2;n-2
push ax
call fibonacci
pop dx;resotre the stack
mov [ebp - 2], bx
mov ax, [ebp 8];se incarca bx cu parametrul prinit prin stiva
sub ax, 1;n-1
push ax
call fibonacci
pop dx;restore the stack
add bx, [ebp - 2]
l3: mov esp, ebp
pop ebp
ret
section .data
trash dw 1
Комментарии:
1. Хотя я мог бы реализовать итерацию Фибоначчи, я хочу улучшить свои навыки в рекурсии сборки.
2. Отдельно от других ошибок, обычно вы не хотите использовать 16-битные нажатия в 32-битном режиме. Здесь вообще нет веских причин использовать 16-разрядные частичные регистры.