Minix1.5/lib/ibm/catchsig.s

.define _begsig
.globl ___vectab, __M
mtype = 2			| _M+mtype = &_M.m_type
_begsig:
	push ax			| after interrupt, save all regs
	push bx
	push cx
	push dx
	push si
	push di
	push bp
	push ds
	push es
	mov bx,sp
	mov bx,18(bx)		| bx = signal number
	mov ax,bx		| ax = signal number
	dec bx			| __vectab[0] is for sig 1
	add bx,bx		| pointers are two bytes on 8088
	mov bx,___vectab(bx)	| bx = address of routine to call
	push __M+mtype		| push status of last system call
	push ax			| func called with signal number as arg
	call (bx)
back:
	pop ax			| get signal number off stack
	pop __M+mtype		| restore status of previous system call
	pop es			| signal handling finished
	pop ds
	pop bp
	pop di
	pop si
	pop dx
	pop cx
	pop bx
	pop ax
	add sp,*2		| remove signal number from stack
	iret