02 - Hello, DTOS(第一个主引导程序,屏幕上打印Hello,DTOS)

---- 整理自狄泰软件唐佐林老师课程

查看所有文章链接:(更新中)深入浅出操作系统 - 目录

1. 问题

  • 主引导程序是软件还是固件?
  • 如果是软件,那么由谁开发?如何开发?

2. 主引导程序

  • 一段存储在主引导区MBR中的有效代码
  • 并不固化于硬件,属于操作系统代码的一部分
  • 启动操作系统内核的桥梁,由汇编程序写成
  • 代码总量不能超过512字节(包含0x55aa)

2.1 主引导程序的开发

对比应用程序的开发:

入口:0x7c00VS入口:main
主引导程序
(汇编语言)
应用程序
(C/C++)
||
V
||
V
BIOS中断OS系统调用

2.2 课程实验:编写一个主引导程序

2.2.1 目标

  • 可独立运行于x86架构的主机(无操作系统)
  • 运行后在屏幕上打印 “Hello,DTOS!”

2.2.2 关键实现思路

  1. 将关键寄存器的值设为0
mov ax,0
  1. 定义需要打印的数据
db "Hello,DTOS!"
  1. 打印预定义的字符数据
int 0x10

2.3 汇编小贴士

  • mov:赋值
  • int:触发中断
  • hlt:停止运行,CPU进入 暂停状态,不执行任何操作
  • 汇编中地址的访问方式:段地址 : 段内偏移地址
; 0xb800:0x01 ==> 0xb8000 + 0x01; 0xb800 左移四位,加上偏移地址0x01,将0x07赋值到地址0xb8001
mov byte [0xb800:0x01],0x07  
  • 标签:用于 标识后续指令的地址(可等同于C语言中的 goto所用的标签
  • $:表示当前指令行地址
  • $$:表示当前汇编段起始地址

2.4 中断调用vs函数调用

在屏幕上打印一个字符:
在这里插入图片描述

3. 编程实验

【参看链接】:02 - Hello, DTOS!(第一个主引导程序,屏幕上打印Hello,DTOS! )

3.1 问题

  • 如何验证编写的主引导程序?

3.2 解决方案设计

  1. 将汇编源码编译为二进制机器码(nasm)
nasm boot.asm -o boot.bin
  1. 创建虚拟盘(bximage)
bximage 

在这里插入图片描述

c. 将二进制代码boot.bin写入虚拟盘a.img起始位置

dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc

if:输入文件,boot.bin
of:输出文件,a.img
bs:每次操作的块大小,这里为512字节
count:每次操作的块数量,这里为1
conv:notrunc表示无间隙写入

d. 在虚拟机中将虚拟盘作为启动盘执行(vmware)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

开启此虚拟机:

在这里插入图片描述

4. 小结

  • 主引导程序的代码量不能超过512字节
  • 主引导程序需要使用汇编语言开发
  • 主引导程序中可以通过BIOS中断使用硬件功能
  • 主引导程序运行于实模式(地址都是实际的物理地址)
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

uuxiang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值