Dmitry Kiryashov says: Possible realization of 1 + 1/256 + ... correction.
;1/256 * (1 + 1/256) =~ 0.999985 / 255 ;
scale255to100: ;25 = 16+8+1
clrf temp ;int
clrf temp1 ;frac
addwf temp,F ;1
rrf temp,F ;/2
rrf temp1,F
rrf temp,F ;/4
rrf temp1,F
rrf temp,F ;/8
rrf temp1,F
addwf temp,F ;8
rrf temp,F ;/16
rrf temp1,F
addwf temp,F ;16
rrf temp,F ;/32
rrf temp1,F
rrf temp,W ;/64
rrf temp1,F
;
; movwf temp2 ;1/256/256 if longer tail
; movwf temp3 ;1/256/256/256 is required
; etc...
;
addwf temp1,F ;1 + 1/256 correction
btfss temp1,7 ;either round if >= 0.5
skpnc ;or take carry
addlw 1 ;temp1 holds frac part
;
; movwf temp ;answer is either W or temp
return
If >=0.5 correction isn't required <btfss temp1,7> line
should be commented.