У меня тут проблема.
Мне нужно создать один цикл, который берет заданное число (сохраненное в ebx) и вычисляет его факториал, но я хоть убей, не могу понять, как это сделать. Мой ограничивающий фактор заключается в том, что вы не можете использовать какие-либо команды умножения.
Вот основной формат проблемы:
;preceding code
mov eax, 0 ;n! will be stored in eax
ecx = ebx ;ebx = n
factorial: ;computes n!
;some algorithm I have not figured out
;
;
loop factorial
;eax = n!
Любые идеи о том, что этот алгоритм может быть?
ОБНОВЛЕНИЕ: я нашел алгоритм, мне пришлось написать его на C, потому что я гораздо лучше разбираюсь в этом, чем в сборке x86.
int x = z; //z is the number we want z! from
int y = 0;
int n = x;
int i, j;
for(i = x - 1; i > 0; i--)
{
for(j = n; j > 0; j--)
y += i;
n = y;
y = 0;
}
printf("%d\n", n);
В данный момент пытаемся перевести на Assembly.
ЗДЕСЬ окончательный перевод/ответ для всех будущих кодеров. Вопрос решен.
;FACTORIAL WITHOUT MULTIPLICATION
mov ecx, ebx
mov edx, 0
mov eax, ebx
dec ecx
jz next
factorial:
mov edi, ecx
mov ecx, eax
factorial2:
add edx, edi
loop factorial2
mov ecx, edi
mov eax, edx
mov edx, 0
loop factorial