第5章 虚拟机的安装和使用

第5章 虚拟机的安装和使用

从本章开始,按照书籍的划分,第5章到第9章就进入实模式部分。关于实模式,我也建议阅读王爽的《汇编语言》,就是王爽的《汇编语言》采用的MASM编译器,风格和本书的NASM风格不太一样,知识点都是差不多的。

因为之前我有读过王爽的汇编语言,所以这几章相对来讲还是容易理解。

计算机的启动过程

如何将编译好的程序提交给处理器

该小结主要介绍了在不同的操作系统上,可执行文件都要按照操作系统的规定,在文件的开始部分增加编译日期、版本等信息,方便操作系统识别并执行。

但是在上一个章节有提到,通过 NASM 编译器编译的二进制文件是纯纯的机器语言(Machine Language)代码,没有加入任何操作系统的规定内容,所以是无法在操作系统上运行的。既然是纯纯的机器语言,那么直接让计算机执行

画个图就比较清楚了:

image

我们编写的汇编程序层级

从层级上来看,操作系统是封装的底层硬件设备的操作,并提供API给应用程序层使用。想想我们编写的汇编程序也是直接操作硬件设备,那么就可以直接让计算机执行了。

计算机的加电和复位

既然要让计算机执行我们编写的汇编程序,那要怎么执行呢?计算机执行程序的原理是什么?

本小节中介绍了计算机的加电和复位的原理,同时介绍了内存的特点,为后续小节基本输入输出系统做铺垫。

一些知识点:

  • 计算机加电和复位(Reset),CPU内寄存器会回复到初始状态。
  • 内存全称动态随机访问存储器(Dynamic Random Access Memory,DRAM),断电丢失数据

总结来看就是:不管计算机加电还是复位初始,内存中都没有数据,那么计算机从哪里开始执行指令?

基本输入输出系统

既然内存断电就没有数据,那么有没什么存储器可以长期存储程序,计算机启动的时候可以从这里开始执行指令?这个就是ROM(Read Only Memory)。

该小节介绍了ROM存储器和存储在ROM内的基本输入输出系统BIOS(Base Input Out System)。

一些知识点:

  • 8086 CPU 20根地址线的地址不全分配给内存,也分配给ROM-BIOS和其他设备。
  • 计算机一开始执行的时候就是从ROM开始执行的。
  • BIOS基础指令执行完成后,就可以通过 jmp 指令跳转到其他地方执行。

画了个示例图就更加容易理解了。

image

8086 CPU地址线分配

硬盘及其工作原理

书中介绍了硬盘的机械结构,而后引出了磁道(Track)、柱面(Cylinder)、扇区(Sector)、磁头(Head)概念。

书中是给二维的图,没有标注柱面,以前刚接触硬盘结构的时候也是头晕,自己尝试画了个立体的:

image

磁盘示例图

涉及到立体的样子,比较难画,各位看官蛮看看,意思能看明白就行。

磁盘读取数据是根据柱面(Cylinder)、磁头(Head)、扇区(Sector)进行读取的,简称CHS

  • 柱面定位盘片上的圆环,编号从0开始。
  • 磁头定位哪个盘片上的圆环,编号从0开始。
  • 扇区定位圆环上的圆弧,编号从1开始。

每次读取以扇区为单位进行读取,扇区包括:

  • 扇区头:每个扇区自己的信息,主要有磁道号、磁头号和扇区号等。
  • 数据区:512字节。

因为这种读取数据的方式比较复杂,后面都是用LBS(Logical Block Addressing),就是用逻辑地址对应CHS地址,这样就比较简单,书籍后面也有介绍,这里不多说了。

虽然现在固态硬盘大行其道,但是因为磁盘容量大、价格便宜,再加上保存时间久,所以也还是挺有市场的,适当了解还是有必要的哈。

一切从主引导扇区开始

该小节介绍了主引导扇区MBR(Master Boot Record)的概念和作用。

主引导扇区的概念:磁盘的第一个扇区(0柱0头1扇区),称为引导扇区。

