8086架构从BIOS到Bootloader

8086内存架构分布:
在这里插入图片描述
当8086加电或复位时,发出的第一条指令为FFFF0,位于第一个区域,访问的是ROM芯片。

在ROM中还固化了一些程序供我们写操作系统的时候调用,它包括了对键盘的使用程序,对鼠标的使用程序,以及对显示的输入,输出。我们可以对这些程序进行调用。

继续上面,我们说,第一条指令跳转到FFFF0处,实际上这一处内存地址存放的是一条JUMP指令,用来进行地址的跳转,。用汇编代码来书写的话就是

JMP 段地址:偏移地址(8086架构)

在8086架构下,加电或复位(reset)之后,除了CS段寄存器以外,所有的寄存器都被初始化为0
在这里插入图片描述
然后通过对CS左移4位变成FFFF0再加上IP的值形成一个地址FFFF0,再到取指令执行,执行JUMP指令的时候,通过描述段地址和偏移地址来修改CS寄存器和IP寄存器的值。

因此,加入刚刚跳转的FFFF0处后面跟的指令是下图所示的F000和E05B的话,那么对应的CS段寄存器的值和指令指针寄存器IP的值就是F000和E058,因此可以得到一个新的地址FE05B,然后将这个新的内存地址通过20根地址线传送到内存去取新指令。

在这里插入图片描述
这个地址对应的仍然是ROM的内容,里面固化了开机诊断、检测和初始化的程序。然后从该位置继续向高地址执行。

ROM的容量小,必须让计算机离开ROM的环境,所以在ROM中还固化了从硬盘或U盘中读取程序,然后放进内存继续执行。通常操作系统的代码就放在了U盘或硬盘之中。

在ROM执行的最后阶段,会使用一段代码,将硬盘的主引导扇区读到0x7C00的位置。在这里插入图片描述
这个时候可以使用JMP 0x0000:0x7c00来对内存进行跳转,使得内存跳转到0x7c00的位置来执行从硬盘中读过来的代码,当进行完这一步之后,硬盘的主引导扇区会继续将硬盘中的操作系统的代码读入内存中,直到将操作系统都运行到内存中。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45394002/article/details/114650679