parm_seg
segment
ary dw 100 dup(?)
count dw 100
sum dw ?
parm_seg ends
stack_seg segment
dw 128 dup(?)
tos label word
stack_seg ends
code1
segment
main proc far
assume cs:code1,ds:parm_seg,ss:stack_seg
start:
mov ax,stack_seg
mov ss,ax
mov sp,offset tos
push ds
sub ax,ax
push ax
mov ax,parm_seg
mov ds,ax
mov bx,offset ary
push bx
mov bx,offset count
push bx
mov bx,offset sum
push bx
call far ptr proadd
´´
ret
main endp
code1 ends
code2
segment
assume cs:code2
; 協吶stack_strc潤更方象
stack_strc struc
save_bp dw ?
save_cs_ip dw 2 dup(?)
par3_addr dw ?
par2_addr dw ?
par1_addr dw ?
stack_strc ends
proadd proc far
push bp
mov bp,sp
push ax
push cx
push si
push di
mov si,[bp].par1_addr ; 方怏ary遍仇峽僕si
mov di,[bp].par2_addr ; count汽圷仇峽僕di
mov cx,[di] ; count汽圷坪否僕di
mov di,[bp].par3_addr ; 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
pop bp
ret 6
proadd endp
code2 ends
end start