signal.s 691 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
  2. .define _signal
  3. .extern _signal, cerror
  4. NSIG=16
  5. _signal: mov bx,sp
  6. mov cx,4(bx)
  7. mov bx,2(bx)
  8. cmp bx,NSIG
  9. jae 1f
  10. shl bx,1
  11. mov dx,dvect(bx)
  12. cmp cx,1
  13. jbe 2f
  14. mov dvect(bx),cx
  15. mov bx,sp
  16. mov 4(bx),entry
  17. mov bx,dx
  18. int 0xb0
  19. mov dx,bx
  20. mov bx,sp
  21. mov 4(bx),cx
  22. jb 3f
  23. jmp 4f
  24. 2:
  25. int 0xb0
  26. jb 3f
  27. mov dvect(bx),cx
  28. 4:
  29. cmp ax,1
  30. jbe 5f
  31. mov ax,dx
  32. 5:
  33. ret
  34. 1:
  35. mov ax,22
  36. 3:
  37. jmp cerror
  38. entry:
  39. push bx
  40. push cx
  41. push dx
  42. push di
  43. push si
  44. mov bx,sp
  45. mov di,10(bx)
  46. mov 10(bx),ax
  47. push di
  48. shl di,1
  49. call dvect(di)
  50. add sp,2
  51. pop si
  52. pop di
  53. pop dx
  54. pop cx
  55. pop bx
  56. pop ax
  57. popf
  58. ret
  59. .sect .bss
  60. dvect: .space 2*NSIG
  61. .sect .text