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

首先编译源文件(我的源文件就在当前路径下,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

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

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

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

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

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

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

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

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

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

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

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

第2步:分配内存大小

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

第3步:选择数据文件

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

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

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

最后点击【完成】;

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

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

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

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

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

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

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

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

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

好了,今天就到这里,下次再见

8086实时时钟实验(二)——《x86汇编语言:从实模式到保护模式》读书笔记06的更多相关文章

  1. 8086实时时钟实验(一)——《x86汇编语言:从实模式到保护模式》05

    1.代码清单 ;代码清单9-1 ;文件名:c09_1.asm ;文件说明:用户程序 ;创建日期:2011-4-16 22:03 ;=================================== ...

  2. 8086键盘输入实验——《x86汇编语言:从实模式到保护模式》读书笔记07

    1.BIOS中断 我们可以为所有中断类型自定义中断处理过程,包括内部中断.硬件中断和软中断. BIOS中断,又称BIOS功能调用,主要是为了方便地使用最基本的硬件访问功能.通常,为了区分针对同一硬件的 ...

  3. 进入保护模式(二)——《x86汇编语言:从实模式到保护模式》读书笔记14

    首先来段题外话:之前我发现我贴出的代码都没有行号,给讲解带来不便.所以从现在起,我要给代码加上行号.我写博客用的这个插入代码的插件,确实不支持自动插入行号.我真的没有找到什么好方法,无奈之下,只能按照 ...

  4. 16位模式/32位模式下PUSH指令探究——《x86汇编语言:从实模式到保护模式》读书笔记16

    一.Intel 32 位处理器的工作模式 如上图所示,Intel 32 位处理器有3种工作模式. (1)实模式:工作方式相当于一个8086 (2)保护模式:提供支持多任务环境的工作方式,建立保护机制 ...

  5. 存储器的保护(一)——《x86汇编语言:从实模式到保护模式》读书笔记18

    本文是原书第12章的学习笔记. 说句题外话,这篇博文是补写的,因为让我误删了,可恶的是CSDN的回收站里找不到! 好吧,那就再写一遍,我有坚强的意志.司马迁曰:“文王拘而演<周易>:仲尼厄 ...

  6. 进入保护模式(三)——《x86汇编语言:从实模式到保护模式》读书笔记17

    (十)保护模式下的栈 ;以下用简单的示例来帮助阐述32位保护模式下的堆栈操作 mov cx,00000000000_11_000B ;加载堆栈段选择子 mov ss,cx mov esp,0x7c00 ...

  7. 硬盘和显卡的访问与控制(一)——《x86汇编语言:从实模式到保护模式》读书笔记01

    本文是<x86汇编语言:从实模式到保护模式>(电子工业出版社)的读书实验笔记. 这篇文章我们先不分析代码,而是说一下在Bochs环境下如何看到实验结果. 需要的源码文件 第一个文件是加载程 ...

  8. ASM:《X86汇编语言-从实模式到保护模式》第10章:32位x86处理器的编程架构

    ★PART1:32位的x86处理器执行方式和架构 1. 寄存器的拓展(IA-32) 从80386开始,处理器内的寄存器从16位拓展到32位,命名其实就是在前面加上e(Extend)就好了,8个通用寄存 ...

  9. 存储器的保护(三)——《x86汇编语言:从实模式到保护模式》读书笔记20

    存储器的保护(三) 修改本章代码清单,使之可以检测1MB以上的内存空间(从地址0x0010_0000开始,不考虑高速缓存的影响).要求:对内存的读写按双字的长度进行,并在检测的同时显示已检测的内存数量 ...

随机推荐

  1. Django不能使用ip方式访问的解决办法

    问题: 启动服务后,使用http://127.0.0.1:8000/showcase/或者http://localhost:8000/showcase/都能访问, 但是使用http://192.168 ...

  2. C# System.Threading.Timer 定时器

    前提: 需要引入  System.Threading: 描述: 在很多时间我们都需要进行延迟执行,或是定时执行一些指定业务,这个时候使用 Timer 是最合适的,而且 Timer 是Cpu 级别处理对 ...

  3. ulua

    unity窗口 lua -> Gen LuaWrap + Binder 生成Wrap文件 此类脚本是对Unity中常用的组件进行二次包装 Lua运行后 会把Wrap文件加载到Lua运行环境中 使 ...

  4. 新建项目下的web文件夹下的dynamic web project和static web project和web fragment project的区别

    dynamic web project是Eclipse的项目,与其对应的有static web project,前者指动态web项目,包含一些动态代码,如java:而static web projec ...

  5. vs2015+opencv3.3.1+ c++实现 静态背景下多运动目标提取,检测

    静止背景下运动物体的提取,跟踪出运动轨迹 下载地址 https://download.csdn.net/download/li_haoren/10761361 1.两遍扫描法得到第n帧的连通域,分离出 ...

  6. C# 接口(2)

    接口的实现方式. 接口的实现分两种: 1 显示实现接口 2 实现接口. 我们前面所得的接口的实现均为实现接口.也就是第二种方式.那么我们来来看第第一种实现方式: interface IHuman { ...

  7. 《Think in Java》

    chapter 1 对象导论 面向对象程序设计(Object-oriented Programming ,OOP) chapter 2 一切都是对象 字段和方法 若类的某个成员变量是基本数据类型,即是 ...

  8. tcp连接过程中的三次握手和四次挥手

    在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手握手建立连接 @第一次握手: 建立连接是,客户端A发送SYN包到服务器B,并进入SYN_SEND状态,等待B确认. @第二次握手: 服务 ...

  9. [Swift实际操作]九、完整实例-(3)创建和安装开发证书、发布证书及开发证书配置文件、发布证书配置文件

    本文将为你演示,如何创建开发证书和发布证书,以及其他辅助内容.首先打开浏览器,进入[苹果开发者网站]输入[Apple ID]和[密码],点击登录按钮,进入开发者管理后台. 点击左侧的[Membersh ...

  10. 解决 Github用户名 变为 invalid-email-address 问题

    解决 Github用户名 变为 invalid-email-address 问题 If the identity used for this commit is wrong, you can fix ...