计算机启动

按下主机上的 power 键后,第一个运行的软件是 BIOS,BIOS 全称叫 Base Input & Output System,即基本输入输出系统。

在这里插入图片描述

(8086的1MB内存)

地址 0~0x9FFFF 处是 DRAM,顶部的 0xF0000~0xFFFFF,这 64KB 的内存是 ROM。

BIOS 本身是个程序,程序要执行,就要有个入口地址才行,此入口地址便是 0xFFFF0。

BIOS 的主要工作是检测、初始化硬件,怎么初始化的?硬件自己提供了一些初始化的功能调用,BIOS 直接调用就好了。BIOS 还做了一件伟大的事情,建立了中断向量表,这样就可以通过“int 中断号”来实现相关的硬件调用,当然 BIOS 建立的这些功能就是对硬件的 IO 操作,这就是 BIOS 称为基本输入输出系统的原因。

(1)它是由谁加载的。
(2)它被加载到哪里。
(3)它的 cs:ip 是谁来更改的。

在开机的一瞬间,也就是接电的一瞬间,CPU 的 cs:ip 寄存器被强制初始化为 0xF000:0xFFF0。

既然此处只有 16 字节的空间了,这只能说明 BIOS 真正的代码不在这,那此处的代码只能是个跳转
指令jmp far f000:e05b,即跳向了 0xfe05b 处,这是 BIOS 代码真正开始的地方。

接下来 BIOS 便马不停蹄地检测内存、显卡等外设信息,当检测通过,并初始化好硬件后,开始在内
存中 0x000~0x3FF 处建立数据结构,中断向量表 IVT 并填写中断例程。

BIOS 最后一项工作校验启动盘中位于 0 盘 0 道 1 扇区的内容,此扇区末尾的两个字节分别是魔数 0x55 和 0xaa,BIOS 便认为此程序便是主引导记录 MBR,便加载到物理地址 0x7c00。

为什么是0x7c00

按 DOS 1.0 要求的最小内存 32KB 来说,MBR 希望给它尽可能多的预留空间,这样也是保全自己
的作法,免得过早被覆盖。所以 MBR 只能放在 32KB 的末尾。
MBR 本身也是程序,是程序就要用到栈,栈也是在内存中的,MBR 虽然本身只有 512 字节,但还要为其
所用的栈分配点空间,所以其实际所用的内存空间要大于 512 字节,估计 1KB 内存够用了。
结合以上三点,选择 32KB 中的最后 1KB 最为合适,
那此地址是多少呢?32KB 换算为十六进制为 0x8000,减去 1KB(0x400)的话,等于 0x7c00。这就是倍受质疑的 0x7c00 的由来,这下清楚了。可见,加载 MBR 的位置取决于操作系统本身所占内存大小和内存布局。

MBR 的大小必须是 512 字节,mbr在8086实模式中运行,这在微机原理中学得很详细,这里不再赘述。

实模式的“实”体现在:程序中用到的地址都是真实的物理地址,“段基址:段内偏移”产生的逻辑地址就是物理地址。8086之前是程序加载到固定位置,也就是程序员看到的完全是真实的内存。开发人员等不及了,干脆把程序中的地址改成别的吧,重新编译后发现还是有某个地址被占用,还是没法上 CPU 运行,怎么办?再改地址……

;mbr.S
;主引导程序 
;
;LOADER_BASE_ADDR equ 0xA000 
;LOADER_START_SECTOR equ 0x2
;------------------------------------------------------------
SECTION MBR vstart=0x7c00         mov ax,cs      mov ds,axmov es,axmov ss,axmov fs,axmov sp,0x7c00mov ax,0xb800mov gs,ax; 清屏
;利用0x06号功能,上卷全部行,则可清屏。
; -----------------------------------------------------------
;INT 0x10   功能号:0x06	   功能描述:上卷窗口
;------------------------------------------------------
;输入:
;AH 功能号= 0x06
;AL = 上卷的行数(如果为0,表示全部)
;BH = 上卷行属性
;(CL,CH) = 窗口左上角的(X,Y)位置
;(DL,DH) = 窗口右下角的(X,Y)位置
;无返回值:mov     ax, 0600hmov     bx, 0700hmov     cx, 0               ; 左上角: (0, 0)mov     dx, 184fh	       ; 右下角: (80,25),; 因为VGA文本模式中,一行只能容纳80个字符,共25行。; 下标从0开始,所以0x18=24,0x4f=79int     10h                 ; int 10h; 输出背景色绿色,前景色红色,并且跳动的字符串"1 MBR"mov byte [gs:0x00],'1'mov byte [gs:0x01],0xA4     ; A表示绿色背景闪烁,4表示前景色为红色mov byte [gs:0x02],' 'mov byte [gs:0x03],0xA4mov byte [gs:0x04],'M'mov byte [gs:0x05],0xA4   mov byte [gs:0x06],'B'mov byte [gs:0x07],0xA4mov byte [gs:0x08],'R'mov byte [gs:0x09],0xA4jmp $		       ; 通过死循环使程序悬停在此times 510-($-$$) db 0db 0x55,0xaa

