Я пытаюсь написать код, который принимает ввод от пользователя и отображает факториал в сборке x64. Каждый раз, когда я запускаю код, он дает мне необработанное исключение в 0x00007FF64B910B11 в finalProjectAssembly.exe: 0xC00000FD: переполнение стека (параметры: 0x0000000000000001, 0x00000019F1603FF8)., Но я не понимаю, как переполнился стек. Чего мне не хватает?
INCLUDELIB libcmt.lib
INCLUDELIB legacy_stdio_definitions.lib
EXTERN printf:PROC
EXTERN scanf:PROC
.DATA
prompt BYTE "Enter a number: ", 0
inFmt BYTE "%d", 0
prompt3 BYTE "The factorial is: %d",10,0
cont QWORD ?
disp BYTE "You Entered %d", 10,0
num QWORD ?
num2 REAL8 1.5
.CODE
main PROC C
sub rsp, 24
lea rcx, prompt
call printf
lea rdx, num
lea rcx, inFmt
call scanf
push num
mov rdx,num
lea rcx, disp
call printf
call factorial
mov rdx, rax
lea rcx, prompt3
call printf
lea rcx, prompt2
call printf
lea rdx, cont
lea rcx, inFmt
call scanf
add rsp,24
mov rax,0
ret
main ENDP
factorial PROC
push rbp
mov rbp,rsp
mov rax, [rbp + 16]
cmp rax, 1
jle quit
dec rax
push rax
call factorial
mov rbx, [rbp+16]
imul rbx
quit:
mov rsp, rbp
pop rbp
ret
factorial ENDP