书中第一个扇区叫法为 0面0道1扇区 和 0头0柱1扇区。
但个人更喜欢用 0柱0头1扇区 的方式,因为符合CHS的顺序。

主引导扇区的作用:计算机执行时,ROM-BIOS会从引导扇区读取内容,加载到内存地址0x7c00,而后处理器就从这里开始运行。

为什么是0x7c00?网上找到一篇文章,链接见文末,姑且了解下,大意就是说:

  • 早期的内存都是16KB、32KB、48KB和64KB。
  • 从软盘启动所需的最小内存量是32KB,软盘的第一个扇区会被加载到内存接近32KB末尾但稍微靠前的位置。32KB的地址就是0x8000。
  • 0x0500-0x7bff,BIOS至少会使用其中的一个字节作为打印屏幕标志。要避开这个区域,就用0x7c00了。

读完这个章节后,发现书籍并没有总结计算机的启动过程,于是自己总结了一下。

image

8086处理器加电启动过程
  1. 计算机启动后从ROM-BIOS开始执行。
  2. ROM-BIOS从磁盘主引导扇区读取内容并存入到内存0x7c00开始处。
  3. 跳转到0x7c00开始执行。

而后就是主引导程序的事情了。
实际计算机的启动过程会更加复杂,比如现在有UEFI替代BIOS,另外可以设置启动盘等,这里的总结更多是针对8086处理器的启动总结。

创建和使用虚拟机

别害怕,虚拟机是软件

该小节主要介绍了虚拟机(Virtual Machine, VM)的概念和用途。

概念:虚拟机是一款软件,用来模拟计算机的。

用途:研制防病毒软件、测试最新的系统、双系统、教学、学习用等。

我以前学习Linux的时候,就是用虚拟机来安装Linux进行学习的。后来Linux用熟练了,就把宿主机换成了Linux,因为有些软件在Linux上没有,又安装了个虚拟机装了个windows用。太囧了。

下载和安装Oracle VM VirtualBox

该小节主要介绍了虚拟机的安装和使用。

Virtual Box官网:https://www.virtualbox.org/

作者提供了另外一个文档来专门说明虚拟机的安装,照着操作即可了,主要注意点就是虚拟硬盘要选择 VHD(Virtual Hard Disk) 格式。

image

虚拟硬盘简介

该小节介绍了 VHD 文件的数据格式以及为什么要使用VHD文件格式和固定尺寸的原因。

根据书中介绍的数据格式,绘制如下图,方便理解:

image

VHD文件格式

备注:书中用0面0道n扇区的方式表达,个人不太适应,所以改成上图格式,其中:柱对应书中说的道;头对应书中说的面;

为什么要使用VHD文件格式和固定尺寸:因为VHD格式比较简单,通过前面章节可以知道我们的程序要运行就要写入虚拟磁盘,VHD格式容易写入。VirtualBox虚拟机也支持VHD格式。

练习使用FixVhdWr工具向虚拟硬盘写数据

该小节作者介绍了自己编写的虚拟硬盘写入工具 FixVhdWr 和 LBA(Logical Block Address)逻辑块地址。

FixVhdWr软件打开截图:

image

VHD 写入工具

膜拜一下大佬,确实牛B。

LBA:CHS模式读取磁盘比较复杂,用LBA比较简单。根据书中说明,每个LAB逻辑扇区对应着CHS一个扇区。

image

LBA逻辑扇区对应CHS扇区

CHS需要3个参数才能定位具体的扇区,LBA只要1个逻辑扇区号即可。

书中给出了LBA的计算公式,摘录在此:

LBA = C*磁头总数*每道扇区数+H*每道扇区数+(S-1)

其中:
    C:柱面(多个同位置的磁道构成柱面)
    H:磁头
    S:扇区号

本章习题

  1. 第1题

照着书本敲代码:
image

  1. 第2题

进入代码目录编译:

$ nasm -f bin .\demo.asm -o .\demo.bin -l .\demo.lst

写入虚拟硬盘:

image

将编译好的二进制文件写入到虚拟硬盘主引导扇区
  1. 第3题

使用virtual box运行

image

输出这个表示各种安装配置啥的都OK了。

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值