09 - 主引导程序控制权的转移

news2024/11/16 0:37:53

---- 整理自狄泰软件唐佐林老师课程

文章目录

  • 1. BootLoader内存布局
  • 2. 通过FAT表加载文件内容
  • 3. 编程实验:Loader文件内容的加载
  • 4. 第一个Loader程序
    • 4.1 汇编小贴士:标志寄存器
    • 4.2 编程实验:控制权转移
  • 5. 小结

1. BootLoader内存布局

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 通过FAT表加载文件内容

在这里插入图片描述

for(int i=0, j=re.DIR_FstClus; j<0xFF7; i+=512, j=vec[j])
{
    qDebug() << j;

    file.seek(rf.BPB_BytsPerSec * (33 + j - 2));

    in.readRawData(buf, sizeof(buf));

    for(uint k=0; k<sizeof(buf); k++)
    {
        if( count < ret.size() )
        {
            ret[i+k] = buf[k];
            count++;
        }
    }
}

3. 编程实验:Loader文件内容的加载

  • 实验步骤:
    1. 在虚拟软盘中创建 体积较大的文本文件(Loader
    2. 将Loader的内容(这里直接在loader.bin中复制boot.asm文件的内容)加载到 BaseOfLoader 地址处
    3. 打印Loader中的文本(判断加载是否完全)

【参看链接】:09 - 主引导程序控制权的转移 / 09 / 00test_boot_load

在这里插入图片描述

在这里插入图片描述

4. 第一个Loader程序

  • 起始地址:0x9000(org 0x9000
  • 目标:通过 int 0x10 在屏幕上打印字符串(以此来验证Loader被加载)
print:
    mov    al, [si]
    add     si, 1
    cmp    al, 0x00
    je        last
    mov    ah, 0x0E
    mov    bx, 0x0F
    int       0x10
    jmp     print
last:
	; ...

4.1 汇编小贴士:标志寄存器

在这里插入图片描述

  • 当运算结果为0时,ZF位的值为1
    • jxx代表了一个指令族,功能是根据标志位进行调整
      • jo 当OF为1则跳转
      • jc 当CF为1则跳转
      • jns 当SF不为1则跳转
      • jz 当ZF为1则跳转
      • je 比较结果为相等则跳转(即:jz)
      • ……

4.2 编程实验:控制权转移

在这里插入图片描述
在这里插入图片描述

【参看链接】:09 - 主引导程序控制权的转移 / 09 / 01Loader

将loader拷贝到虚拟软盘,从boot跳转到loader执行。loader中是打印“Hello, D.T.OS!”:
在这里插入图片描述
在这里插入图片描述

data.img插入到vmware中运行结果如下:
在这里插入图片描述

5. 小结

  • Boot需要重构保证在512字节内完成功能
  • 在汇编程序中尽量确保函数调用前后通用寄存器的状态不变
  • Boot成功加载Loader之后将控制权转移
  • Loader程序没有代码体积上的限制

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

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

相关文章

你还不知道「并发下的三色标记」么?

引用计数算法 在对象中添加一个引用计数器&#xff0c;每当有一个地方引用它时 计数器值就加一;当引用失效时&#xff0c;计数器值就减一; 任何时刻计数器为零的对象就是不可能再被使用的。 引用计数算法的缺陷 如下面代码&#xff0c;两个对象互相引用导致无法回收♻️ 对…

【OpenCV学习】第12课:特征提取(高斯不同)

仅自学做笔记用,后续有错误会更改 理论 定义&#xff1a;就是把同一张图像在不同的参数下做高斯模糊之后的结果相减&#xff0c;得到的输出图像&#xff0c;称为高斯不同&#xff08;DOG&#xff09;高斯不同是图像的内在特征&#xff0c; 在灰度图像增强丶角点检测中经常用到…

【MySQL】深入分析 锁机制(一)行锁 加锁规则 之 等值查询

文章目录前言一、共享锁&#xff08;S&#xff09;和排它锁&#xff08;X&#xff09;二、行锁的3种算法Record LockGap LockNext-key Lock三、加锁规则 之 等值查询分析数据准备3.1 聚集索引有匹配索引无匹配索引3.2 唯一索引有匹配索引无匹配索引3.3 普通索引有匹配索引无匹配…

游戏蓝牙耳机哪个好用?2022超低延迟游戏蓝牙耳机推荐

随着蓝牙耳机的快速发展&#xff0c;使用蓝牙耳机玩游戏的人也越来越多。那么&#xff0c;游戏蓝牙耳机哪个好用呢&#xff1f;当然是延迟越低的蓝牙耳机玩游戏的体验感会越好&#xff0c;我们都知道蓝牙耳机相对于有线耳机来说&#xff0c;或多或少会存在延迟。下面&#xff0…

一文讲解linux SMP Boot

说明&#xff1a; Kernel版本&#xff1a;4.14ARM64处理器&#xff0c;Contex-A53&#xff0c;双核使用工具&#xff1a;Source Insight 3.5&#xff0c; Visio 1. 介绍 SMP, Symmetric Multi-Processor&#xff0c;相对于单核处理器来说&#xff0c;SMP实现了真正严格意义上…

写出这个数

目录 1002:写出这个数 输入格式&#xff1a; 输出格式&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; 代码长度限制 时间限制 内存限制 思路: 1.求和 1.2代码: 2.找到sum的每一位 2.2代码: 3.汉语拼音输出数字 3.2代码: 完整代码: 时间复杂度: 总结: 题…

通过MQ进行系统对接

消息要有来源系统&#xff0c;消息类型&#xff0c;收到消息的应用&#xff0c;通过url取数据。做一个开关&#xff0c;用户可以自己选择方案一和方案二。 方案一&#xff1a;A公司的消息中存json&#xff0c;供应链直接获取json 方案二&#xff1a;通过A公司消息中的UrL&…

Windows系统iis 和多界面怎么安装

Windows系统iis 和多界面怎么安装 服务器拿到手都是有iis&#xff08;iis&#xff1a;用于搭建网站&#xff09;和多界面&#xff08;多界面&#xff1a;用于同时多人操作服务器&#xff09; 但也有服务器是没有安装iis和多界面的&#xff0c;遇到这样的情况就手足无措了。 今…

实训任务5:ZooKeeper节点操作

文章目录一、实训目的二、实训要求三、实训任务四、完成任务&#xff08;一&#xff09;准备工作&#xff08;二&#xff09;实现步骤1、创建Maven项目2、添加相关依赖3、创建日志属性文件4、创建股票价格类&#xff08;1&#xff09;创建init()方法&#xff08;2&#xff09;创…

【python脚本】ICer的脚本入门训练——find_key

我们的目标是┏ (゜ω゜)☞芯片前端全栈工程师~喵&#xff01; 前言 往期回顾&#xff1a; 【python脚本】ICer的脚本入门训练——svn_back_尼德兰的喵的博客-CSDN博客_svn back文件 【python脚本】ICer的脚本入门训练——gen_tc_尼德兰的喵的博客-CSDN博客 查找关键词这一类脚…

TFT-LCD LVGL与硬件交互

TFT-LCD LVGL与硬件交互 屏幕能正常显示LVGL官方例程&#xff0c;说明LVGL移植成功了&#xff0c;本次实验使用屏幕通过LVGL控制开发板硬件 实现效果 用LVGL画两个按钮和一个标签&#xff0c;一个按钮控制蜂鸣器&#xff0c;另一个按钮控制继电器&#xff0c;标签显示“TFT-…

基于intel机器人控制器,支持slam,激光雷达和AI加速

9th/8th gen Intel Core™ i7/i5/i3 & Celeron.XM-5149 是专为机器人行业设计的工业计算机产品&#xff0c;高性能的处理能力加速 AI 学习速度&#xff0c;多种类 I/0 可接摄像头、雷达等丰富外设。在设备密闭舱体内&#xff0c;整机可以高温稳定运行不降速。 产品规格 芯…

flink不同部署方式-1.14

1. 版本说明 本文档内容基于 flink-1.14.x&#xff0c;其他版本的整理&#xff0c;请查看本人博客的 flink 专栏其他文章。 2. 概述 Flink 是一种通用性框架&#xff0c;支持多种不同的部署方式。 本章简要介绍 Flink 集群的组成部分、用途和可用实现。如果你只是想在本地启…

最全LaTeX 数学公式、字母符号、上下标、列表矩阵、公式注释、分数二进制数、分割字符、逻辑集合论、否定符号等

最全LaTeX 数学公式、字母符号、上下标、列表矩阵、公式注释、分数二进制数、分割字符、逻辑集合论、否定符号等 1. 公式示例 E(T)∑(p,q)ϵκ∣∣p−Tq∣∣2E(T)\sum_{(p,q)\epsilon\kappa} \mid\mid p-T_q \mid \mid ^2 E(T)(p,q)ϵκ∑​∣∣p−Tq​∣∣2 E(T)∑(p,q)ϵκ…

高数 |【23数一 李林六套卷】卷四 自用思路 及 知识点 整理

23数一 李林六套卷 —— 自用思路 及 知识点 整理 ——【卷一】 以下均为个人复盘。 T1:高阶无穷小 T6:傅里叶级数 法一:直接套傅里叶展开公式,死算 法二:用技巧。取一个x,看最后结果趋近于这个数!是趋近于!不是直接等于 直接等于不可以。再来看下一个。

Java--IO流详解

目录 一、IO流的介绍 二、IO流的具体详解 &#xff08;1&#xff09;字节流 1&#xff1a;FileOutputStream 2&#xff1a;FileInputStream &#xff08;2&#xff09;字符流 1&#xff1a;解码编码 2&#xff1a;FileReader 3&#xff1a;FileWriter 三、IO流的使用 …

MATLB|基于改进教学的优化算法(TLSBO)的最优功率优化

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f4dd;目前更新&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;电力系统相关知识&#xff0c;期刊论文&…

使用 Zabbix 监控Oracle

zabbix ODBC 数据库监控 ODBC 是 C 语言开发的、用于访问数据库的中间件接口.zabbix 支持查询任何 ODBC 支持的数据库.zabbix 经过调用 ODBC 来获取数据库的数据以及数据库状态等等信息 一、安装unixODBC 官方主页:http://www.unixodbc.org/download.html 使用阿里巴巴提供的…

线性方程组迭代法

雅可比迭代法与高斯-塞德尔迭代法 雅可比迭代法 例一 {10x1−x2−2x37.2−x110x2−2x38.3−x1−x25x34.2\left\{\begin{array}{l} 10 x_{1}-x_{2}-2 x_{3}7.2 \\ -x_{1}10 x_{2}-2 x_{3}8.3 \\ -x_{1}-x_{2}5 x_{3}4.2 \end{array}\right. ⎩⎨⎧​10x1​−x2​−2x3​7.2−x…

Css-Grid布局(强大)

前言 我们前面讲的Flex布局是轴线布局&#xff0c;只能指定"项目"针对轴线的位置&#xff0c;可以看做是一维布局&#xff0c;Grid布局则是将容器划分成"行"和"列"&#xff0c;产生单元格&#xff0c;然后指定"项目所在"的单元格&…