Я все время ломаю голову над этим на протяжении всех выходных и не могу понять эту последнюю часть. Я должен написать программу сборки для вычисления n-го числа в серии tetrabonacci. Например:Серия Tetrabonacci на языке ассемблера
n |0|1|2|3|4|5 |6 |7 |
output |1|1|2|4|8|15|29|56|
n
отправляется из C++ (который я уже писал). Программа сборки принимает n запись и вставляет ее в стек, уменьшает число и добавляет (до) последние 4 предыдущих номера. Мой код работает, за исключением того, что он не работает, это число выключено, когда я вводил любое число выше 4. Например, когда я вхожу в 4, он выводит 8 правильно, но когда я вхожу в 5, он выдает 16 вместо 15 и 6 выходов 32 вместо 29 как это должно. Если вы можете помочь, я бы очень признателен.
Ниже мой код:
TITLE Tetrabonacci Series
.586
.model flat,C
.code
Tetrabonacci PROC
push ebp
mov ebp, esp
push ebx
sub esp, 4
mov eax, [ebp+8]
cmp eax, 0
ja L1
mov eax, 1
jmp done
L1:
cmp eax, 1
ja L2
mov eax, 1
jmp done
L2:
cmp eax, 2
ja L3
mov eax, 2
jmp done
L3:
cmp eax, 3
ja L4
mov eax, 4
jmp done
L4:
dec eax
mov [esp], eax
call Tetrabonacci
mov ebx, eax
mov eax, [ebp+8]
dec eax
mov [esp], eax
call Tetrabonacci
lea eax, [ebx+eax]
done:
add esp, 4
pop ebx
pop ebp
ret
Tetrabonacci ENDP
END
Для тех, кто не знает номера Tetrabonacci является серия 'F (п) = F (п - 1) + F (п - 2) + F (п - 3) + F (n - 4) '. – Jarod42
Насколько я вижу, вы вызываете функцию только дважды, передавая один и тот же аргумент ('n - 1') оба раза. – molbdnilo
Итак, 'F (n + 1) = 2 * F (n) - F (n - 4)'. – Jarod42