⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 irq_handlers.asm

📁 jserv写的orz小内核 有详细的注释
💻 ASM
字号:
;-------------------------------------------------------------------------------IRQ_Dummy_M:	push ax	mov al, END_OF_INTERR	out MASTER_PIC, al	pop ax	sti	iretIRQ_Dummy_S:	push ax	mov al, END_OF_INTERR	out MASTER_PIC, al	out SLAVE_PIC, al	pop ax	sti	iret;-------------------------------------------------------------------------------;;;; TimerIRQ_0:	cli	push ax	push ds	mov ax, kernel_data - _GDT	mov ds, ax	inc DWORD [globalTime]	mov eax, [taskRunningTime]	dec eax	mov [taskRunningTime], eax	jz IRQ_0_Switch	pop ds	pop ax	jmp IRQ_Dummy_MIRQ_0_Switch:	mov al, END_OF_INTERR	out MASTER_PIC, al	pop ds	pop ax	GDT_Adjustment	;;;;	mov [task_ebp], ebp	mov ebp, [currentTaskP]	mov [ds:ebp + s_task.r_eax], eax	mov [ds:ebp + s_task.r_ebx], ebx	mov [ds:ebp + s_task.r_ecx], ecx	mov [ds:ebp + s_task.r_edx], edx	mov [ds:ebp + s_task.r_esi], esi	mov [ds:ebp + s_task.r_edi], edi	mov eax, [task_ebp]	mov [ds:ebp + s_task.r_ebp], eax	;;;;	pop eax	mov [ds:ebp + s_task.r_eip], eax	;;;;	pop eax		; task_cs	;;;;	pop eax	mov [ds:ebp + s_task.r_eflags], eax	;;;;	mov [ds:ebp + s_task.r_esp], esp	;;;;	mov ax,kernel_data - _GDT	mov ss,ax	mov esp, [kernel_esp]	; switch to next task	jmp Schedule;-------------------------------------------------------------------------------;;;; KeyboardIRQ_1:	cli	push ax	push ds	mov ax, kernel_data - _GDT	mov ds, ax	mov al, [irq_1_extscan]	; jiao: extCan saved last time	and al, al	jz IRQ_1_Normal	cmp al, 0xE1	; check for 'Pause' key	jz IRQ_1_Pause	in al, KBD_PORT_A	cmp al, 0x2A	; Prefix	jz IRQ_1_Clr	cmp al, 0xAA	; event.keyup	jz IRQ_1_ClrIRQ_1_ExtPut:	mov ah, [irq_1_extscan]IRQ_1_Put:	mov [globalKey], ax	or [globalKeySet], BYTE 1	jmp short IRQ_1_ClrIRQ_1_Pause:		; jiao: 0xe1,0x1d,0x45,0xe1,0x9d,0xc5	in al, KBD_PORT_A	cmp al, 0xC5	; 'Pause' key	jz IRQ_1_ExtPut	cmp al, 0x45	; ?	jz IRQ_1_ExtPut	jmp short IRQ_1_ExitIRQ_1_Normal:	in al, KBD_PORT_A	cmp al, 0xFE	; Ignore it	jz IRQ_1_Exit	cmp al, 0xE1	; Extended scan code	jz IRQ_1_ExtKey	cmp al, 0xE0	; Extended scan code	jz IRQ_1_ExtKey	xor ah, ah	jmp short IRQ_1_PutIRQ_1_ExtKey:		; jiao: save ext key, 0xe0 or 0xe1	mov [irq_1_extscan], alIRQ_1_Exit:	in al, KBD_PORT_B	; jiao: reset keyboard	mov ah, al	or al, 0x80	out KBD_PORT_B, al	; jiao: close keyboard, set bit 7	mov al, ah	out KBD_PORT_B, al	; jiao: open keyboard	pop ds	pop ax	jmp IRQ_Dummy_SIRQ_1_Clr:	xor al, al	mov [irq_1_extscan], al	jmp short IRQ_1_Exitirq_1_extscan	db 0;-------------------------------------------------------------------------------IRQ_2:	cli	jmp IRQ_Dummy_MIRQ_3:	cli	jmp IRQ_Dummy_MIRQ_4:	cli	jmp IRQ_Dummy_MIRQ_5:	cli	jmp IRQ_Dummy_MIRQ_6:	cli	jmp IRQ_Dummy_MIRQ_7:	cli	jmp IRQ_Dummy_MIRQ_8:	cli	jmp IRQ_Dummy_SIRQ_9:	cli	jmp IRQ_Dummy_SIRQ_10:	cli	jmp IRQ_Dummy_SIRQ_11:	cli	jmp IRQ_Dummy_SIRQ_12:	cli	jmp IRQ_Dummy_SIRQ_13:	cli	jmp IRQ_Dummy_SIRQ_14:	cli	jmp IRQ_Dummy_SIRQ_15:	cli	jmp IRQ_Dummy_S

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -