第二章 编写MBR,开始进入系统的世界
本文最后更新于:1 年前
第二章 编写MBR,开始进入系统的世界
写在前面
今天是7月6日,这一章涉及了汇编语言,阅读开始变得吃力,加上书中排版密密麻麻的文字,很容易心生退意,相信在开发的过程中一定会有些许乐趣等待挖掘,借此博客督促自己加强学习。
Let`s go! BIOS!
首先说明了计算机启动后第一个运行的程序是我们常见的BIOS,然后为了说明BIOS加载的一系列问题,作者列出了实模式下内存布局的一张表用以说明CPU提交地址后会进行一个地址映射,分配给对应的物理设备。
然后就是BIOS的启动,在接电的瞬间,CPU中的cs:ip寄存器会被初始化为0xF000:0xFFF0(关于寄存器的一些概念涉及到汇编语言,这里不再赘述,我也是边读边学的),这段地址正好对应BIOS的入口地址。需要注意的是,这块地址只起到一个指引的作用,计算机执行它时需要跳转到BIOS的真正地址。
在BIOS里的最后一项工作时校验启动盘0盘0道1扇区(第一个扇区)的内容,如果该扇区末尾的两个字节分别是魔数0x55和0xaa,BIOS便会跳转到物理地址0x7c00,执行MBR(主引导记录)。
我还想了下魔数是什么,一开始以为是计算机固定写死的某些程序,搜了一下才知道它是像魔法一样神奇的数。。。
MBR
MBR的大小是512字节,因为x86平台是小端字节序,所以为了保证最后两个字节(即510字节和511字节)为0x55和0xaa,其内容应为0xaa55。然后提到了NASM的两个关键字$和$$,它们用来表示当前行和本section的地址,起到标号的作用。
终于来到了MBR的编程,这一程序目前实现了一个在屏幕上打印字符串“1 MBR”的功能,其背景色为黑色,前景色为绿色。在打印字符串之前,还包含了不少代码,其功能不再解释。
1 |
|
之后我们利用dd命令(用于磁盘操作的命令)将mbr.bin输出到第一章我们创建的虚拟硬盘hd60M.img,记得按照作者提示,将块大小指定为512字节,只操作1块。
运行bochs,界面是我们预想的输出一串字符串,大功告成!
后记
这一章总体内容并不是很多,主要集中在一些概念的描述,如果没有一定的知识储备读起来会很生涩,但是到了实际操作的时候就会发现基础必不可少。总体来说有一种学到的知识马上就能用到的感觉,比之前读ostep时总感觉有一层纱布隔着的感觉有很大不同,接下来还是争取做到每天一更。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!