zoukankan      html  css  js  c++  java
  • 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中断使用硬件功能
    主引导程序运行于实模式地址都是实际的物理地址

  • 相关阅读:
    【LOJ】#2888. 「APIO2015」巴邻旁之桥 Palembang Bridges
    【AtCoder】ARC099题解
    【LOJ】#2265. 「CTSC2017」最长上升子序列
    【LOJ】#2264. 「CTSC2017」吉夫特
    【AtCoder】AGC028 (A-E)题解
    【AtCoder】ARC100 题解
    【AtCoder】ARC101题解
    【AtCoder】AGC026 题解
    【LOJ】 #2308. 「APIO2017」商旅
    【BZOJ】3456: 城市规划(多项式求ln)
  • 原文地址:https://www.cnblogs.com/-glb/p/11701274.html
Copyright © 2011-2022 走看看