计算机启动
按下主机上的 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
运行结果:
:学习笔记,整理操作系统真象还原
相关文章:
计算机启动
按下主机上的 power 键后,第一个运行的软件是 BIOS,BIOS 全称叫 Base Input & Output System,即基本输入输出系统。 (8086的1MB内存) 地址 0~0x9FFFF 处是 DRAM,顶部的 0xF0000~0xFFFFF&am…...
Unity学习笔记--EventSystem事件系统在使用上需要注意的地方(很基础,但是很多人会忘记!!!)
目录 前言代码Unity 场景配置运行报错分析解决办法拓展(预告) 前言 之前有写过一篇关于事件系统实现以及使用的文章 Unity学习笔记–C#事件系统的实现与应用 最近在使用的时候遇到了一些问题,所以在此记录下,也为看到这篇文章的人…...
高手必备:JVM调优的常用命令和参数一网打尽!
大家好,我是小米!在今天的技术分享中,我将和大家一起探讨JVM调优中的常用命令和参数。作为一名热爱技术的小伙伴,希望通过本篇文章的分享,能够帮助大家更好地理解和掌握JVM调优的方法和技巧。 JVM的结构 首先&#x…...
Uniapp 开发 ①(快速上手)
作者 : SYFStrive 博客首页 : HomePage 📜: UNIAPP开发 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 📌:觉得文章不错可以点点关注 Ǵ…...
【数据库原理与实践】知识点归纳(下)
第6章 规范化理论 一、关系模式设计中存在的问题 关系、关系模式、关系数据库、关系数据库的模式 关系模式看作三元组:R < U,F >,当且仅当U上的一个关系r满足F时,r称为关系模式R < U,F >的一个关系 第一范式(1NF&…...
代码随想录day34
1005.K次取反后最大化的数组和 本题主要是想到排序的时候要按绝对值大小排序。 class Solution { static bool cmp(int a,int b){return abs(a)>abs(b); } public:int largestSumAfterKNegations(vector<int>& nums, int k) {sort(nums.begin(),nums.end(),cmp);…...
CSS知识点汇总(八)--Flexbox
1. flexbox(弹性盒布局模型)是什么,适用什么场景? 1. flexbox(弹性盒布局模型)是什么 Flexible Box 简称 flex,意为”弹性布局”,可以简便、完整、响应式地实现各种页面布局。采用…...
ASCII、Unicode、UTF-8、GBK
入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删。 目录 一、定义 1、ASCII 2、Unicode 3、UTF-8 4、GB2312 5、GBK 6、\u和\x 二、相互转化 1、str 与 ASCII 2、str与utf-…...
【安全】使用docker安装Nessus
目录 一、准备docker环境服务器(略) 二、安装 2.1 搜索镜像 2.2 拉取镜像 2.3 启动镜像 三、离线更新插件 3.1 获取challenge 3.2 官方注册获取激活码 3.3 使用challenge码和激活码获取插件下载地址 3.4 下载的插件以及许可协议复制到容器内 四…...
【Hadoop综合实践】手机卖场大数据综合项目分析
🚀 本文章实现了基于MapReduce的手机浏览日志分析 🚀 文章简介:主要包含了数据生成部分,数据处理部分,数据存储部分与数据可视化部分 🚀 【本文仅供参考!!非唯一答案】其中需求实现的…...
服务器技术(三)--Nginx
Nginx介绍 Nginx是什么、适用场景 Nginx是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。 Nginx专为性能优化而开发,性能是其最重要的考量…...
OpenCV——总结《车牌识别》之《常用的函数介绍》
1. cv2.getStructuringElement(cv2.MORPH_RECT, (10, 10))element cv2.getStructuringElement(shape, ksize[, anchor])用于创建形态学操作的结构元素(structuring element)。 参数解释: shape:结构元素的形状,可以…...
chatgpt赋能python:如何利用Python进行自动化办公
如何利用Python进行自动化办公 在现代办公环境中,自动化成为了一种趋势。利用计算机程序自动处理重复性劳动,可以提高生产效率和工作质量,同时也能够让工作更加轻松。Python作为一种常用的编程语言,在自动化办公中发挥了重要作用…...
linux-2.6.22.6内核网卡驱动框架分析
网络协议分为很多层,而驱动这层对应于实际的物理网卡部分,这也是最底层的部分,以cs89x0.c这个驱动程序为例来分析下网卡驱动程序框架。 正常开发一个驱动程序时,一般都遵循以下几个步骤: 1.分配某个结构体 2.设置该结…...
机器学习7:特征工程
在传统的软件工程中,核心是代码,然而,在机器学习项目中,重点则是特征——也就是说,开发人员优化模型的方法之一是增加和改进其输入特征。很多时候,优化特征比优化模型带来的增益要大得多。 笔者曾经参与过一…...
coverage代码覆盖率测试介绍
coverage代码覆盖率测试介绍 背景知识补充 1、什么是覆盖率 测试过程中提到的覆盖率,指的是已测试的内容,占待测内容的百分比,在一定程度上反应测试的完整程度。 覆盖率有可以根据要衡量的对象细分很多种,比如接口覆盖率、分支…...
使用 Debian、Docker 和 Nginx 部署 Web 应用
前言 本文将介绍基于 Debian 的系统上使用 Docker 和 Nginx 进行 Web 应用部署的过程。着重介绍了 Debian、Docker 和 Nginx 的安装和配置。 第 1 步:更新和升级 Debian 系统 通过 SSH 连接到服务器。更新软件包列表:sudo apt update升级已安装的软件…...
Redis原理 - 内存策略
原文首更地址,阅读效果更佳! Redis原理 - 内存策略 | CoderMast编程桅杆https://www.codermast.com/database/redis/redis-memery-strategy.html Redis 本身是一个典型的 key-value 内存存储数据库,因此所有的 key、value 都保存在之前学习…...
【计算机网络】IP 地址处理函数
目录 1.struct sockaddr_in的结构 2.一般我们写的结构 3.常见的“点分十进制” 到 ” uint32_t 的转化接口 3.1. inet_aton 和 inet_ntoa (ipv4) 3.2. inet_pton 和 inet_ntop (ipv4 和 ipv6) 3.3. inet_addr 和 inet_network 3…...
9i物联网浏览器(cef_114.2.110114.2.100支持H264视频)WinForm-CefSharp114(5735)视频版本体验
更新:2023.6.25 版本:Cef_114.2.110和114.2.100+chromium-114.0.5735.134的32位和64位 说明:支持图片,mp3,mp4(H264)多媒体 测试环境:windows server 2019 测试网址:www.html5test.com 1.包下载地址 1.1 https://www.nuget.org/packages/CefSharp.Common/ 1.2 https…...
Mac用户福音:Qwen3-TTS声音克隆在ComfyUI上的M芯片优化方案
Mac用户福音:Qwen3-TTS声音克隆在ComfyUI上的M芯片优化方案 1. 为什么Mac用户需要特别优化方案 苹果M系列芯片凭借其出色的能效比和统一内存架构,已经成为许多创意工作者的首选。然而,在运行AI模型时,特别是像Qwen3-TTS这样的语…...
显卡驱动彻底清理指南:用DDU解决90%的显示问题
显卡驱动彻底清理指南:用DDU解决90%的显示问题 【免费下载链接】display-drivers-uninstaller Display Driver Uninstaller (DDU) a driver removal utility / cleaner utility 项目地址: https://gitcode.com/gh_mirrors/di/display-drivers-uninstaller 当…...
Pixel Couplet Gen实操手册:自定义门神像素图替换与SVG动画扩展方法
Pixel Couplet Gen实操手册:自定义门神像素图替换与SVG动画扩展方法 1. 项目概述 Pixel Couplet Gen是一款融合传统春节元素与现代像素艺术风格的AI春联生成工具。通过ModelScope大模型的文本生成能力,结合精心设计的8-bit视觉风格,为用户提…...
JIT热路径识别失效?手撕Python 3.14 _pyjitsymbol.c源码,定位3个未文档化的profile阈值陷阱(内附补丁POC)
第一章:JIT热路径识别失效?手撕Python 3.14 _pyjitsymbol.c源码,定位3个未文档化的profile阈值陷阱(内附补丁POC)Python 3.14 引入的 _pyjitsymbol JIT 框架在实际压测中频繁出现热路径“失焦”现象:高频率…...
全民养虾潮背后:智能体产业的产业化困局
2026年3月,如果你在科技园区看到有人抱着电脑排长队,或者听到“养虾了吗”的问候,不必感到奇怪。这只“虾”正是开源AI智能体——OpenClaw。从社交平台刷屏的“养龙虾”攻略到GitHub星标数突破27万,超越Linux登顶全球开源项目榜首…...
Qwen3-TTS-VoiceDesign应用案例:智能硬件设备嵌入式多语种语音播报
Qwen3-TTS-VoiceDesign应用案例:智能硬件设备嵌入式多语种语音播报 1. 智能语音播报的市场需求 现在的智能硬件设备越来越普及,从智能家居到车载系统,从工业设备到消费电子产品,几乎都需要语音交互功能。但很多设备面临一个共同…...
AutoGen Studio效果展示:看Qwen3-4B如何协作完成网页设计
AutoGen Studio效果展示:看Qwen3-4B如何协作完成网页设计 1. AutoGen Studio简介 AutoGen Studio是一个基于微软AutoGen框架开发的低代码界面工具,它让构建和组合AI代理变得简单直观。通过这个平台,你可以快速创建多个AI代理,为…...
单片机调试:问题复现与定位的实战技巧
1. 单片机开发中的问题复现方法论在单片机项目开发过程中,遇到问题是不可避免的。作为一名从业多年的嵌入式工程师,我认为问题复现是整个调试过程中最关键的第一步。很多新手开发者常常急于解决问题,却忽略了问题复现的重要性,结果…...
郑州大学生命科学学院生物与医药专业考研复试资料(2025届学姐整理)|电子版
温馨提示:文末有联系方式【权威整理】郑大生科院生物与医药方向考研复试精品资料包 本资料由郑州大学生命科学学院生物与医药专业2022年高分录取学姐牵头整合,汇集2022–2025连续四届成功上岸师兄师姐的实战复试经验与核心资料,内容系统、精准…...
5个技巧掌握DINO注意力可视化:从入门到模型可解释性分析
5个技巧掌握DINO注意力可视化:从入门到模型可解释性分析 【免费下载链接】dino PyTorch code for Vision Transformers training with the Self-Supervised learning method DINO 项目地址: https://gitcode.com/gh_mirrors/di/dino 视觉模型可解释性已成为人…...
