prog_seg
segment
org 100h
assume cs:prog_seg,ds:prog_seg,ss:prog_seg
main proc near
mov ax,prog_seg
mov ds,ax
……
; 建立地址表
mov table,offset ary
mov table+2,offset count
mov table+4,offset sum
mov bx,offset table ; 地址表首地址送bx
call proadd ; 调用子程序proadd
……
mov ax,4c00h
int 21h
main endp
; 子程序proadd
proadd proc near
push ax ; 保存寄存器
push cx
push si
push di
mov si,[bx] ; 数组ary首地址送si
mov di,[bx+2] ; count单元地址送di
mov cx,[di] ; count单元内容送cx
mov di,[bx+4] ; sum单元地址送di
xor ax,ax
next: add ax,[si]
add si,2
loop next
mov [di],ax ; 累加和送sum单元
pop di ; 恢复寄存器
pop si
pop cx
pop ax
ret
proadd endp
; 数据定义
ary dw 100 dup(?)
count dw 100
sum dw ?
table dw 3 dup(?) ; 地址表
prog_seg ends
end main