16bit.asm

来自「jserv写的orz小内核 有详细的注释」· 汇编 代码 · 共 39 行

ASM
39
字号
[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 + =
减小字号Ctrl + -
显示快捷键?