运行结果:

在这里插入图片描述

:学习笔记,整理操作系统真象还原

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AR急诊急救大平台远程专家会诊方案

随着AR技术的完善,在医院急救中,需要及时把各方面专家汇在一起会诊,在AR这方面有数据采集清晰,资料呈现方便便捷,针对客户需要,我们对业务需求分析,比较市面多种产品,把会议&#xf…

【OpenCV DNN】Flask 视频监控目标检测教程 10

欢迎关注『OpenCV DNN Youcans』系列,持续更新中 【OpenCV DNN】Flask 视频监控目标检测教程 10 3.10 OpenCV DNNFlask实时监控目标检测1、加载MobileNet SSD模型2、导入分类名称文件3、处理视频帧进行目标检测4、新建一个Flask项目5、Python 程序文件6、视频流的网…

如何使用KoodousFinder搜索和分析Android应用程序中的安全威胁

关于KoodousFinder KoodousFinder是一款功能强大的Android应用程序安全工具,在该工具的帮助下,广大研究人员可以轻松对目标Android应用程序执行安全研究和分析任务,并寻找出目标应用程序中潜在的安全威胁和安全漏洞。 账号和API密钥 在使用该工具之前,我们首选需要访问该…

np.averag的运算规则

今天写代码的时候,计算加权平均,一直没有搞懂np.average是怎么运算的,做个笔记记录一下: 创建一个(3,4,5)维度的np数组,然后在创建一个[1,0.5,1]的权重数组,计算他们的加权平均&…

6月人工智能论文推荐

Prompt Space Optimizing Few-shot Reasoning Success with Large Language Models https://arxiv.org/abs/2306.03799 Prompt engineering 是通过提供明确和具体的指令来增强大型语言模型(llm)能力的基本技术。它使LLM能够在各种任务中脱颖而出,例如算术推理、问…

RTMPose

RTMPose 1. 人体姿态估计简介2. RTMPose2.1 网络结构2.2 基于SimCC的优化路线2.2.1 SimCC:2.2.2 RTMPose 1. 人体姿态估计简介 多人姿态估计框架包括5个方面: paradigm:范式 top-down: 用于人数不多于6人的场景使用现成的检测器提…

Android Studio 配置 DCL 单例脚本

DCL(Double-Checked Locking)单例是一种用于创建单例对象的设计模式。单例模式是一种创建型模式,用于确保一个类只有一个实例,并提供全局访问点。 DCL单例的核心思想是使用双重检查来保证只有在需要时才对实例进行实例化。它结合…

Nginx服务器的六个修改小实验

一、Nginx虚拟主机配置 1.基于域名 (1)为虚拟主机提供域名解析 配置DNS 修改/etc/hosts文件 (2)为虚拟主机准备网页文档 #创建网页目录 mkdir -p /var/www/html/abc mkdir -p /var/www/html/def ​ #编写简易首页html文件 ec…

MySQL 字符集与比较规则

字符集与比较规则 一. 字符集相关操作1. 查看字符集1.1 查看数据库当前字符集配置1.2 查看某数据库/数据表字符集 2. 修改字符集2.1 全局修改字符集2.2 修改已有库表字符集 3. 字符集级别二. 比较规则1.1 后缀表示含义1.2 查看指定数据集比较规则1.3 查看/修改数据库/表比较规则…

ffmpeg+nginx-rtmp转发视频流

本篇博客最早发布于实验室公共博客,但已无人维护,现迁移至个人博客 nginx与nginx-rtmp-module安装 画了好几天图,实在有些乏力,找点有意思的事情做做 觉得视频流传输挺有意思,B站找了些视频,但感觉有些大…

python爬虫—selenium获取csdn质量分并用echarts可视化分析

文章目录 ⭐前言⭐selenium💖 获取所有的文章url💖 根据url查询分数💖 inscode结合echarts展示结束 ⭐前言 大家好,我是yma16,本文分享关于python自动化获取个人博客质量分并可视化。 该系列文章: python爬…

机器学习笔记 - 结合深度学习的基于内容的图像实例检索 利用现成的DCNN模型进行检索

一、简述 上一篇,基于内容的图像实例检索综述。 https://mp.csdn.net/mp_blog/creation/editor/131415155https://mp.csdn.net/mp_blog/creation/editor/131415155 一种方案是,为分类任务而进行大规模训练的DCNN直接充当图像检索任务的现成特征检测器,也就是说,可以…