提交 df0774c3 编写于 作者: R rain

0.556s-int: init IDT and set handler

上级 9d2c5f2c
......@@ -16,3 +16,5 @@
2021-2-23 0.509: 509 lines, 6 files, rain
2021-2-23 0.556: 556 lines, 6 files, rain
......@@ -45,6 +45,9 @@ Cunix kernel
`0.509s-kernel`:
&#9load kernel to 0x8200-0x9200 for 4KB, kernel.asm display 'K' to screen.
`0.556s-int`:
&#9init IDT at 0x0000-0x1000, and set all handler at ignore_int, but it do nothing.
</pre>
......@@ -17,10 +17,57 @@
org 0x8200
bits 64
_start:
mov byte [0xb8000], 'K'
hlt
call setup_idt
lidt [idt64_descriptor]
sti
jmp $
setup_idt:
lea rdx, ignore_int
mov rax, (0x08 << 16)
mov ax, dx
mov rcx, (0x8e00 << 32)
add rax, rcx
mov ecx, edx
shr ecx, 16
shl rcx, 48
add rax, rcx
shr rdx, 32
; we save IDT at 0x0000000000000000 like BIOS
lea rdi, 0x0000000000000000
mov rcx, 256
.setup_loop:
mov [rdi], rax
mov [rdi + 8], rdx
add rdi, 0x10
dec rcx
jne .setup_loop
ret
ignore_int:
add byte [0xb8000], 1
; CPU will cli when it call ignore_int
hlt
idt64_length equ 0xff * 16
idt64_descriptor:
dw idt64_length
dd 0x0000000000000000
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册