ch1_系统启动_bootsect.s
创始人
2024-02-29 09:47:56
0

这里介绍, 操作系统启动中的 bootsect.S 文件

1. bootsect.s的作用概览

bootsect.s代码是磁盘引导块程序,驻留在磁盘的第一个扇区中(引导扇区,0磁道(柱面),0磁头,第一个扇区, 如图中的黄色区域)

在这里插入图片描述

图一, 启动时的三个模块

在PC机加电ROM BIOS自检后,ROM BIOS会把引导扇区代码bootsect加载到内存地址0x7C00开始处并执行之。

  1. 在bootsect代码执行期间,将自身的位置移动: bootsect.S 刚开始由BIOS 载入内存中的时候, 是放在内存ox7c00的地址处, 现在在执行的过程中, 他将位置移动到0x90000 处, 将原来的位置腾出来, 给其他人使用。

  2. bootsect.Ssetup.s 拷贝到内存中, 放在ox90200处,从磁盘第2个扇区开始的4个扇区是 setup.s模块 . bootsect.S0x90000 处占用了512KB 的大小, 表示成十六进制是2∗162+0∗161+0∗160=2002 * 16^2 + 0 * 16^1 + 0 * 16^0 = 2002∗162+0∗161+0∗160=200, 所以为了将setup.s 放在bootsect.S 的后面, 故放在往后移动的512 K个字节处。

然后利用BIOS中断 0x13 ,取磁盘参数表中当前启动引导盘的参数,接着在屏幕上显示“Loading system.”字符串

  1. bootsect.Ssystem 模块读入到内存的0x10000 处,随后确定根文件系统的设备号。
    若没有指定,则根据所保存的引导盘的每磁道扇区数判别出盘的类型和种类.
    并保存其设备号于 root_dev(引导块的508地址处),
    最后长跳转到setup程序的开始处(0x90200)执行setup程序。

1.1 移动自身位置

由BIOS读入内存绝对地址0x7C00处,当它被执行时就会把自己移动到内存绝对地址0X90000处。

; bootsect启动程序将它自身从内容0x07c00(BOOTSEG)处复制至内存0x9000(INITSEG)处
entry start            ;关键字entry告诉链接器"程序入口"
start:mov	ax,#BOOTSEG    ;BOOTSEG = 0x07c0 赋值给ax,mov	ds,ax          ;源地址mov	ax,#INITSEG    ;INITSEG = 0x9000 赋值给bxmov	es,ax		   ;目标地址mov	cx,#256        ;循环次数,每次循环完次数减一sub	si,si          ;清零sub	di,di          ;清零rep				   ;rep是repeat,rep配合 movw(movsb) 就是多次复制直到cx=0为止 复制的次数放在cx中movw               ;用于把内容从ds:si 复制es:di  以字位单位jmpi	go,INITSEG ;间接跳转 即程序跳到9000:0 去继续执行  CS=INITSEG,IP=go(偏移地址); 从这里开始cpu已经跳到内存0x90000去执行,
; BIOS把引导扇区加载到0x7c00处并把执行权交给引导程序,(ss=0x00,sp=0xfffe)
; 将ds,es,ss,都设置成移动后代码所在段(0x9000)
go:	mov	ax,cs          ;ax = cs = INITSEG = 0x9000mov	ds,ax          ;数据段地址mov	es,ax          ;附加段地址! put stack at 0x9ff00. ;将堆栈指针sp指向0x9fff00(0x9000:0xff00)mov	ss,ax           ;栈段地址
; 保证栈指针sp只要指向远大于512byte字节偏移(即地址0x90200)
; 因为在0x90200后要存放setup程序,大约为4个扇区 sp指向大于(0x200+0x200*4+堆栈大小)mov	sp,#0xFF00		! arbitrary value >>512  ! load the setup-sectors directly after the bootblock.
; 在bootsect程序紧跟着加载setup程序
! Note that 'es' is already set up.
; es在移动代码时设置好了指向目的地址0x9000

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...