📄 16bit.asm
字号:
[BITS 16][ORG KERNEL_START]Start: mov ax, cs mov ds, ax mov es, ax mov ss, ax ;初始化堆栈段 mov sp, 0x0000 ;栈顶指针归零 ; 准备切换到保护模式 cli ;禁用中断以免干扰初始化 cld ;设定字串处理由低到高地址 call PrepareIRQs ;呼叫irqs.asm的函数初始化irq call A20En ;呼叫irqs.asm的函数打开A20地址线 lgdt [_GDT - KERNEL_START] ; load GDT _GDT在tables.asm lidt [_IDTR - KERNEL_START] ; load IDTx _IDTR在tables.asm; CR0 :: PG CD NW 0 31..28; 0 0 0 0 27..24; 0 0 0 0 23..20; 0 AM 0 WP 19..16; 0 0 0 0 15..12; 0 0 0 0 11.. 8; 0 0 NE ET 7.. 4; TS EM MP PE 3.. 0;;控制暫存器 CR0 的結構;位元編號 [31][30][29][28-19][18][ 17 ][16][15-6][05][04][03][02][01][00];欄位名稱 [PG][CD][NW][保 留][AM][保 留][WP][保 留][NE][ET][TS][EM][MP][PE] mov eax, cr0 or eax, 00000000000000000000000000000001b and eax, 10011111111110101111111111111111b mov cr0, eax;将kernel_code代码段放入CS中,立即切换到保护模式执行32bit.asm里的Begin32c jmp DWORD (kernel_code - _GDT):Begin32c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -