自制操作系统(一)bootloader

环境和工具

环境:windows/linux
工具:nasm,dd,virtualbox/qemu/vmware

系统启动过程

(翻译)当按下电源键后,电脑会从储存在主板上的某些闪存加载BIOS,BIOS初始化并自动检测硬件,然后把最开始的512个字节从媒体介质(光盘或者软盘)加载到内存中。 如果最后两个字节等于0xAA55,那么BIOS会跳转到0x7C00位置,将控制权转交给bootloader。
这时CPU是在16位模式下运行,由于BIOS只读最开始的512个字节,意味着bootloader代码要小于这个限制,否则会读到没有初始化的内存。

第一个HelloWorld bootloader

;boot1.asm
bits 16 ;16位的代码
org 0x7c00 ;在偏移0x7c00处开始输出
boot:
	mov si,hello ;将si寄存器指向hello的内存地址
	mov ah,0x0e ; 0x0e代表在tty模式下写字符
.loop
	lodsb
	or al,al ; al==0?	
	jz halt ; 如果al==0,跳转到halt标签
	int 0x10 ; BIOS中断
	jmp loop
halt:
	cli ;清空中断标记
	hlt ;终止
hello:
	db "Hello,world",0
times 510-($-$$) db 0 ;将剩下的510个字节用零填充
dw 0xaa55 ;将最后两个字节设置成0xaa55     

编译代码,生成bin文件

nasm boot1.asm -o boot1.bin

生成img文件

dd if=boot1.bin of=boot1.img bs=512 count=1

在qemu中运行

qemu-system-i386.exe -hdd boot1.img

在virtualbox中运行

  1. 配置一个虚拟dos系统
    自制操作系统(一)bootloader_第1张图片
  2. 将img文件加载到dos的软盘中
    自制操作系统(一)bootloader_第2张图片
  3. 效果图
    自制操作系统(一)bootloader_第3张图片
    参考:
  1. writing a bootloader
  2. 30天自制操作系统
  3. 自己动手写操作系统
  4. 汇编语言

你可能感兴趣的:(自制操作系统(一)bootloader)