Hello,DTOS!(下)
如何验证编写的主引导程序?
解决方案设计:
将汇编源码编译为二进制机器码(nasm)
创建虚拟盘(bximage)
将二进制代码写入虚拟盘起始位置(dd)
在虚拟机中将虚拟盘作为启动盘执行(vmware)
就算编译得到了二进制码,如何将二进制的机器码拿到硬件上面去执行呢?
因为没有操作系统,所以必须要使用实际的存储介质了,比方说光盘。将我们编译得到的二进制码刻录到光盘中,然后让计算机从光盘来启动。但是这样做太麻烦了。
需要使用一个简单的方法,此时虚拟机就可以派上用场了。既然是虚拟机,就干脆彻底一点,创建一个虚拟盘。让虚拟机去读取虚拟盘中的二进制码。这样的话,就方便了。
如何将编译得到的二进制码写到一张虚拟盘中?
可以使用dd命令进行完成
实验原材料
nasm
.nasm boot.asm -o boot.bin
bximage 创建虚拟软盘,-fd代表的就是创建的虚拟软盘,虚拟软盘的大小为1.44M,-q表示我们不需要进行交互,一次性创建出a.img就可以了。
.bximage a.img -q -fd -size=1.44
-dd 将二进制的机器码写入虚拟软盘
dd if=boot.bin of =a.img bs=512 count=1 conv=notrunc
if表示输入,输入就是我们编译得到的二进制机器码;
of表示输出,输出到a.img这个虚拟软盘上去;
bs表示我们写入时每个单元的大小,在这个地方我们只需要写512个字节就可以了。因此用count=1来指定一个512字节;
conv=notrunc表示连续的写入,不要有任何的间隔
以上就是实验所用到的命令。
总结:
主引导程序的代码量不能超过512字节
主引导程序需要使用汇编语言开发
主引导程序中可以通过BIOS中断使用硬件功能
主引导程序运行于实模式(地址都是实际的物理地址)
Hello,DTOS!(下)的更多相关文章
- C++程序结构---1
C++ 基础教程Beta 版 原作:Juan Soulié 翻译:Jing Xu (aqua) 英文原版 本教程根据Juan Soulie的英文版C++教程翻译并改编. 本版为最新校对版,尚未定稿.如 ...
- 【AutoMapper官方文档】DTO与Domin Model相互转换(下)
写在前面 AutoMapper目录: [AutoMapper官方文档]DTO与Domin Model相互转换(上) [AutoMapper官方文档]DTO与Domin Model相互转换(中) [Au ...
- 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 ...
- 程序员的自我救赎---12.2.3: 虚拟币交易平台(区块链) 下 【C#与以太坊通讯】
<前言> (一) Winner2.0 框架基础分析 (二)PLSQL报表系统 (三)SSO单点登录 (四) 短信中心与消息中心 (五)钱包系统 (六)GPU支付中心 (七)权限系统 (八) ...
- 从壹开始前后端分离【 .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应用的时候免不了要对数据进行分页,我最近在做asp.net core的开发的时候就遇到了这个需求,现在简单的记录一下: public class PaginatedList<T> ...
- 第2课 - Hello, DTOS!
第2课 - Hello, DTOS! 1. 主引导程序 主引导程序是软件还是固件?如果是软件,那么由谁开发?如何开发? (1)上一节说到了固件和软件的区别.由于主引导程序没有在出厂前固化到硬件中,因此 ...
随机推荐
- Html学习之十六(表格与表单学习--课程表制作)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- day54_9_18视图层某内部原理(fbv和cbv)与模板层
一.render内部原理. 在render中往往需要返回三个参数,request,模板和一些键值对. 键值对中存储的是需要对模板渲染的值. 如果手动实现可以如下: from django.templa ...
- Paper | Residual Dense Network for Image Super-Resolution
目录 Residual dense block & network 和DenseNet的不同 摘要和结论 发表在2018年CVPR. 摘要和结论都在强调方法的优势.我们还是先从RDN的结构看起 ...
- fiddler 抓取winform wcf包
修改客户端配置 <system.net> <defaultProxy> <proxy bypassonlocal="false" usesystemd ...
- 03Shell条件测试
条件测试 Shell 条件测试 格式 1: test 条件表达式 格式 2: [ 条件表达式 ] 格式 3: [[ 条件表达式 ]] 具体参数说明可以通过 man test 进行查看 文件测试 [ 操 ...
- Exercises for IN1900
Exercises for IN1900October 14, 2019PrefaceThis document contains a number of programming exercises ...
- Knative 基本功能深入剖析:Knative Serving 自动扩缩容 Autoscaler
Knative Serving 默认情况下,提供了开箱即用的快速.基于请求的自动扩缩容功能 - Knative Pod Autoscaler(KPA).下面带你体验如何在 Knative 中玩转 Au ...
- Python Jupyter 网站编辑器
Python Jupyter 网站编辑器 jupyter 是 python的网站编辑器可以直接在网页内编写python代码并执行,内置是通过ipython来调用的.很方便灵活. 安装 1.安装ipyt ...
- Node.js能解决什么问题?
一.使用Node.js能解决什么问题 对于PHP.JAVA.Python等服务端语言中,为每个客户端连接创建一个新的线程,而每个线程需要大约2M的内存,理论上,具有8GB内存的服务器可以同时连接的最大 ...
- ElasticSearch简介(一)——基础
基本概念 1. Node 与 Cluster Elastic 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elastic 实例. 单个 Elastic 实例称为一个节点 ...