Вычисление факториала на ассемблерной вставке с помощью рекурсии

Задание требует именно ассемблерной вставки. Ниже мой код, который вызывает переполнение, как я понимаю. Но вот как написать правильно, что-то не могу найти.

int main()
{
    int a = 3, b;
    __asm
    {
        push a
        mov eax, 1
        call fact
        mov b, eax

        jmp exit1

        fact :
        pop a
        mov ecx,a
            mul ecx
            dec ecx
            cmp ecx, 1
            jne exit2
            call fact
            ret

            exit1 :
            exit2:
    }

    std::cout << b << std::endl;

    return 0;
}

Ответы (1 шт):

Автор решения: Harry

Примерно так устроит?

int a = 7, b;
__asm
{
    mov ebx,1
    mov eax,a
    call fact
    jmp quit

fact:
    cmp eax,1
    jle exitfact
    imul ebx,eax
    dec eax
    call fact
exitfact:
    ret
quit:
    mov b, ebx
}

std::cout << b << std::endl;
→ Ссылка