Siema, widziałem podobne tematy, ale nie wiem, czy mnie satysfakcjonują. W asmie jestem dość świeży.
To mój kod(pisany w środowisku Delphi, dlatego tak wygląda) - na początku w EAX mam liczbę, dla której liczymy silnie:
mov ECX, EAX {bo w EAX pojawia się wartość X, od teraz będzie w ECX}
mov EAX, 1 {Ustawiam EAX na 1 - pierwszy czynnik}
mov EBX, 1 {i drugi czynnik - licznik pęrli}
xor EDX, EDX
@loop:
mul EBX {EDX:EAX = EAX * EBX}
inc EBX {EBX = EBX + 1}
cmp EBX, ECX {czy EBX = X}
jle @loop {if EBX<=x goto loop}
OK i niby wszystko jest ok, ale do liczby 13 włącznie. A to dlatego, że kolejne liczby zajmują już więcej niż 4 bajty. I problem polega na tym, że mul EBX mnoży EBX przez EAX, a powinien przez EDX:EAX. Czy da się to jakoś zrobić?
Zaznaczam, że procesor jest 32 bitowy, tak więc nie posiada 64 bitowych rejestrów