[计算机操作系统] —— setup

213 阅读1分钟

bootsect执行完后,setup和system被加载到了内存中,此时控制权转交给setup,即如下代码。

; 0x90000:光标位置	0x90002:扩展内存数
; 0x9000C:显卡参数	0x901FC:根设备号
...											; 获取硬件参数到0x90000
mov ah, 0x88	int 0x15	mv [2], ax		; 获得物理内存到0x90002

; 移动system到内存0地址
; 利用ax控制循环,利用es:di与ds:si控制目的地址与源地址
mov cx, 0x8000	rep movsw					; 每次移动8000H word
jmp move

; 设置GDT,IDT同理
lgdt gdt_48
gdt_48: .word 0x800 .word 512+gdt, 0x9
gdt:	.word 0, 0, 0, 0
		.word 0x07FF, 0x0000, 0x9A00, 0x00C0
		.word 0x07FF, 0x0000, 0x9200, 0x00C0

mov ax, 0x0001	mov cr0, ax					; 使能保护模式
jmpi 0, 8									; 跳转到0地址,此处非CS<<4+IP

setup最终跳转到了内存0地址,此处是system的head模块。