这个简单的引导扇区程序展示了计算机启动的最基本原理,是学习操作系统开发的良好起点。
准备环境
- NASM汇编器
- PowerISO
编写程序
你可以用任意文本编辑器把以下内容保存为asm格式
[org 0x7C00] ; BIOS将引导扇区加载到0x7C00处 [bits 16] ; 16位实模式 ; 主程序入口 start: ; 设置视频模式为文本模式80x25 mov ax, 0x0003 ; AH=0 (设置视频模式), AL=3 (80x25 16色文本) int 0x10 ; 调用BIOS视频中断 ; 设置段寄存器 xor ax, ax ; AX = 0 mov ds, ax ; DS = 0 (数据段) mov es, ax ; ES = 0 (附加段) ; 设置栈指针 mov bp, 0x8000 ; 栈基址 mov sp, bp ; 栈指针 ; 打印Hello World消息 mov si, hello_msg ; SI指向消息字符串 call print_string ; 无限循环 jmp $ ; 挂起系统 print_string: pusha ; 保存所有寄存器 mov ah, 0x0E ; BIOS tele-type功能 .print_char: lodsb ; 从SI加载字符到AL,并递增SI cmp al, 0 ; 检查字符串结束(0) je .print_done int 0x10 ; 调用BIOS打印字符 jmp .print_char ; 继续下一个字符 .print_done: popa ; 恢复寄存器 ret ; 数据定义 hello_msg db 'Hello World!', 0xD, 0xA, 0 ; 字符串以回车、换行和0结束 ; 填充引导扇区 times 510-($-$$) db 0 ; 填充剩余空间 dw 0xAA55 ; 魔数,标识为可启动扇区
编译
本文使用NASM,把NASM主程序文件和刚才编写ASM文件放在一起
输入
nasm -f bin boot.asm -o boot.bin
编译为二进制引导文件
这是程序编译完后的十六进制
B8 03 00 CD 10 31 C0 8E D8 8E C0 BD 00 80 89 EC BE 26 7C E8 02 00 EB FE 60 B4 0E AC 3C 00 74 04 CD 10 EB F7 61 C3 48 65 6C 6C 6F 20 57 6F 72 6C 64 21 0D 0A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA
正好512字节
启动
从ISO启动
打开PowerISO,点击上方“操作”→“启动”→“增加启动信息”
选择文件启动信息,把范围改成所有文件,并选择刚才的boot.bin文件,选择完成和点击确定
保存ISO,虚拟机尝试启动可以发现成功显示Hello world!