ack/mach/minix/libsys/catchsig.s

41 lines
814 B
ArmAsm
Raw Normal View History

1988-04-19 10:19:15 +00:00
.define _begsig
.globl _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
pop dummy | remove signal number from stack
iret
.data
dummy: .word 0