Я изучаю ассемблер, используя x86 NASM. Я хотел написать простую рекурсивную факториальную функцию, в которую я передаю один параметр, используя регистр EAX. После этого я хочу напечатать свой результат на экране, но ничего не происходит. После того, как я сижу и смотрю на свой компьютер, я понятия не имею, что не так с моим кодом. Можете ли вы, ребята, помочь новичку с этой проблемой?
Я знаю, что пролог и эпилог факторной функции не требуются, потому что я не использую стек, но для меня код более читабелен;)
Вот мой код:
global main
extern printf
section .data
message db "%03X", 0x10, 0x0
section .text
main:
mov eax, 5
call factorial
push eax
push message
call printf
add esp, 0x8
mov eax, 1
mov ebx, 0
int 0x80
factorial:
push ebp
push edx
mov ebp, esp
mov edx, eax
cmp edx, 0
jne not_equal_zero
mov eax, 1
jmp exit
not_equal_zero:
mov eax, edx
sub eax, 1
call factorial
imul eax, edx
exit:
mov esp, ebp
pop edx
pop ebp
ret