上一节我们知道bios会把启动设备第一扇区的512B程序加载到0x7c00处执行.由于512B程序大小所限,所以这段程序一般用于引导,就是说将内核程序从启动设备中读出并复制到一个合适的位置,然后引导程序把控制权将给内核。这一节我们就实现这样一个引导程序。
实验环境:
编译器:NASM
虚拟机vmware8.0
二进制编辑器winHex:用于将引导程序和内核写入软盘映射文件img.
代码编辑器notepad++
结合代码详细分析引导程序的内容.
下面是引导程序内容:
BOOTSEG equ 0x07c0 ;boot.bin 被bios加载到0x7c00内存处
SYSSEG equ 0x1000 ;kernel先被加载到0x10000,再移动到0x0处
SYSLEN equ 17 ;内核最多占用17个扇区 17*512字节
KERNEL_CS equ 0x08 ;内核代码段选择符
start:
jmp 0x07c0:go ;这条指令将cs寄存器设为0x07c0,便于寻址
go:
mov ax,cs
mov ds,ax
mov es,ax
mov ss,ax
mov sp,0x400 ;开辟栈空间逻辑地址0x400-0x2