;Thanks Scott, your code is very instructive. ;Total execution time: ;worst case: 47 + 66 + 58 + 39 + 2 = 213 cycles(with known zero) ;worst case: 53 + 73 + 58 + 39 + 2 = 226 cycles(without known zero) ;Code size: 68 clr temp sub30k mov W, #3 add temp, W mov W, #low(30000) sub Lo, W IFNDEF known_zero mov W, #high(30000) sb C mov W, #high(30000) + 1 sub Hi, W ELSE mov W, <<known_zero ;*** WARNING: Manual replacement required for "SUBLW k" instruction (w = k - w). Check if previous instruction is a skip instruction. sublw high(30000) + 1 sub Hi, W ENDIF snb C jmp sub30k add10k dec temp mov W, #low(10000) add Lo, W IFNDEF known_zero mov W, #high(10000) snb C mov W, #high(10000) + 1 add Hi, W ELSE mov W, <<known_zero ;*** WARNING: ADDLW was expanded in three instructions! Check if previous instruction is a skip instruction. ; addlw high(10000) mov Hack, W mov W, #high(10000) add W, Hack add Hi, W ENDIF sb C jmp add10k ; Output(temp) ;output temp = TenK ;worst case: 10 * 3 + 9 * 3 - 1 = 47 (with known zero) ;worst case: 11 * 3 + 10 * 3 - 1 = 53 (without known zero) clr temp sub3k mov W, #3 add temp, W mov W, #low(3000) sub Lo, W IFNDEF known_zero mov W, #high(3000) sb C mov W, #high(3000) + 1 sub Hi, W ELSE mov W, <<known_zero ;*** WARNING: Manual replacement required for "SUBLW k" instruction (w = k - w). Check if previous instruction is a skip instruction. sublw high(3000) + 1 sub Hi, W ENDIF snb C jmp sub3k add1k dec temp mov W, #low(1000) add Lo, W IFNDEF known_zero mov W, #high(1000) snb C mov W, #high(1000) + 1 add Hi, W ELSE mov W, <<known_zero ;*** WARNING: ADDLW was expanded in three instructions! Check if previous instruction is a skip instruction. ; addlw high(1000) mov Hack, W mov W, #high(1000) add W, Hack add Hi, W ENDIF sb C jmp add1k ; Output(temp) ;output temp = Thou ;worst case: 10 * 4 + 9 * 3 - 1 = 66 (with known zero) ;worst case: 11 * 4 + 10 * 3 - 1 = 73 (without known zero) clr temp sub300 mov W, #3 add temp, W mov W, #low(300) sub Lo, W IFNDEF known_zero mov W, #high(300) sb C mov W, #high(300) + 1 sub Hi, W ELSE mov W, <<known_zero ;*** WARNING: Manual replacement required for "SUBLW k" instruction (w = k - w). Check if previous instruction is a skip instruction. sublw high(300) + 1 sub Hi, W ENDIF snb C jmp sub300 mov W, #100 add100 dec temp add Lo, W sb C jmp add100 inc Hi snb Hi.7 jmp add100 ; Output(temp) ;output temp = Hund ;worst case: 10 * 4 + 5 * 3 + 3 = 59 clr temp mov W, #30 sub30 inc temp sub Lo, W snb C jmp sub30 mov W, temp rl temp add temp, W mov W, #10 add10 dec temp add Lo, W sb C jmp add10 ; Output(temp) ;output temp = Tens ;worst case: 5 * 4 + 5 * 3 + 4 = 39 ; Output(Lo) ;output temp = Ones