📄 head.s
字号:
.text.globl idt,gdt,pg_dir,startup_32,floppy_buffer,exec_buffer,kernel_stack,old_REGS
pg_dir:startup_32: movl $0x10,%eax mov %ax,%ds mov %ax,%es mov %ax,%fs mov %ax,%gs
lss stack_start,%esp call setup_idt call setup_gdt movl $0x10,%eax mov %ax,%ds mov %ax,%es mov %ax,%fs mov %ax,%gs lss stack_start,%esp
xorl %eax,%eax1: incl %eax movl %eax,0x000000 cmpl %eax,0x100000 je 1b movl %cr0,%eax andl $0x80000011,%eax testl $0x10,%eax jne 1f orl $4,%eax 1: movl %eax,%cr0 jmp after_page_tables
setup_idt: lea ignore_int,%edx movl $0x00080000,%eax movw %dx,%ax movw $0x8E00,%dx lea idt,%edi movl $256,%ecxrp_sidt: movl %eax,(%edi) movl %edx,4(%edi) addl $8,%edi decl %ecx jne rp_sidt lidt idt_descr retsetup_gdt: lgdt gdt_descr ret
.org 0x1000idt:
.fill 256,8,0
gdt:
.quad 0x0000000000000000
.quad 0x00c09a00000087ff
.quad 0x00c09200000087ff
.quad 0x00c0fa00000007ff
.quad 0x00c0f200000007ff
.quad 0x00c0fa8000007fff
.quad 0x00c0f28000007fff
.quad 0x0000000000000000
.quad 0x0000890074000067
.quad 0x0000000000000000
.fill 246,8,0
floppy_buffer:
.fill 1024,1,0
exec_buffer:
.fill 4096,1,0
kernel_stack:
.fill 2048,4,0
kernel_stack_0:
user_stack:
.fill 2048,4,0
user_stack_0:
tss_tab:
.long 0x00
.long kernel_stack_0
.long 0x10
.long 0x00
.long 0x00
.long 0x00
.long 0x00
.long pg_dir
.fill 17,4,0
.long 0x80000000
old_REGS:
.fill 16,4,0
.align 4
stack_start:
.long user_stack_0
.word 0x10
.align 4
.word 0
idt_descr:
.word 256*8-1
.long idt
.align 4
.word 0
gdt_descr:
.word 256*8-1
.long gdt
.align 4
ignore_int:
incb 0xb8000+160
movb $2,0xb8000+161
iret
.align 4
setup_paging:
movl $pg_dir,%edi
movl $0x100007,%eax
movl $256,%ecx
cld
1:
stosl
addl $0x1000,%eax
loop 1b
xorl %eax,%eax
movl $768,%ecx
cld
rep
stosl
movl $0x100000,%edi
movl $0x000007,%eax
movl $0x40000,%ecx
cld
1:
stosl
addl $0x1000,%eax
loop 1b
cld
xorl %eax,%eax
movl %eax,%cr3
movl %cr0,%eax
orl $0x80000000,%eax
movl %eax,%cr0
ret
.align 4after_page_tables:
call setup_paging
call main
LL:
jmp LL
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -