zoukankan      html  css  js  c++  java
  • 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函数调用
    在屏幕上打印一个字符

  • 相关阅读:
    腾讯会议API接入
    解决远程调用三方接口:javax.net.ssl.SSLHandshakeException报错
    iOS自动创建本地化文件
    数组转换
    2021MongoDB技术实践与应用案例征集活动获奖通知
    MongoDB按需物化视图介绍
    参会指南 | 2021MongoDB南京技术沙龙
    叮咚买菜自建MongoDB上云实践
    MongoDB技术实践与应用案例征集中
    使用WT工具恢复MongoDB数据
  • 原文地址:https://www.cnblogs.com/-glb/p/11600871.html
Copyright © 2011-2022 走看看