Keeps sum in Y register, checks to see when X register passes end of table.
; Program to sum all odd numbers in a table ; Alternate Solution to Example 2.17 of Huang ; Bill Rison ; 1/28/98 .title SUM ODD NUMBERS EVBRAM = 0x0000 ;0x0000 is start of user ram on 68HC11EVBU DATA = EVBRAM PROG = EVBRAM+0x100 ;start program above BUFFALO N = 20 ;number of entries in table SUMADDR = 0x20 ;location to put result .area CODE (ABS) .org PROG ;set program counter to 0x0100 start: ldx #table ;Reg X points to entry to process ldy #0 ;Hold sum in Y -- clear to start l1: brclr 0,x,#0x01,l2 ;If entry is even (LSB=0), don't sum ldab 0,x ;Entry was odd -- get into ACC B aby ;Add to total in Y l2: inx ;REG X points to next entry in table1 cpx #(table+N) ;Has pointer gone past end of table? blo l1 ;If not done, process next table entry sty sum ;Save result swi ;Done -- Exit .area DATA (ABS) .org DATA table: .db 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 .org SUMADDR sum: .ds 2