Нашел фрагмент, может поможет...
R6R5 - код с АЦП (старший и младший байты), DataRashL - мл. байт Ki*256 (Ki дробный), DataRashH - старший байт, в R2R1R0 будет результат.
Код
MOV A,R5 //R2R1R0 = R6R5*DataRash /256
MOV B,DataRashL
MUL AB
MOV R0,B
MOV A,R6
MOV B,DataRashL
MUL AB
ADD A,R0
MOV R0,A
CLR A
ADDC A,B
MOV R1,A
CLR A
ADDC A,#00h
MOV R2,A
MOV A,R5
MOV B,DataRashH
MUL AB
ADD A,R0
MOV R0,A
MOV A,R1
ADDC A,B
MOV R1,A
MOV A,R2
ADDC A,#00h
MOV R2,A
MOV A,R6
MOV B,DataRashH
MUL AB
ADD A,R1
MOV R1,A
MOV A,R2
ADDC A,B
MOV R2,A
Возможно что не оптимизировано по тактам, но довольно шустро и точно... Если надо гляну как деление делал