exec_gosub proc pascal near
           uses ax
           
           call get_token
           push offset token
           call find_label
           or ax,ax
           jnz @@enable_gosub
           push UNDEF_LAB
           call serror
@@enable_gosub:       
           push _ip
           call gpush
           mov _ip,ax           
           ret
exec_gosub endp

gpush proc pascal near
      arg @@s:WORD
      uses ax,bx      
      
      cmp gtos,SUB_NEST
      jne @@enable_push
      push TOO_MNY_GOSUB
      call serror
@@enable_push:
      inc gtos
      mov ax,gtos
      shl ax,00001h
      mov bx,ax
      mov ax,@@s
      mov gstack[bx],ax
      ret
gpush endp