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