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
 |