外观
02.Hello,DTOS
约 878 字大约 3 分钟
嵌入式单片机x86个人
2022-06-04
1、问题
主引导程序是软件还是固件?如果是软件那么由谁开发?如何开发?
软件、开发操作系统的程序员
2、主引导程序
- 一段存储在主引导区(MBR)中的有效代码
- 并不固化于硬件,属于操作系统代码的一部分
- 启动操作系统内核的桥梁,由汇编程序写成
- 代码总量不能超过512个字节(包含0x55aa)
3、主引导程序的开发

4、课程实验
- 编写一个主引导程序(汇编语言)
- 可独立运行于x86架构的主机(无操作系统)
- 运行后在屏幕上打印 "Hello, DTOS!"
5、实现思路
1. 将关键寄存器的值设置为0 ( mov ax,0 )
2. 定义需要打印的数据( db "Hello,D.T.OS!" )
3. 打印预定义好的字符数据( int 0x10 )
6、汇编小贴士一
mov:赋值操作,将右操作数赋值给左操作数
- mov ax, 0 ;将0赋值给ax寄存器
int:触发中断
- int 0x10 ;触发0x10中断,对屏幕进行操作
hlt:停止运行,CPU进入暂停状态,不执行任何操作
- hlt ;使程序进入睡眠状态
7、汇编小贴士二
汇编中地址的访问方式:段地址:段内偏移地址
- mov byte [0xb800:0x01],0x07 ; 将0x07赋值到 ( 0xb800:0x01 ==> 0xb8000 + 0x01) byte ==>只要一个字节
标签
- 用于标识后续指令的地址(可等同为C语言中的标签)
$ vs $$
- 表示当前指令行地址,$表示当前汇编段起始地址
8、中断调用 VS 函数调用
在屏幕上打印一个字符

9、编程实验:第一个引导加载程序
boot.asm

10、问题
如何验证编写的主引导程序?
11、解决方案设计
- 将汇编源码编译为二进制机器码( nasm )
- 创建虚拟盘( bximage )
- 将二进制代码写入虚拟盘起始位置( dd )
- 在虚拟机中将虚拟盘作为启动盘执行( vmware )
12、实验原材料
nasm
- nasm boot.asm -o boot.bin
bximage
- bximage a.img -q -fd -size=1.44
-q 不需要任何的交互,一次性创建出a.img即可 -fd 创建的是虚拟软盘 -size=1.44 大小为1.44兆 dd
- dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc
if 输入 of 输出 bs=512 写入时每个单元的大小 count=1 数量为1,即1个512字节 conv=notrunc 连续写入,不要有间隔
13、编程实验:运行引导加载程序
boot.img




14、小结
- 主引导程序的代码量不能超过512字节
- 主引导程序需要使用汇编语言开发
- 主引导程序中可以通过BIOS中断使用硬件功能
- 主引导程序运行于实模式(地址都是实际的物理地址)
