Dmitry Kiryashov says: Possible realization of 1 + 1/256 + ... correction.
;1/256 * (1 + 1/256) =~ 0.999985 / 255 ; scale255to100: ;25 = 16+8+1 clr temp ;int clr temp1 ;frac add temp, W ;1 rr temp ;/2 rr temp1 rr temp ;/4 rr temp1 rr temp ;/8 rr temp1 add temp, W ;8 rr temp ;/16 rr temp1 add temp, W ;16 rr temp ;/32 rr temp1 mov W, >>temp ;/64 rr temp1 ; ; mov temp2, W ;1/256/256 if longer tail ; mov temp3, W ;1/256/256/256 is required ; etc... ; add temp1, W ;1 + 1/256 correction sb temp1.7 ;either round if >= 0.5 snb C ;or take carry mov Hack, W ;Hack is a temp variable to compinsate for lack of add literal inst mov W, #1 ;temp1 holds frac part add W, Hack ; ; mov temp, W ;answer is either W or temp ret If >=0.5 correction isn't required <btfss temp1,7> line should be commented.