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)上一节说到了固件和软件的区别.由于主引导程序没有在出厂前固化到硬件中,因此 ...
随机推荐
- Centos 7 LAMP+wordpress
一.简介 LAMP--->Linux(OS).Apache(http服务器),MySQL(有时也指MariaDB,数据库) 和PHP的第一个字母,一般用来建立web应用平台. 它是 ...
- day52_9_16Django中的静态文件和orm
一.静态文件配置 在配置静态文件时,需要创建一个文件夹在Django项目文件夹下,名字与使用无关. 静态文件包括html等使用的不会变动的插件文件等.分为三个部分: css文件夹 当前网站所有的样式文 ...
- sql 以某个字段分组,另一个字段为参加比较的列,取得前n项的值
假设表A有三个字段 { id int: subject varchar(20): socre int: } 语句为 select * from A x where (select count(*) ...
- 10.12 csp-s模拟测试70 木板+打扫卫生+骆驼
T1 木板 求$[\sqrt{n},n)$间有多少个数的平方是n的倍数 通过打表可以发现(我没带脑子我看不出来),符合条件的数构成一个等差数列,公差为首项 而首项就是将n质因数分解后每个质因数出现次数 ...
- C# HTTP系列 HttpWebRequest 与 HttpWebResponse
HTTP协议,即超文本传输协议(Hypertext transfer protocol).是一种详细规定了浏览器和万维网(WWW = World Wide Web)服务器之间互相通信的规则,通过因特网 ...
- jdk自带监控程序jvisualvm的使用
监控小程序的配置 生产环境tomcat的配置 编辑应用所在的tomcat服务器下的bin目录下的catalina.sh文件,修改如下: 配置如下内容: export JAVA_OPTS="- ...
- 【shell脚本】批量修改扩展名===modifyExtension.sh
前提:需切换到需要批量修改扩展名的目录下,运行脚本 [root@VM_0_10_centos shellScript]# cat modifyExtension.sh #!/bin/bash # 编写 ...
- .NET Core 学习笔记之 WebSocketsSample
1. 服务端 代码如下: Program: using Microsoft.AspNetCore; using Microsoft.AspNetCore.Hosting; namespace WebS ...
- java架构之路(多线程)JMM和volatile关键字
说到JMM大家一定很陌生,被我们所熟知的一定是jvm虚拟机,而我们今天讲的JMM和JVM虚拟机没有半毛钱关系,千万不要把JMM的任何事情联想到JVM,把JMM当做一个完全新的事物去理解和认识. 我们先 ...
- SQL Server温故系列(0):导航目录
创建本系列博文通用库表及数据的 SQL 语句:下载 SQL Server温故系列(0):导航目录 SQL Server温故系列(1):SQL 数据操作 CRUD 之增删改合 SQL Server温故系 ...