第2课 - Hello, DTOS!
第2课 - Hello, DTOS!
1. 主引导程序
主引导程序是软件还是固件?如果是软件,那么由谁开发?如何开发?
(1)上一节说到了固件和软件的区别。由于主引导程序没有在出厂前固化到硬件中,因此它是软件,由开发操作系统的程序员开发,隶属于操作系统代码的一部分
(2)从物理意义上看,主引导程序是存储在主引导区(MBR)中的一段有效代码
(3)从功能上看,主引导程序是启动操作系统内核的桥梁,由汇编程序写成
(4)主引导程序的代码总量不能超过512个字节(包含 0x55aa)
2. 主引导程序的开发
3. 课程实验
(1)编写一个主引导程序(汇编语言)
(2)可独立运行于 x86 架构的主机(无操作系统,直接在硬件上运行)
(3)运行后在屏幕上打印 "Hello, DTOS!"
4. 实现思路
(1)将关键寄存器的值设置为 0 (mov ax, 0)
(2)定义需要打印的数据(db "Hello, D.T.OS!")
(3)打印预定义好的字符数据(int 0x10)
5. 汇编预备知识
(1)mov:赋值操作,将右操作数赋值给左操作数
-
-
- mov ax, 0 ; 将 0 赋值给 ax 寄存器
-
(2)int:用于触发中断
-
-
- int 0x10 ; 触发 0x10 中断,对屏幕进行操作
-
(3)hlt:停止运行,CPU 进入暂停状态,不执行任何操作
-
-
- hlt ; 使程序进入睡眠状态
-
(4)汇编中地址的访问方式:段地址:段内偏移地址
-
-
- mov byte [0xb800: 0x01], 0x07 ; 0xb800:0x01 → 0xb8000 + 0x01
-
(5)标签
-
-
- 用于标识后续指令的地址 ; 可等同为 C 语言中的标签,goto 语句的标签
-
(6)$ vs $$
-
-
- $ 表示当前指令行地址, $$ 表示当前汇编段起始地址
-
6. 中断调用 VS 函数调用
7. 编程实验
【第一个引导加载程序:boot.asm】
1 org 0x7c00 ; 程序的运行地址 2 3 start: 4 mov ax, cs 5 mov ss, ax 6 mov ds, ax 7 mov es, ax 8 9 mov si, msg 10 11 print: 12 mov al, [si] ; 类似于C中的解引用操作 13 add si, 1 14 cmp al, 0x00 15 je last ; jump if equal 16 mov ah, 0x0e ; 设置打印参数 17 mov bx, 0x0f 18 int 0x10 ; 使用BIOS提供的10号中断 19 jmp print 20 21 last: 22 hlt 23 jmp last 24 25 msg: 26 db 0x0a, 0x0a ; db ==> define byte 27 db "Hello, DTOS!" 28 db 0x0a, 0x0a 29 times 510-($-$$) db 0x00 ; 填充以满足512字节,使用510是下面一条命令占用两个字节 30 db 0x55, 0xaa 31
如何验证编写的主引导程序是否正确?为此,设计了以下解决方案
解决方案设计:(以下操作均在 linux 下完成)
(1)将汇编源码编译为二进制机器码(nasm命令)
nasm boot.asm -o boot.bin
(2)创建虚拟盘(bximage命令)
bximage a.img -q -fd -size=1.44
q:无需任何交互,直接创建出 bximage
fd:floppy disk 创建的是虚拟软盘
size:创建的虚拟软盘的大小为1.44
(3)将二进制代码写入虚拟盘起始位置(dd命令)
dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc
if:input file 输入的文件
of:output file 输出的文件
bs:bytes 写入时每个单元的大小
count: 写入单元的个数
conv:notrunc 连续的写入,不能有间隔
(4)在虚拟机中将虚拟盘作为启动盘执行(vmware虚拟机)
-
-
- 首先使用 vmware 创建一个虚拟机,注意下图中几步的选择
-
-
-
- 启动我们刚刚安装的操作系统,会提示找不到操作系统,因为存储介质中没有主引导区 MBR
-
-
-
- 下面加载我们前面制作好的 a.img 文件到刚刚创建的虚拟机中的软盘中,然后启动虚拟机,出现 "Hello, DTOS!",大功告成!!!
-
8. 小结
(1)主引导程序的代码量不能超过 512 字节
(2)主引导程序需要使用汇编语言开发
(3)主引导程序中可以通过BIOS中断使用硬件功能
(4)主引导程序运行于实模式(地址都是实际的物理地址)
注:本文整理于《狄泰12月提升计划》课程内容
狄泰QQ群:199546072
本人QQ号:502218614