Вот на телесистемах подсказали вариант умножения:
http://telesys.ru/wwwboards/mcontrol/17 ... 3501.shtml --------------------------------------------------------------------------------
На примере беззнаковых
result=(low1+2^16*high1)(low2+2^16*high2)=
low1*low2+2^16*(low1*high2+low2*high1)+2^32*high1*high2.
Сомножители: unsigned long operand1,operand2;
unsigned long low_result; //low 32 bits of result
unsigned long high_result; //high 32 bits of result;
unsigned long tmp;
unsigned long lop1,lop2;
lop1=operand1&0xffffL;
lop2=operand2&0xffffL;
operand1>>=16;
operand2>>=16;
low_result=lop1*lop2;
tmp=low_result>>16;
high_result=operand1*operand2;
operand1*=lop2;
operand2*=lop1;
lop1=operand1&0xffffL;
operand1>>=16;
lop2=operand2&0xffffL;
operand2>>=16;
tmp+=lop1+lop2;
lop1=tmp<<16;
low_result+=lop1;
tmp>>=16;
high_result+=(tmp+operand1+operand2);
====
Я не разбирался. :lol: