鱼C论坛

 找回密码
 立即注册
查看: 2182|回复: 0

[学习笔记] X86汇编语言-从实模式到保护模式—笔记(2)

[复制链接]
发表于 2017-10-25 21:16:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 兰陵月 于 2017-12-5 21:56 编辑

第4章  虚拟机的安装和使用
4.1  计算机的启动过程
【4.1.1 如何将编译好的程序提交给处理器】
每种编译器都有能力针对不同的操作系统来生成不同格式的二进制文件,程序员所要做的,就是在源程序中加入一些相关的信息,比如指定每个段的开始和结束,并在编译时指定适当的参数。
在特定的操作系统上开发软件肯定不是一件容易的事。但换个角度考虑一下,操作系统也是一个需要在处理器上运行的软件,只不过比起一般的程序而言,体积更为庞大,功能更为复杂而已。如果我们能绕过它,或者代替它,让计算机一开机的时候直接执行我们自己的软件,这样就更简单了。
【4.1.2 计算机的加电和复位】
在处理器的众多引脚中,有一个是RESET,用于接受复位信号。每当处理器加电,或者RESET引脚的电平由低变高时,处理器都会执行一个硬件初始化,以及一个可选的内部自测试(Build-in Self-Test,BIST),然后将内部所有寄存器的内容初始到一个预置的状态。
对于Intel8086来说,复位将使代码段寄存器(CS)的内容为0xFFFFH,其他所有寄存器的内容都为0x0000,包括指令指针寄存器(IP)。8086之后的处理器并未延续这种设计,但毫无疑问,无论怎么设计,都是有目的的。
在内存中,每个比特的存储都是靠一个极其微小的晶体管,外加一个同样极其微小的电容来完成的,可以想象,这样微小的电容,其泄露电荷的速度当然也非常快。所以个人计算机中使用的内存需要定期补充电荷,这称为刷新,所以这种存储器也称为动态随机访问存储器(Dynamic Random Access Memory,DRAM)。
处理器的主要功能是取指令和执行指令,加电或者复位之后,它就会立刻尝试去做这样的工作。但在内存刷新期间,处理器将无法访问它。而且当内存断电之后,所有保存的内容都会统统消失。所以每当处理器加电或者复位之后,它无法从内存中取得任何指令。
【4.1.3 基本输入输出系统】
Intel8086可以访问0x00000-0xFFFFFH这1MB的内存空间,计算机系统的设计者将这1MB的内存空间从物理上划分为几个部分。
8086有20跟地址总线,但并非全部用来访问DRAM即内存条。除了大部分访问DRAM外,剩余的部分给了只读存储器ROM和外围的板卡。内存条部分地址范围为00000-9FFFF,ROM部分为F0000-FFFFF。
ROM(Read Only Memory,ROM)不需要刷新,它的内容是预先写入的,即使掉电也不会消失,但也很难改变。可以将一些程序指令固化在ROM中,使处理器在每次加电时都自动执行。
ROM占据着整个内存空间顶端的64KB,物理地址范围是0xF0000~0xFFFFF。里面固化了开机时要执行的指令;DRAM占据着较低端的640KB,地址范围是0x00000~0x9FFFF;中间还有一部分,分给了其他外围设备。如下图

8086处理器加电或者复位时,CS=0xFFFF,IP=0x0000,所以,它的第一条指令位于物理地址0xFFFF0,正好位于ROM中,那里固化了开机时需要执行的指令。
从FFFF0到FFFFF只有16个字节,执行不了多少指令,一旦IP溢出,比如IP=11H,则指令将会跳到1MB内存的最低端。因此,ROM中位于物理地址0xFFFF0的地方,通常是一个跳转指令,它通过改变CS和IP的内容,使处理器从ROM中的较低地址处开始取指令执行。跳转指令是jmp。
ROM芯片中的内容包括很多部分,主要是进行硬件的诊断、检测和初始化。还负责提供一套软件例程,让人们在不必了解硬件细节的情况下从外围设备获取输入数据,或者向外围设备输出数据。ROM芯片只针对最基本的、对重要的设备,软件例程也只包含最基本、最常规的功能。因此这块芯片又叫基本输入输出系统(Base Input & Output System,BIOS)ROM。
ROM-BIOS的容量是有限的,当它完成自己的使命后,最后所要做的,就是从辅助存储设备读取指令数据,然后转到那里开始执行。
【4.1.4 硬盘及其工作原理】
硬盘属于外存储器,是多盘片、密封、高转速的,采用铝合金作为基片,并在表面涂上磁性物质来记录二进制位。有只有一个盘片的单碟硬盘,也有有好几个盘片的多碟硬盘。
硬盘转速一般来说可以达到每分钟3600转或者7200转。这个速度叫做转/分钟(Round Per Minmute,RPM)
硬盘每个盘片都有两个磁头(Head),上面一个,下面一个。磁头都有编号,第1个盘片,上面的磁头编号为0,下面的磁头编号为1,第2个盘片,上面的磁头编号为2,下面的磁头编号为3,以此类推。
每个磁头都不是单独移动的,相反,他们都同构磁头臂固定在同一个支架上,由步进电机带动着一起在盘片的中心和边缘之间来回移动。磁头前进或者后退就形成了虚拟的圆柱,称为柱面。柱面也有编号,从最边缘开始向着圆心的方向,从0开始编号。
磁道还进一步划分为扇区,每条磁道能够划分为几个扇区,取决于磁盘的制造者,但通常为63个。而且每个扇区都有编号,扇区的编号从1开始。扇区于扇区之间以间隙(空白)间隔开来,每个扇区以扇区头开始,然后是512个字节的数据区。扇区头包含了每个扇区自己的信息,主要有本扇区的磁道号、磁头号和扇区号,用来供磁盘定位机构使用。现代的硬盘还会在扇区头部包括一个指示扇区是否健康的标志,以及用来替换该扇区的扇区地址。用于替换扇区的,是一些保留和隐藏的磁道。
【4.1.5 一切从主引导扇区开始】
硬盘的第一个扇区是0头0柱1扇区,这个扇区称为主引导扇区。如果计算机的设置是从硬盘启动,那么,ROM-BIOS将读取硬盘主引导扇区的内容,将它加载到内存地址0x0000:0x7c00处(也就是物理地址0x07c00),然后用一个jmp指令跳到那里接着执行:
jmp 0x0000:0x7c00
通常,主引导扇区的功能是继续从硬盘的其他部分读取更多内容加以执行。像Windows这样的操作系统,就是采用这种接力的方法一步一步把自己运行起来的。
4.2  创建和使用虚拟机
【4.2.1 别害怕,虚拟机是软件】
【4.2.2 下载和安装Oracle VM VirtualBox】
【4.2.3 虚拟硬盘简介】
【4.2.4 练习使用FixVhdWr工具向虚拟硬盘写数据】
硬盘是块设备。
采用磁头、磁道和扇区这种模式来访问硬盘的方法称为CHS模式,但不是很方便。后来引入了逻辑块地址LBA模式。LBA模式由硬盘控制器在硬件一级上提供支持,所以效率很高,兼容性很好。
LBA=C×磁头总数×每道扇区数+H×每道扇区数+(S-1)
LBA是逻辑扇区号,C、H、S是想求得逻辑扇区号的那个物理扇区所在的磁道、磁头和扇区号。
LBA模式简化了程序的操作,使得程序员不用关心数据在硬盘上的具体位置。

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-17 06:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表