Online Compiler Nasm

%include "io.inc" section .bss n resd 1 section .text global main main: GET_UDEC 4, [n] push dword [n] call factorial add esp, 4 PRINT_UDEC 4, eax NEWLINE xor eax, eax ret factorial: push ebp mov ebp, esp mov eax, [ebp + 8] cmp eax, 1 jbe .base dec eax push eax call factorial add esp, 4 imul eax, [ebp + 8] jmp .end .base: mov eax, 1 .end: mov esp, ebp pop ebp ret
Этот код вычисляет факториал числа, введённого пользователем, с помощью рекурсивной функции. Программа считывает беззнаковое целое число, вызывает функцию factorial и выводит результат.

- В функции factorial после рекурсивного вызова вы используете `imul eax, [ebp + 8]`, но в этот момент в eax уже лежит результат рекурсии. Убедитесь, что вы умножаете правильные значения: исходный аргумент функции (n) и результат (n-1)!.
- Обратите внимание на условие выхода из рекурсии: `cmp eax, 1` и `jbe .base` — это корректно для n=0 и n=1, но проверьте, что происходит при n=0: факториал 0 равен 1, и ваша функция должна это учитывать.