x86实模式到保护模式 李忠 王晓波
第3到4章
各个进制间的转换省略
实验环境
编译器 nasm
虚拟机 virtual box
小程序 hexview 观察编译后的机器代码
fixvhdwr 向虚拟硬盘写入数据
计算机启动简介
cpu的引脚 reset 接受复位信号 电平由低变高时 cpu进行硬件的初始化
cs的内容为0xffff 其余寄存器为0
内存 dram 随机访问存储器
rom 只读存储器 例如bios系统需要无电存储
8086 可以访问1m的空间 因为20位地址线
1m的空间从物理上分为00000-9ffff位内存使用 占据较低的640k空间
rom占用较低的64k 物理地址为f0000-fffff地址空间 而中间的一部分分为外围的部分板卡使用
注意一旦ip位0x000f 那么cs组合后形成的物理地址因为一处而变成00001 将回到1m内存的最低端
所以rom中位于物理地址0xffff0的地方 通常是一个跳转指令
硬盘介绍
硬盘分多个盘片 有中轴带动转动 上下两个盘面 分别有两个磁头 所有的磁头链接到机械臂上 当盘面转动时磁头每步进一次 都会在盘面上绕着中轴 画出一个圆圈 此为磁道 tarck 所有的磁头联动 所有盘面上的相同磁道组合在一起 形成一个虚拟的圆柱 称为柱面 cylinder
磁道 柱面 盘片 磁头都需要编号
磁头从0开始 磁道从0开始(最外圈) 盘片从1开始 (上下两个面)
每个磁道还分为扇区 编号从1开始每扇区512字节 为存储数据的最小单位
数据存取顺序:0磁头 0磁道写满后 再写1磁头0磁道 再2磁头0磁道 0好磁道组成的柱面写满后
再写0磁头1磁道 1号柱面写满后 依次顺延 写3好柱面
一切的开始从主引导扇区开始
rom将硬盘的主引导扇区的内容写到内存地址为0x0000:0x7c00的位置 然后jmp 0x0000:0x7c00 指令进行跳转
第5章
编写主引导扇区的代码