;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 clrf temp sub30k movlw 3 addwf temp, f movlw low(30000) subwf Lo, f IFNDEF known_zero movlw high(30000) skpc movlw high(30000) + 1 subwf Hi, f ELSE rlf known_zero, w sublw high(30000) + 1 subwf Hi, f ENDIF skpnc goto sub30k add10k decf temp, f movlw low(10000) addwf Lo, f IFNDEF known_zero movlw high(10000) skpnc movlw high(10000) + 1 addwf Hi, f ELSE rlf known_zero, w addlw high(10000) addwf Hi, f ENDIF skpc goto 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) clrf temp sub3k movlw 3 addwf temp, f movlw low(3000) subwf Lo, f IFNDEF known_zero movlw high(3000) skpc movlw high(3000) + 1 subwf Hi, f ELSE rlf known_zero, w sublw high(3000) + 1 subwf Hi, f ENDIF skpnc goto sub3k add1k decf temp, f movlw low(1000) addwf Lo, f IFNDEF known_zero movlw high(1000) skpnc movlw high(1000) + 1 addwf Hi, f ELSE rlf known_zero, w addlw high(1000) addwf Hi, f ENDIF skpc goto 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) clrf temp sub300 movlw 3 addwf temp, f movlw low(300) subwf Lo, f IFNDEF known_zero movlw high(300) skpc movlw high(300) + 1 subwf Hi, f ELSE rlf known_zero, w sublw high(300) + 1 subwf Hi, f ENDIF skpnc goto sub300 movlw 100 add100 decf temp, f addwf Lo, f skpc goto add100 incf Hi, f btfsc Hi, 7 goto add100 ; Output(temp) ;output temp = Hund ;worst case: 10 * 4 + 5 * 3 + 3 = 59 clrf temp movlw 30 sub30 incf temp, f subwf Lo, f skpnc goto sub30 movfw temp rlf temp, f addwf temp, f movlw 10 add10 decf temp, f addwf Lo, f skpc goto add10 ; Output(temp) ;output temp = Tens ;worst case: 5 * 4 + 5 * 3 + 4 = 39 ; Output(Lo) ;output temp = Ones