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

主引导程序
——一段存储在主引导区(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函数调用
在屏幕上打印一个字符

Hello,DTOS!(上)的更多相关文章

  1. ABP(现代ASP.NET样板开发框架)系列之16、ABP应用层——数据传输对象(DTOs)

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之16.ABP应用层——数据传输对象(DTOs) ABP是“ASP.NET Boilerplate Project ...

  2. ABP应用层——数据传输对象(DTOs)

    ABP应用层——数据传输对象(DTOs) 基于DDD的现代ASP.NET开发框架--ABP系列之16.ABP应用层——数据传输对象(DTOs) ABP是“ASP.NET Boilerplate Pro ...

  3. 插上腾飞的翅膀:为asp.net core添加protobuf支持

    没时间解释了,快上车. 通过NuGet获取Zaabee.AspNetCoreProtobuf Install-Package Zaabee.AspNetCoreProtobuf 在Startup.cs ...

  4. 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之十三 || DTOs 对象映射使用,项目部署Windows+Linux完整版

    更新 很多小伙伴在用 IIS 发布的时候,总是会有一些问题,文章下边 #autoid-6-0-0 我也简单的动图展示了,如何 publish 到 IIS 的过程,如果你能看懂,却发现自己的项目有问题的 ...

  5. 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之十二 || 三种跨域方式比较,DTOs(数据传输对象)初探

    更新反馈 1.博友@落幕残情童鞋说到了,Nginx反向代理实现跨域,因为我目前还没有使用到,给忽略了,这次记录下,为下次补充.此坑已填 2.提示:跨域的姊妹篇——<三十三║ ⅖ 种方法实现完美跨 ...

  6. Asp.Net Core Web Api图片上传(一)集成MongoDB存储实例教程

    Asp.Net Core Web Api图片上传及MongoDB存储实例教程(一) 图片或者文件上传相信大家在开发中应该都会用到吧,有的时候还要对图片生成缩略图.那么如何在Asp.Net Core W ...

  7. 第2课 - Hello, DTOS!

    第2课 - Hello, DTOS! 1. 主引导程序 主引导程序是软件还是固件?如果是软件,那么由谁开发?如何开发? (1)上一节说到了固件和软件的区别.由于主引导程序没有在出厂前固化到硬件中,因此 ...

  8. Asp.Net Mvc 使用WebUploader 多图片上传

    来博客园有一个月了,哈哈.在这里学到了很多东西.今天也来试着分享一下学到的东西.希望能和大家做朋友共同进步. 最近由于项目需要上传多张图片,对于我这只菜鸟来说,以前上传图片都是直接拖得控件啊,而且还是 ...

  9. [APUE]进程控制(上)

    一.进程标识 进程ID 0是调度进程,常常被称为交换进程(swapper).该进程并不执行任何磁盘上的程序--它是内核的一部分,因此也被称为系统进程.进程ID 1是init进程,在自举(bootstr ...

随机推荐

  1. [LeetCode] 871. Minimum Number of Refueling Stops 最少的加油站个数

    A car travels from a starting position to a destination which is target miles east of the starting p ...

  2. [LeetCode] 1028. Recover a Tree From Preorder Traversal 从先序遍历还原二叉树

    We run a preorder depth first search on the rootof a binary tree. At each node in this traversal, we ...

  3. redis持久化方式与优缺点

    Redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到磁盘来保证持久化.redis支持四种持久化方式,一是 Snapshotting(快照)也是默认方式:二是Appen ...

  4. Qt Quick 事件处理之鼠标、键盘、定时

    一.鼠标事件 MouseArea 对象可以附加到一个 item 上供 item 处理鼠标事件,它本身是一个不可见的 item .在其内部,可以直接引用它所附着的对象的属性和方法.你可以将 MouseA ...

  5. python 爬取媒体文件(无防火墙)

    #coding = utf-8 import requests import pandas as pd import os,time root_path = './根目录/' input_file = ...

  6. Maven 教程(22)— Maven中 plugins 和 pluginManagement

    原文地址https://blog.csdn.net/liupeifeng3514/article/details/80236827 plugins和pluginManagement的区别概述plugi ...

  7. BScroll使用

    当页面内容的高度超过视口高度的时候,会出现纵向滚动条:当页面内容的宽度超过视口宽度的时候,会出现横向滚动条.也就是当我们的视口展示不下内容的时候,会通过滚动条的方式让用户滚动屏幕看到剩余的内容. 话说 ...

  8. Installing Google Chrome in Linux(RedHat Enterprise Linux 7)

    # wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm # yum -y install r ...

  9. 使用excel中的数据快速生成sql语句

    在小公司的话,总是会有要开发去导入历史数据(数据从旧系统迁移到新系统上)的时候.这个时候,现场实施或客户会给你一份EXCEL文档,里面包含了一些别的系统上的历史数据,然后就让你导入到现在的系统上面去. ...

  10. eclipse jvm 参数配置

    双击tomcat服务器---->打开启动配置--->VM 自变量