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

📄 irq.s

📁 kvm 源代码
💻 S
字号:
// irq test program.  assumes outb $irq, $0xff generates an interrupt $irq.#include "print.h"	.text	PRINT "irq test"	mov $stack_top, %rsp	call setup_gdt		mov %ds, %ax	mov %ax, %ds  // check ds descriptor is okay	mov $irq_handler, %rdx	mov $0x20, %eax	call setup_idt_entry	lidt idt_descriptor	PRINT "software interrupt"	int $0x20	sti	nop	PRINT "injecting interrupt with interrupts enabled"		mov $0x20, %al	outb %al, $0xff // inject interrupt	nop	nop	nop	PRINT "after injection"	cli	PRINT "injecting interrupt with interrupts disabled"		mov $0x20, %al	outb %al, $0xff // inject interrupt	// no interrupt here (disabled)	nop	nop	PRINT "enabling interrupts"	nop	nop	sti	out %al, $0x80 // blocked by sti	// interrupt here	out %al, $0x80 	PRINT "after injection"	nop	nop		hlt	irq_handler:	PRINT "interrupt handler"	iretq	setup_idt_entry:	// %rax: irq %rdx: handler	shl $4, %rax	mov %dx, idt(%rax)	shr $16, %rdx	mov %cs, 2+idt(%rax)	mov %dx, 6+idt(%rax)	shr $16, %rdx	mov %edx, 8+idt(%rax)	movw $0x8e00, 4+idt(%rax)	retsetup_gdt:	mov $0, %eax	mov %cs, %ax	andl $~7, %eax	movl $0xffff, gdt(%rax)	movl $0xaf9b00, 4+gdt(%rax)	mov $0, %eax	mov %ds, %ax	andl $~7, %eax	movl $0xffff, gdt(%rax)	movl $0x8f9300, 4+gdt(%rax)	lgdt gdt_descriptor	ret	.data	.align 16idt:		. = . + 256 * 16idt_descriptor:	.word . - idt - 1	.quad idt.align 8	gdt:	. = . + 256 * 8gdt_descriptor:	.word . - gdt - 1	.quad gdt 	.align 4096stack_base:	. = . + 4096stack_top:	

⌨️ 快捷键说明

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