第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】
org 0x7c00 ; 程序的运行地址 start:
mov ax, cs
mov ss, ax
mov ds, ax
mov es, ax mov si, msg print:
mov al, [si] ; 类似于C中的解引用操作
add si,
cmp al, 0x00
je last ; jump if equal
mov ah, 0x0e ; 设置打印参数
mov bx, 0x0f
int 0x10 ; 使用BIOS提供的10号中断
jmp print last:
hlt
jmp last msg:
db 0x0a, 0x0a ; db ==> define byte
db "Hello, DTOS!"
db 0x0a, 0x0a
times -($-$$) db 0x00 ; 填充以满足512字节,使用510是下面一条命令占用两个字节
db 0x55, 0xaa
boot.asm
如何验证编写的主引导程序是否正确?为此,设计了以下解决方案
解决方案设计:(以下操作均在 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
第2课 - Hello, DTOS!的更多相关文章
- ABP(现代ASP.NET样板开发框架)系列之16、ABP应用层——数据传输对象(DTOs)
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之16.ABP应用层——数据传输对象(DTOs) ABP是“ASP.NET Boilerplate Project ...
- vue.js学习(第一课)
学习资料 来自台湾小凡! vue.js是javascript的一个库,只专注于UI层面,核心价值永远是 API的简洁. 第一课: 不支持IE8. 1.声明式渲染: el元素的简称 element : ...
- 【bb平台刷课记】wireshark结合实例学抓包
[bb平台刷课记]wireshark结合实例学抓包 背景:本校形势与政策课程课需要在网上观看视频的方式来修得学分,视频网页自带"播放器不可快进+离开窗口自动暂停+看完一集解锁下一集(即不能同 ...
- 【第三课】WEBIX 入门自学-Hello World
在看官网教程时,入门的例子就是dataTable这个空间.So,遵循官网,一起来看一下入门的DataTable组件: WEB使用时固然是先引入相应的库文件: 代码如下 <html> < ...
- Python之路第一课Day6--随堂笔记(面向对象 )
本节内容: 1. 面向对象编程介绍 2. 为什么要用面向对象进行开发? 3. 面向对象的特性:封装.继承.多态 4. 类.方法 一.面向过程 VS 面向对象 1. 编程范式 编程是 程序 员 用 ...
- Python之路第一课Day4--随堂笔记(迭代生成装饰器)
上节回顾: 1.集合 a.关系测试 b.去重 2.文件操作及编码 3.函数 4.局部变量和全局变量 上节回顾 本节课内容: 1.迭代器生成器 2.装饰器 3.json pickle数据序列化 4.软件 ...
- 【Java学习系列】第1课--Java环境搭建和demo运行
本文地址 分享提纲: 1. java环境的搭建 2. java demo代码运行 3.参考文档 本人是PHP开发者,一直感觉Java才是程序的王道(应用广,科班出身),所以终于下决心跟一跟. 主要是给 ...
- Magento学习第一课——目录结构介绍
Magento学习第一课--目录结构介绍 一.Magento为何强大 Magento是在Zend框架基础上建立起来的,这点保证了代码的安全性及稳定性.选择Zend的原因有很多,但是最基本的是因为zen ...
- XAF视频教程来啦,已出15课
第一到第七课在这里: http://www.cnblogs.com/foreachlife/p/xafvideo_1_6.html 视频地址:http://i.youku.com/i/UMTI5OTE ...
随机推荐
- 41.4 Method Security方法安全性
41.4.1 <global-method-security> 这个元素是为Spring Security beans上的安全方法添加支持的主要手段.可以通过使用注释(在接口或类级别定义) ...
- hdfs常用api(java)
1.下载文件到本地 public class HdfsUrlTest { static{ //注册url 让java程序识别hdfs的url URL.setURLStreamHandlerFactor ...
- pandas电子表格的读取(pandas中的read_excel)
上面那篇文章中,初步介绍了一个文本文件的读取:接下来介绍另外一种常见的本地数据格式,那就是Excel电子表格,如果读者在学习或者工作中需要使用Python分析某个Excel表格数据,改如何完成第一个的 ...
- 10款人气暴涨的PHP开源工具
若想创建动态而又新颖的Web应用程序,PHP便是理想的选择.不用说,在Web开发世界里,PHP是最流行的语言之一.一些非常好用的PHP开源工具着实拯救了不少开发任务繁重的PHP开发人员,减轻他们的开发 ...
- P1227 【[JSOI2008]完美的对称】
这道题,先讲一下我的做题思路 这道题的最主要的目的就是算出中心,我下面称为中点.这个中点其实很好算的,我们只需要算出最左下角的坐标和最右上角的坐标,然后用中点坐标公式算出来就ok了,那么这道题就做完了 ...
- Gradle Wrapper
Gradle Wrapper 当把本地一个项目放入到远程版本库的时候,如果这个项目是以gradle构建的,那么其他人从远程仓库拉取代码之后如果本地没有安装过gradle会无法编译运行,如果对gradl ...
- Java高级特性———Java注解
什么是注解(Annotation)? 注解是放在Java源码的类.方法.字段.参数上的一种标签,在Java SE 5.0版本中开始引入.注解同class和interface一样,也属于一种类型. 如何 ...
- soso官方:网页分类技术介绍
http://www.wocaoseo.com/thread-190-1-1.html 1. 技术背景 分类问题是人类所面临的一个非常重要且具有普遍意义的问题.将事物正确的分类,有助于人 ...
- 焦大:seo思维进化论(中)
http://www.wocaoseo.com/thread-52-1-1.html 给你一个网站,你第一步做的是什么?我觉得这个是一个绝好的问题,但是却也是个难题,最常见的答案是莫过于做修改标题/查 ...
- GeneralUpdate2.1.0发布
GeneralUpdate GeneralUpdate是基于.net framwork开发的一款(c/s应用)自动升级程序.该组件将更新的核心部分抽离出来方便应用于多种项目当中目前适用于wpf,控制台 ...