## Two alternate programs for Example 2.17 of Huang

```; Program to sum all odd numbers in a table
; Solution to Example 2.17 of Huang
; Bill Rison
; 1/30/97

.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
ldab    #N             ;Initialize loop counter to number of table
stab    loop_ctr       ;  entries
clra                   ;Hold sum in A-B -- clear to start
clrb
l1:      brclr   0,x,#0x01,l2   ;If entry is even (LSB=0), don't sum
l2:      inx                    ;REG X points to next entry in table1
dec     loop_ctr       ;Decrement number left to process
bne     l1             ;If not done, process next table entry
std     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

sum:     .ds     2              ;Save sum here
loop_ctr: .ds    1              ;eight-bit counter of number left to process
```

```; Program to sum all odd numbers in a table
; Solution to Example 2.17 of Huang
; Bill Rison
; 1/30/97

.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
ldab    #N             ;ACC B holds number of entries left 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 -- need to get into B to add to 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