assume cs:code, ds:data
data segment
a db 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
b db 10, 20, 30, 40, 50, 60, 70, 80, 90, 100
_c db 15, 25, 35, 45, 55, 65, 75, 85, 95, 105
sum dw 3 dup(0)
average db 3 dup(0)
data ends
code segment
; uint16_t function_sum(uint8_t array[], uint16_t size);
; array: bx
; size: ax
function_sum:
push bx
push dx
push si
mov si, bx
add si, ax
xor dx, dx
xor ax, ax
L0:
mov al, [bx]
add dx, ax
inc bx
cmp bx, si
jb L0
mov ax, dx
pop si
pop dx
pop bx
ret
; uint8_t function_average(uint16_t sum, uint16_t size);
; sum: ax
; size: bx
function_average:
push cx
push dx
mov cx, ax
xor dx, dx
div bx
mov ah, ch
pop dx
pop cx
ret
start:
mov ax, data
mov ds, ax
mov bx, offset a
mov ax, 10
call function_sum
mov bx, offset sum
add bx, 0
mov [bx], ax
mov bx, offset b
mov ax, 10
call function_sum
mov bx, offset sum
add bx, 2
mov [bx], ax
mov bx, offset _c
mov ax, 10
call function_sum
mov bx, offset sum
add bx, 4
mov [bx], ax
mov bx, offset sum
add bx, 0
mov ax, [bx]
mov bx, 10
call function_average
mov bx, offset average
add bx, 0
mov [bx], al
mov bx, offset sum
add bx, 2
mov ax, [bx]
mov bx, 10
call function_average
mov bx, offset average
add bx, 1
mov [bx], al
mov bx, offset sum
add bx, 4
mov ax, [bx]
mov bx, 10
call function_average
mov bx, offset average
add bx, 2
mov [bx], al
mov ax, 4c00h
int 21h
code ends
end start