ch1_系统启动_bootsect.s

news2024/11/24 7:24:12

这里介绍, 操作系统启动中的 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 ∗ 1 6 2 + 0 ∗ 1 6 1 + 0 ∗ 1 6 0 = 200 2 * 16^2 + 0 * 16^1 + 0 * 16^0 = 200 2162+0161+0160=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 赋值给bx
	mov	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 = 0x9000
	mov	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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/46321.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springboot+jsp学生心理健康测评网

基于JSP技术设计并实现了学生心理健康网。该系统基于B/S即所谓浏览器/服务器模式,应用SSM框架,选择MySQL作为后台数据库。系统主要包括个人中心、用户管理、知识分类管理、知识信息管理、心理测试管理、交流论坛、试卷管理、系统管理、考试管理等功能模块…

Redis实战——优惠券秒杀(超卖问题)

1 实现优惠券秒杀功能 下单时需要判断两点:1.秒杀是否开始或者结束2.库存是否充足 所以,我们的业务逻辑如下 1. 通过优惠券id获取优惠券信息 2.判断秒杀是否开始,如果未返回错误信息 3.判断秒杀是否结束,如果已经结束返回错误…

第十三章《集合》第2节:List集合

List这个单词意为“列表”,List类型的集合的特点是:元素呈线性排列,致密且有序。下面的图13-3展示了List类型集合的特点。 图13-3 List类型集合 图13-3中的每一个小圆形代表一个元素,可以看到,这些元素被放到List集合中后被排成一列,这就是“线性排列”。List集合中的元…

美国海运专线有哪些港口?美国海运专线有哪些路线?

随着全球物流的日益密切和跨境电商的活跃,跨境物流连接买卖双方的作用越来越重要。美国是中国亚马逊卖家的重要市场之一,那么美国海运专线有哪些港口?又有哪些路线?方联物流以亚马逊平台为例,跟大家聊聊美国海运专线那点事。美国海运专线有…

Android Studio Gradle相关

一、区分gradle version与gradle plugin version 参考博客 gradle是一个构建工具,理论上来说,它可以用来构建任何项目(如java项目,ios项目)。它可以与任何类型的IDE集成(如ecllipse,android st…

2023年上半年软考中级数据库系统工程师如何高效备考?难吗?

考试题型介绍: (1)基础知识,考试时间为150分钟,笔试,满分75分。45分及格。 (2)应用技术,考试时间为150分钟,笔试,满分75分。45分及格。 &#…

思维导图之设计原则

设计原则是指导我们代码设计的一些经验总结,对于某些场景下,是否应该应用某种设计模式,具有指导意义。 设计原则总结如下图所示:

[附源码]SSM计算机毕业设计学生互评的在线作业管理系统JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

pycare检测时间序列异常

1. 获取时间序列数据(官方文档是多特征,本文举例是单特征) 未安装pycaret的先安装:pip install --pre pycaret (也可以pip install pycaret) 2.用pycaret检测异常一般用pycaret.anomaly pycaret.anomaly…

七、【React-Router5】嵌套路由

文章目录1、实现效果2、嵌套路由规则3、修改上一节代码3.1、项目结构变更如下3.2、CODE3.2.1、Home.jsx3.2.2、Message.jsx3.2.3、News.jsx3.3、Result1、实现效果 2、嵌套路由规则 注册子路由时要写上父路由的path值路由的匹配是按照注册路由的顺序进行的 3、修改上一节代码…

SparkMlib 之决策树及其案例

文章目录什么是决策树?决策树的优缺点决策树示例——鸢尾花分类什么是决策树? 决策树及其集成是分类和回归机器学习任务的流行方法。决策树被广泛使用,因为它们易于解释,处理分类特征,扩展到多类分类设置,…

信号类型(雷达)——连续波雷达(二)

系列文章目录 《信号类型(雷达通信)》 《信号类型(雷达)——雷达波形认识(一)》 文章目录 目录 一、连续波雷达信号 1.1 单频雷达信号 1.2 调频连续波雷达 1.3 相位编码连续波雷达 1.4 多频连续波雷…

【AI学习笔记】TensorFlow GPU版本的安装(超详细)

安装步骤:1. 确认显卡是否支持CUDA2. 安装CUDA3. 安装cuDNN3.1 安装 cudnn3.2 将cudnn64_8.dll存放的位置加入Path环境变量4. 安装TensorFlow GPU版本4.1 在Anaconda建立TensorFlow GPU虚拟环境4.2 安装Tensorflow-gpu4.3 安装Keras总结1. 确认显卡是否支持CUDA 在…

【计算机】可信平台模块Trusted Platform Module - TPM

简述 Brief Introduction TPM内部功能模块示意图: 引述 Trusted Platform Module Technology Overview (Windows) | Microsoft Learn: Trusted Platform Module (TPM) technology is designed to provide hardware-based, security-related functions.…

速锐得解码理想汽车L8方向盘转向角度应用随动大灯照明升级

前日,速锐得解码了理想汽车L8车型,由于理想L8是新款车型,架构和理想L9十分相似,与理想ONE这一代有比较大的差异,这恰恰也是我们很好的一次学习机会,也让我们重新认识了理想汽车。 我这里,只挑有…

PCL 点云的法向量

一,点的法向量 点云法线 法向量的概念是很小的时候我们就已经说的,法向量是我们点云中一个非常重要的属性,诸如饿哦们常说的三维重建、点云分割,点云去噪 以及特种描述算法等。 特性: 点云中每一点的法向量夹角和曲率…

【即将开源】⽤于3D激光雷达SLAM闭环检测的词袋模型BoW3D

​以下内容来自从零开始机器人SLAM知识星球 每日更新内容 点击领取学习资料 → 机器人SLAM学习资料大礼包 #论文# BoW3D: Bag of Words for Real-time Loop Closing in 3D LiDAR SLAM 论文地址:https://arxiv.org/abs/2208.07473 作者单位:中国沈阳自动…

C++基础语法

cout输出 cin是键盘输入 //i input 输入 o output输出 stream流 输入输出流头文件&#xff08;类似stdio.h&#xff09; 2 #include <iostream> 3 4 //std(标准) 使用标准的命名空间using namespace std;//命名空间,此标识符作为此组群的名字 5 using namespace std; 6…

A*算法-Python实现

好久没有在CSDN上发文章了&#xff0c;快一年了吧。这两天重新登录了一下&#xff0c;不看不知道&#xff0c;一看吓一跳&#xff0c;没想到访问量快13万了。 之前写博客的时候&#xff0c;想着把一些有用的东西写下来&#xff0c;一方面是当做笔记了&#xff0c;免得以后忘记…

小程序数据请求的方式和注意事项

1.小程序中网络数据请求的限制 出于安全性方面的考虑&#xff0c;小程序官方对数据接口的请求做出了如下两个限制&#xff1a; ① 只能请求HTTPS类型的接口 ② 必须将接口的域名添加到信任列表中 2.配置request合法域名 假设要在自己的微信小程序中&#xff0c;希望请求某…