zoukankan      html  css  js  c++  java
  • 8086实时时钟实验(二)——《x86汇编语言:从实模式到保护模式》读书笔记06

    上次我们说了代码,这次我们说说怎样看到实验结果。

    首先编译源文件(我的源文件就在当前路径下,a盘和c盘在上一级目录下):

    nasm -f bin c08_mbr.asm -o c08_mbr.bin
    nasm -f bin c09_1.asm -o c0901.bin

    然后将bin文件写入a盘和c盘

    dd if=c08_mbr.bin of=../a.img

    dd if=c0901.bin of=../c.img bs=512 seek=100 conv=notrunc

    注意:也许你需要根据自身的情况修改路径

    好了,运行Bochs

    可是结果令人失望,不管我怎么尝试,都看到了如下的图

    bochs_fail

    只能看到屏幕中间的“@”在闪烁,可是根本看不到时间。

    哭泣的脸哭泣的脸哭泣的脸

    我也试图调试一下,在中断处理程序里面打了断点,可是中断似乎进不去。

    无法运行出正确的结果,也许不是我们错了,或许是工具的问题。毕竟我用的是win7+vmware+ubuntu+bochs,而不是一个真实的环境。

    好吧,既然这条路走不通,那我就换一条路吧。是不是vmware的问题呢?那我们用virtualBox试一试。

    于是,我打造了win7+virtualBox+ubuntu+bochs,可是和上面的结果完全一样,还是失败了。看来不是vmware的问题。

    真的是山穷水尽了吗?我又想了一个方法,就是作者在第四章推荐的方法,virtualBox+VHD文件;

    说干就干,首先,我们需要在virtualBox上创建一台虚拟机。

    第1步:启动VirtualBox,点击【新建】

    vb-1

    图中的名称是自己起的,我的叫“hello_asm”;

    类型和版本也不重要,很多人都会误解,以为VirtualBox会根据我们的选择来安装一个现成的操作系统。其实,并不是这样,让我们选择操作系统的唯一目的,就是根据我们的选择,在后面的步骤中为我们提供合理的硬件配置。实际上,我们不打算安装任何操作系统,所以,我选择了Other。好的,我们点击【下一步】;

    第2步:分配内存大小

    vb-2

    内存大小就根据自己主机的物理内存来配置吧,这里我选了512M,然后点击【下一步】;

    第3步:创建虚拟硬盘(或者用作者提供的)

    vb-3

    这里可以用作者提供的VHD文件,也可以自己创建。为了不失一般性,我们选择‘现在创建虚拟硬盘’,点击【创建】

    第4步:选择虚拟硬盘的文件类型

    vb-4

    这里一定要选择VHD,因为我们打算用作者提供的工具(fixvhdwr.exe),然后点击【下一步】;

    第5步:选择虚拟硬盘的类型

    vb-5

    一定要选择“固定大小”,因为本书的配套工具只支持固定大小的。然后点击【下一步】

    第6步:选择虚拟硬盘的位置和大小

    vb-6

    VHD文件位置是自己设置的,一定要放在一个你可以找到的地方。其实,放在作者提供的配书工具所在的文件夹是最方便的。我这里放在D盘。

    另外,还要选择虚拟硬盘的大小,我选了2GB;作者的要求是,一定要大于50MB大笑,然后点击【创建】;

    通过以上6步,我们的虚拟硬盘就创建好了。

    下面的任务是把我们的bin文件写入虚拟盘,最后看一下结果。

    第1步:打开作者的配书工具——fixvhdwr.exe

    vb-8

    第2步:选择虚拟磁盘文件

    vb-9

    找到我们刚才保存虚拟硬盘的目录,选择哪个VHD文件,然后【下一步】;

    vb-10

    第3步:选择数据文件

    vb-11

    找到我们编译好的c08_mbr.bin文件

    第4步:设置起始LBA扇区号,并写入文件

    vb-12

    因为是启动文件,所以我们选择0,然后点击【写入文件】;之后可以看到:

    vb-13

    最后点击【完成】;

    通过上面4个步骤,我们就把一个.bin文件写入VHD文件了。

    用同样的方法,我们可以把c0901.bin(用户程序)写入逻辑扇区100(起始逻辑扇区号一定要和代码中的保持一致);

    下面,我们启动虚拟机,看看结果吧:

    vb-14

    启动虚拟机,我们终于看到了屏幕中央闪烁的时间!

    经过上面的折腾,我觉得不是VMware的问题,也不是VirtualBox的问题,很可能是Bochs的问题!

    心血来潮,我想到了我安装的Bochs不是最新版本,也许我可以弄个最新版本试一试。

    于是我在VMware上安装了Bochs-2.6.8,按照以前的方法,得出的结果又惊喜又困惑,请看图:

    2.6.8_result

    看到了吗?屏幕中央有时间了!

    遗憾的是,这个时间跳动得太快了,也就是说这个时钟走得特别快,根本不是每秒一次的更新频率。我想这还是Bochs的问题吧。

    好了,今天就到这里,下次再见吐舌鬼脸

  • 相关阅读:
    Leetcode Excel Sheet Column Number
    AlgorithmsI PA2: Randomized Queues and Deques Subset
    AlgorithmsI PA2: Randomized Queues and Deques RandomizedQueue
    AlgorithmsI PA2: Randomized Queues and Deques Deque
    AlgorithmsI Programming Assignment 1: PercolationStats.java
    hdu多校第四场 1003 (hdu6616) Divide the Stones 机智题
    hdu多校第四场 1007 (hdu6620) Just an Old Puzzle 逆序对
    hdu多校第四场1001 (hdu6614) AND Minimum Spanning Tree 签到
    hdu多校第三场 1007 (hdu6609) Find the answer 线段树
    hdu多校第三场 1006 (hdu6608) Fansblog Miller-Rabin素性检测
  • 原文地址:https://www.cnblogs.com/longintchar/p/5224410.html
Copyright © 2011-2022 走看看