Listing 1

; Unless declared otherwise all
; values are type short
; setjmp(array pointer) : set
; environment of 3 integers,
; returns 0
; array -> bp of calling function
;          sp current
;          address of setjmp return
PUBLIC setjmp
set jmp         PROC NEAR
      ;
      mov      bx,sp
      mov      ax,ss:[bx]
      mov      bx,ss:[bx+2]
      mov      ss:[bx],bp
      mov      ss:[bx+2],sp
      mov      ss:[bx+4],ax
      xor      ax,ax
      ret
      ;
setjmp ENDP
; longjmp(array pointer, constant) :
; non local goto, returns constant
PUBLIC longjmp
longjmp        PROC NEAR
      ;
      xor     ax,ax
      mov     bp,sp
      mov     bx,[bp+2]
      mov     ax,[bp+4]
      or      ax,ax
      jne     L1
      inc     ax
L1:
      mov     bp,ss:[bx]
      mov     sp,ss:[bx+2]
      mov     cx,ss:[bx+4]
      mov     bx,sp
      mov     ss:[bx],cx
      ret
      ;
longjmp ENDP