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 ...
随机推荐
- [LeetCode] 102. Binary Tree Level Order Traversal 二叉树层序遍历
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...
- Eclipse:设置自动补全,提高编程效率
一.设置自动补全 1.进入eclipse的window里的perferences页面 2.找到java->Editor->Content Assist设置界面 3.在Auto activa ...
- pgsql 的函数
因为pgsql中没有存储过程和包,所以类似功能通过函数来实现 PostgreSQL的存储过程简单入门 http://blog.csdn.net/rachel_luo/article/details/8 ...
- java包学习之IO
第一 java IO的专题 第二 编码 1.从桌面创建内容为“联”的txt,打开为乱码开始讲起,原因是我们的电脑默认是创建ansi编码的,但是“联”字比较特别,编码会被认为是utf-8的,所以会出现乱 ...
- ASP.NET Core基于微软微服务eShopOnContainer事件总线EventBus的实现
这个EventBus的实现是基于微软微服务https://github.com/dotnet-architecture/eShopOnContainers项目的,我把它从项目中抽离出来,打包成nuge ...
- java.lang.IllegalStateException: Received message from unsupported version: [5.2.2] minimal compatible version is: [5.6.0]
启动elasticsearch-6.2.2-Windows服务时报错: java.lang.IllegalStateException: Received message from unsupport ...
- Python课程第八天作业
第一题: 1.自定义一个 Fruit 类:该类有一个 类属性: identify:值为"水果",有两个对象属性: name,price:值由实例化对象时赋值,一个类方法: get_ ...
- Java学习:反射机制简介
反射机制是什么 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法: 对于任意一个对象,都能够调用它的任意一个方法和属性: 这种动态获取的信息以及动态调用对象的方法的功能称为ja ...
- ASP.NET Core 3.0 WebApi 系列【2】.Net Core 3.0+ CodeFirst + MySql 实现数据的迁移
写在前面 在前一小节中,我们创建了基于RESFULL风格的服务.这个小节,尝试使用CodeFirst+MySql 的方式实现数据迁移. 一.开发环境 [1]运行环境:win10 家庭版 [2]开发工具 ...
- C#利用newtonsoft.json读取.so配置文件内容
今天花 了点时间来使用 C#读取json文件 ,文件后缀为 .so文件 ,也是基于文件流的形式 获取 对象 ,然后解析; 之所以尝试 使用 json读取 ,是因为其配置文件的格式 更为友好 和方便,直 ...