09 - 主引导程序控制权的转移
创始人
2024-04-21 03:29:48

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

文章目录

  • 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; kif( 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, 1cmp    al, 0x00je        lastmov    ah, 0x0Emov    bx, 0x0Fint       0x10jmp     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程序没有代码体积上的限制

相关内容

热门资讯

北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
阿西吧是什么意思 阿西吧相当于... 即使你没有受到过任何外语培训,你也懂四国语言。汉语:你好英语:Shit韩语:阿西吧(아,씨발! )日...