62 lines
		
	
	
	
		
			691 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
	
		
			691 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | 
						|
.define _signal
 | 
						|
.extern _signal, cerror
 | 
						|
NSIG=16
 | 
						|
_signal:	mov	bx,sp
 | 
						|
	mov cx,4(bx)
 | 
						|
	mov bx,2(bx)
 | 
						|
	cmp bx,NSIG
 | 
						|
	jae 1f
 | 
						|
	shl bx,1
 | 
						|
	mov dx,dvect(bx)
 | 
						|
	cmp cx,1
 | 
						|
	jbe 2f
 | 
						|
	mov dvect(bx),cx
 | 
						|
	mov bx,sp
 | 
						|
	mov 4(bx),enter
 | 
						|
	mov bx,dx
 | 
						|
	int 0xb0
 | 
						|
	mov dx,bx
 | 
						|
	mov bx,sp
 | 
						|
	mov 4(bx),cx
 | 
						|
	jb 3f
 | 
						|
	jmp 4f
 | 
						|
2:
 | 
						|
	int 0xb0
 | 
						|
	jb 3f
 | 
						|
	mov dvect(bx),cx
 | 
						|
4:
 | 
						|
	cmp ax,1
 | 
						|
	jbe 5f
 | 
						|
	mov ax,dx
 | 
						|
5:
 | 
						|
	ret
 | 
						|
1:
 | 
						|
	mov ax,22
 | 
						|
3:
 | 
						|
	jmp cerror
 | 
						|
 | 
						|
enter:
 | 
						|
	push bx
 | 
						|
	push cx
 | 
						|
	push dx
 | 
						|
	push di
 | 
						|
	push si
 | 
						|
	mov bx,sp
 | 
						|
	mov di,10(bx)
 | 
						|
	mov 10(bx),ax
 | 
						|
	push di
 | 
						|
	shl di,1
 | 
						|
	call dvect(di)
 | 
						|
	add sp,2
 | 
						|
	pop si
 | 
						|
	pop di
 | 
						|
	pop dx
 | 
						|
	pop cx
 | 
						|
	pop bx
 | 
						|
	pop ax
 | 
						|
	popf
 | 
						|
	ret
 | 
						|
.sect .bss
 | 
						|
dvect:	.space 2*NSIG
 | 
						|
.sect .text
 |