Hello John . > > I would, most of all, appreciate an add with carry and subtract with > > borrow. This would __greatly__ simplify multi byte arithmetic! But, > > alas... > > True, but even without those a 4-byte add isn't too bad... > > ; D<-D+S > movf S0,w > addwf D0,f Ok. > movf S1,w > btfsc C > incfsz S1,w > addwf D1,f Stop. For example S1=0xFF , D1=0x00 , Carry=1 . After executing your code result will be equal 0x00 with Carry=0 not =1 . It's error . In my code to correct this situation I save previous Carry's in S1 . movfw S1 skpnc addlw 1 rlf S1,F addwf D1,F btfsc S1,0 setc ... etc > movf S2,w > btfsc C > incfsz S2,w > addwf D2,w > rlf KZ,w ; KZ == known-zero address > addwf S3,w > addwf D3,f > > Total of 13 instructions, 13 cycles. Note that if the destination is not > one of the sources, you should copy the middle bytes from source to > destination and then do the add. WBR Dmitry.