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函数调用
在屏幕上打印一个字符

Hello,DTOS!(上)的更多相关文章
- ABP(现代ASP.NET样板开发框架)系列之16、ABP应用层——数据传输对象(DTOs)
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之16.ABP应用层——数据传输对象(DTOs) ABP是“ASP.NET Boilerplate Project ...
- ABP应用层——数据传输对象(DTOs)
ABP应用层——数据传输对象(DTOs) 基于DDD的现代ASP.NET开发框架--ABP系列之16.ABP应用层——数据传输对象(DTOs) ABP是“ASP.NET Boilerplate Pro ...
- 插上腾飞的翅膀:为asp.net core添加protobuf支持
没时间解释了,快上车. 通过NuGet获取Zaabee.AspNetCoreProtobuf Install-Package Zaabee.AspNetCoreProtobuf 在Startup.cs ...
- 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之十三 || DTOs 对象映射使用,项目部署Windows+Linux完整版
更新 很多小伙伴在用 IIS 发布的时候,总是会有一些问题,文章下边 #autoid-6-0-0 我也简单的动图展示了,如何 publish 到 IIS 的过程,如果你能看懂,却发现自己的项目有问题的 ...
- 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之十二 || 三种跨域方式比较,DTOs(数据传输对象)初探
更新反馈 1.博友@落幕残情童鞋说到了,Nginx反向代理实现跨域,因为我目前还没有使用到,给忽略了,这次记录下,为下次补充.此坑已填 2.提示:跨域的姊妹篇——<三十三║ ⅖ 种方法实现完美跨 ...
- Asp.Net Core Web Api图片上传(一)集成MongoDB存储实例教程
Asp.Net Core Web Api图片上传及MongoDB存储实例教程(一) 图片或者文件上传相信大家在开发中应该都会用到吧,有的时候还要对图片生成缩略图.那么如何在Asp.Net Core W ...
- 第2课 - Hello, DTOS!
第2课 - Hello, DTOS! 1. 主引导程序 主引导程序是软件还是固件?如果是软件,那么由谁开发?如何开发? (1)上一节说到了固件和软件的区别.由于主引导程序没有在出厂前固化到硬件中,因此 ...
- Asp.Net Mvc 使用WebUploader 多图片上传
来博客园有一个月了,哈哈.在这里学到了很多东西.今天也来试着分享一下学到的东西.希望能和大家做朋友共同进步. 最近由于项目需要上传多张图片,对于我这只菜鸟来说,以前上传图片都是直接拖得控件啊,而且还是 ...
- [APUE]进程控制(上)
一.进程标识 进程ID 0是调度进程,常常被称为交换进程(swapper).该进程并不执行任何磁盘上的程序--它是内核的一部分,因此也被称为系统进程.进程ID 1是init进程,在自举(bootstr ...
随机推荐
- Linux性能优化实战学习笔记:第九讲
一.中断的魅力 1.中断在生活的魅力 比如你订了一份外卖,但是不确定外卖什么时候送到,也没有别的方法了解外卖的进度,但是,配送员送外卖是不等人的,到了你这儿没人取的话,就直接走人了.所以你指能苦苦等着 ...
- Maven 的 classifier 的作用
原文地址:https://blog.csdn.net/liupeifeng3514/article/details/79733655 直接看一个例子,maven中要引入json包,于是使用了: < ...
- 【MySQL】MariaDB10.3新特性--闪回查询
MariaDB10.3新特性--闪回查询 System-Versioned表特性的引入,可以对表进行闪回.完成类似于Oracle的闪回查询. 修改已有表为System-Versioned MariaD ...
- Ansible15:文件管理模块及Jinja2过滤器
目录 常用文件管理模块 1. file 2. synchronize 3. copy 4. fetch 5. lineinfile 6. stat 7. blockinfile Jinja2模板管理 ...
- 遇到 npm WARN npm npm does not support Node.js vx.x.x的解决办法
遇到如下警告 PS C:\Users\Administrator> npm npm WARN npm npm does not support Node.js v9.11.2 npm WARN ...
- Mysql系列(九)—— 性能分析explain执行计划
explain是mysql中sql优化的一个重要手段.顾名思义,explain就是解释sql,用于表示sql是怎样执行的信息,即sql执行计划! 语法 explain statement statem ...
- 【Python3爬虫】最新的12306爬虫
一.写在前面 我在以前写过一次12306网站的爬虫,当时实现了模拟登录和查询车票,但是感觉还不太够,所以对之前的代码加以修改,还实现了一个订购车票的功能. 二.主要思路 在使用Selenium做模拟登 ...
- 关于plupload组件无法拍照上传的解决方案
关于plupload组件无法拍照上传的解决方案 其实是由于文件大小的问题 filters: { max_file_size: '2mb',//把这个调大些就可以了 前提是服务器支持 prevent_d ...
- FrameworkCubeMX.gpdsc missing的问题
(1)上图红框内容均不要勾选 (2)工程中自己添加相应的启动文件,形如: startup_stm32f030x6.s system_stm32f0xx.c
- pip 命令安装 rdbtools
命令 pip install tdbtools 如果出现类似如下错误 Could not fetch URL https://pypi.org/simple/redis/ 说明morning的pip ...