Если нужно поделить 'unsingned __int64' на 'unsigned __int32', то можно так:
__forceinline unsigned __get_edx()
{
__asm mov eax, edx
}
#define DIVMOD64(HighPart, LowPart, Divisor, Reminder) \
{ \
{ \
__asm mov ecx, Divisor \
__asm mov eax, HighPart \
__asm xor edx, edx \
__asm div ecx \
__asm mov HighPart, eax \
__asm mov eax, LowPart \
__asm div ecx \
__asm mov LowPart, eax \
} \
Reminder = __get_edx(); \
} ---
Смысл такой:
Reminder = (HighPart << 32 + LowPar) % Divisor;
(HighPart, LowPar) = (HighPart << 32 + LowPar) / Divisor;
|