41 lines
814 B
ArmAsm
41 lines
814 B
ArmAsm
|
.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
|