Hello,DTOS!(上)

主引导程序是软件还是固件?如果是软件,那么由谁开发?如何开发?
主引导程序是软件。因为它不是固化于硬件当中的,并不是在出厂之前已经烧到硬件里面去了。
因此它必然是软件。既然是软件,那是谁来开发它呢?
就目前来看,开发操作系统的程序员应该负责开发主引导程序,因为主引导程序被归为了操作系统代码的一部分了。
那这意味着什么,意味着我们需要考虑如何开发一个主引导程序。

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

主引导程序开发:

如果用c或c++语言开发一个应用程序,它的入口肯定是在main。从main函数开始执行,接下来就是调用操作系统的
所提供的功能函数,继而完成这个应用程序它整体的功能了。
最要的两个地方:入口main、操作系统提供出来的功能函数。
对比看一下左边的这张图,就是开发主引导程序的概要图了。入口在物理地址0x7c00处,主引导程序就是从此地址处开始
执行的。知道了入口,还需要知道有没有什么现成的功能可以使用,答案就是BIOS中断。在开发主引导程序时使用的就是BIOS
中断,BIOS所创建的中断向量表就有用了,可以使用中断向量表来使用中断服务程序的功能了。
最重要的两个地方:入口0x7c00、BIOS中断
对比左右两张图,非常类似。

课程实验
——编写一个主引导程序(汇编语言)
——可独立运行于x86架构的主机(无操作系统)
——运行后再屏幕上打印"Hello,DTOS"

实现思路
1.将关键寄存器的值设置为0 (mov ax,0)
2.定义需要打印的数据(db "Hello,D.T.OS!")
3.打印预定义好的字符数据(int 0x10)
汇编小贴士一
——mov:赋值操作,将操作数赋值给左操作数
.mov ax,0 将0赋值给ax寄存器
——int:触发中断
.int 0x10;触发0x10中断,对屏幕进行操作
——hlt:停止运行,CPU进行暂停状态,不执行任何操作
.hlt 使程序进入睡眠状态
你是否会想,在做应用程序开发时,打印完了字符串了,不需要做其他事情了。应用程序是基于操作系统来执行的,
操作系统会帮助我们做很多的事,然而现在要编写的是主引导程序,没有操作系统了,因此考虑的事情就会多一点了。

汇编小贴士二
——汇编中地址的访问方式:段地址:段内偏移地址
.mov byte[0xb800:0x01],0x07; 0xb800:0x01——>0xb8000 + 0x01
——标签
.用于标识后续指令的地址(可等同为C语言中的标签)
——$ vs $$
.$标识当前指令地址,$$表示当前汇编段起始地址

中断调用VS函数调用
在屏幕上打印一个字符

原文地址:https://www.cnblogs.com/-glb/p/11600871.html