parm_seg   segment
      ary     dw      100 dup(?)
      count    dw      100
      sum     dw ?
   parm_seg   ends

  ; 協吶均媚粁
   stack_seg   segment
            dw      100 dup(?)
      tos     label     word
   stack_seg   ends

  ; 協吶旗鷹粁code1
    code1    segment
      main     proc     far
      assume    cs:code1,ds:parm_seg,ss:stack_seg
   start:
  ; 譜崔ss才sp篠贋匂
      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            ; 方怏ary遍仇峽儿秘均媚
      mov     bx,offset  count
      push     bx            ; count汽圷仇峽儿秘均媚
      mov     bx,offset   sum
      push     bx            ; sum汽圷仇峽儿秘均媚

      call     far      ptr proadd ; 垓距喘徨殻會proadd
      ´´
      ret
      main    endp
  code1  ends



  ; 協吶旗鷹粁code2
    code2   segment
      assume    cs:code2
  ; 徨殻會proadd
      proadd    proc     far
      push     bp            ; 隠贋bp
      mov      bp,sp           ; 聞喘bp贋函歌方
      push     ax            ; 隠贋凪万篠贋匂
      push     cx
      push     si
      push     di
      mov      si,[bp+0ah]        ; 方怏ary遍仇峽僕si
      mov      di,[bp+8]         ; count汽圷仇峽僕di
      mov      cx,[di]          ; count汽圷坪否僕cx
      mov     di,[bp+6]        ; 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