 
; 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
setjmp          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



