; CIS-77
; add_16_bytes.asm
;
.586P
.MODEL FLAT         ; Flat memory model
option casemap:none ; Treat labels as case-sensitive

.CONST          ; Constant data segment

.STACK 100h     ; (default is 1-kilobyte stack)

.DATA           ; Begin initialized data segment
    values db 16 DUP( 5 ) ; 16 bytes of values "5"

; Code segment
.CODE           ; Begin code segment
_main PROC      ; Beginning of code

    mov eax, 0      ; clear result 
    mov bl, 16      ; init loop counter 
    lea esi, values ; init data pointer
addup:
    add al, [esi]   ; add byte to sum
    inc esi         ; increment data pointer 
    dec bl          ; decrement loop counter 
    jnz addup       ; if BL not zero, continue
    mov [esi], al   ; save sum 
    ret             ; Exit
    
_main ENDP
END _main       ; Marks the end of the module and sets the program entry point label
