Вычисление факториала на ассемблерной вставке с помощью рекурсии
Задание требует именно ассемблерной вставки. Ниже мой код, который вызывает переполнение, как я понимаю. Но вот как написать правильно, что-то не могу найти.
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;