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.