阶乘核心汇编算法
yaos 2004-02-13 08:16:38 int fact(unsigned long * pf, unsigned long n)
{
unsigned long t = 0;
pf[0] = 1;
__asm
{
pusha
mov ecx, 1;
mov esi, dword ptr [pf]
mov edi, esi
mov ebx, 0
clc
cld
}
fact1:
__asm
{
push ecx
mov dword ptr [t], ecx
mov ecx, dword ptr [l]
inc ecx
push esi
push edi
push ebx
}
fact2:
__asm
{
lodsd
mul dword ptr [t]
add eax, ebx
adc edx, 0
mov ebx, edx
stosd
loop fact2
cmp ebx, 0
je fact3
mov dword ptr [edi], ebx
inc dword ptr [l]
}
fact3:
__asm
{
pop ebx
pop edi
pop esi
pop ecx
inc ecx
cmp ecx, dword ptr [n]
jbe fact1
popa
}
}
最基础的算法