MBR初认识

这篇具有很好参考价值的文章主要介绍了MBR初认识。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.什么是MBR

  说实话,我一直都不喜欢在一大堆内容一开始就抛出一长条概念,这很劝退,但现在记录一下是很有必要的,否则后续忘记就难理解了。

  简单来讲,MBR记录着硬盘各个分区的大小和位置信息,就像人口普查一样,对整个硬盘的分布了熟于心。它是开机后访问硬盘时要读取的第一个扇区,不难理解,毕竟要知道自己去哪得先看地图。噢,对了,它的全称是主引导记录(master boot record),由于os需要一步步进行权限的完善,有程序进行接力和指引是必须的事情。

2. 0x7c00?why?

  好吧,这个问题我也一直都很好奇,在进行6.s081实验时,取断点并跳转总是从0x7c00开始,搜了很多操作系统有关的文章都没有给我一个满意的答案,现在算是知道了:

  早期的CPU要求物理地址 0x0~0x3FF 存放中断向量表(我还不知道这是什么意思),所以只能找其他地方放MBR了,在那时DOS(古老的系统)要求最小内存是32KB,但是MBR自然不可能覆盖在前面或中间(不然其他功能去哪开始加载,无序会导致混乱和时间变长),所以它必须预留空间,所以就得在32KB的末尾。

  写程序的大家都知道,程序必须要用到栈,MBR虽说是汇编语言但也是一段程序,它在内存里由于要给栈分配空间实际上总空间要大于512字节,最大估计也就1KB了(毕竟功能就那点),所以选32KB中最后1KB最合适,而那个地方就是0x7c00。

3.启动MBR的坎坷风雪路

  首先是简单的MBR代码:

 1 ;主引导程序
 2 ;---------------------
 3 
 4 SECTION MBR vstart=0x7c00 ;程序开始的地址
 5     mov ax, cs            ;使用cs初始化其他的寄存器
 6     mov ds, ax            ;因为是通过jmp 0:0x7c00到的MBR开始地址
 7     mov es, ax            ;所以此时的cs为0,也就是用0初始化其他寄存器
 8     mov ss, ax            ;此类的寄存器不同通过立即数赋值,采用ax中转
 9     mov fs, ax
10     mov sp, 0x7c00  ;初始化栈指针
11 
12 ;清屏利用0x10中断的0x6号功能
13 ;------------------------
14     mov ax, 0x600
15     mov bx, 0x700
16     mov cx, 0
17     mov dx, 0x184f
18 
19     int 0x10
20     ;获取光标位置
21 ;---------------------
22     mov ah, 3   ; 3号子功能获取光标位置
23     mov bh, 1   ; bh寄存器存储带获取光标位置的页号,从0开始,此处填1可以看成将光标移动到最开始
24     int 0x10
25 
26 ;打印字符串
27 ;------------------
28     mov ax, message
29     mov bp, ax
30 
31     mov cx, 6    ;字符串长度,不包括'\0'
32     mov ax, 0x1301
33     mov bx, 0x2
34 
35     int 0x10
36 
37     jmp $
38 
39     message db "My MBR"
40     times 510-($-$$) db 0 
41     db 0x55, 0xaa

 注释都说的很清楚,显示器相关就不提了,主要写写第24行0x10中断和37、40、41行。

0x10中断在这里负责有关打印的例程。调用方法是将功能号送入ah寄存器,其他参数按照中断要求放在适当寄存器,然后执行int 0x10,具体了解在这贴个链接:(3条消息) BIOS INT 10中断功能详解_bios显示模式 int10_rhxznp的博客-CSDN博客

37行是一个死循环,$是本行指令的地址,jmp是近跳转,那么jmp $就是跳到自己的地址再执行自己,再跳到自己的地址再跳转,这样是为了让程序悬停在此处,等待下一步。

40行的$$是本section的起始地址,和上面$区别还是很大的,section起始地址和行起始地址并不是一个东西。$-$$是本行到本section的偏移量,MBR的最后两个字节必须是固定的内容,也就是BIOS认为可执行的程序MBR啦!如果不是,OK,BIOS不认识,无法启动。

那么一串times 和 - 号、db是什么意思?因为要预留出0x55,0xaa,所以得要计算填满扇区用的字节数,MBR共有512字节,那么510个字节就得填充,但是扇区里还有其他东西加载,所以用510-($-$$)得到剩余量,然后用0填充,这样预留的两字节就能确保了。

也就是说,到这里程序加载的顺序是BIOS -> 跳转0x7c00 -> 跳转0x55,0xaa.

接下来是最艰难的启动之路!

  利用dd和nasm分别写入和编译MBR,这个没问题,注意路径就行,主要是启动bochs时,错误主要有三个(反反复复!):

  1. MBR初认识

    这个每次启动都会弹出,真的很鸡肋!通过查阅发现img.lock删除后重启就行,还是不行命令加个sudo也可以。

  2. sector size of 0 is in error. 措施:中文意思是扇区大小0出错,我怀疑是我硬盘没有建立,或者建立了系统没反应,所以重新又建立了一次,解决了问题。
  3. NO bootable device. 措施:一开始我很困惑,明明我dd也nasm了怎么不认呢?原来是第二个错误的连锁反应,建立硬盘后再dd nasm一次就能识别MBR了。

  虽说就三个错误,折腾了我大半天时间,一些文章也没有我的错误,反反复复重启删除,最后终于出现在bochs的图让我成就感满满,附个胜利图:

MBR初认识

呃,别问我为什么和上面的程序显示不一样,为了解释重点的MBR结构,我搜索了这个比较简单的程序,但图中的这个是《操作系统真象还原》里的完整代码运行出的结果,所以不一样。

  OK!总算是写完初认识啦!我只是个小菜鸡,一些认识肯定是浅显或有些不准确的,后面会随着OS的完善逐步深入,感谢浏览!文章来源地址https://www.toymoban.com/news/detail-514066.html

到了这里,关于MBR初认识的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 为什么程序员喜欢用Linux?

      Linux哪些行业在运用? Linux系统运用极其广泛,不少用户只知道windows,是因为,Linux的运用主要是在企业端。现在科技极其发达,我们手机在手,就能干很多事情,只需点一点屏幕,轻松完成聊天、娱乐、甚至支付功能。这些操作看似简单,但其背后,有一系列复杂请求和

    2024年02月04日
    浏览(73)
  • 为什么很多程序员喜欢linux系统?

    a Linux哪些行业在运用? Linux系统运用极其广泛,不少用户只知道windows,是因为,Linux的运用主要是在企业端。现在科技极其发达,我们手机在手,就能干很多事情,只需点一点屏幕,轻松完成聊天、娱乐、甚至支付功能。这些操作看似简单,但其背后,有一系列复杂请求和响

    2024年02月03日
    浏览(67)
  • 为什么程序员都喜欢开源的软件?

    程序员宝藏库 :https://gitee.com/sharetech_lee/CS-Books-Store 商业软件 :下载、安装、注册账号、登陆、看广告…费了半天功夫之后发现竟然收费! 开源软件 :开放透明、完全免费。 这么明显的对比,为啥不喜欢用开源软件呢? 以PDF阅读为例,这类商业软件不少,用的时候会发现

    2023年04月09日
    浏览(61)
  • 软件工程师,为什么不喜欢关电脑

    概述         你是否注意到,软件工程师们似乎从不关电脑,也不喜欢关电脑?别以为他们是电脑“上瘾”,或是沉迷于电脑,这一现象背后蕴含着多种实际原因。         1、代码保存与恢复。         在编写代码过程中,遇到问题时可能会暂时离开去查阅资料或

    2024年02月19日
    浏览(56)
  • 大厂领导为什么喜欢跨层与下属聊天

    作为一个在大厂里面浸淫十几年的loser,平时主要精力没用在技术提升上,对于大厂的人情世故各类八卦倒是研究的透彻。 如果你细心观察,会发现一些大的公司里面,领导喜欢跨层与下属去沟通聊天,我待过几家比较大的公司,这个现象还是比较普遍。 今天就摆一摆,那些

    2024年02月15日
    浏览(57)
  • 虚拟与真实,交互与交易 | 你为什么喜欢元宇宙游戏?

    虚拟与真实,交互与交易 | 你为什么喜欢元宇宙游戏? 近年来,元宇宙(Metaverse)从科幻想象成为商业概念,在场景社交、产业经济、文化娱乐等方面表现出前所未有的活力。作为真实世界的延伸与拓展,元宇宙借助区块链技术和开放源代码,以去中心化为价值内核的技术构

    2024年01月18日
    浏览(58)
  • 电脑bios使用的uefi启动,系统盘使用的mbr格式,为什么安装完系统无法进入?

      在电脑的安装系统过程中,我们会遇到一些问题,比如说使用UEFI启动但是磁盘分区使用MBR格式,导致系统安装完成之后无法引导。这是因为UEFI启动只支持GPT格式的磁盘分区。 在本文中,我们将探讨如何将磁盘转换成GPT格式,并重新安装系统,以便正确地引导系统。    

    2024年02月12日
    浏览(60)
  • 数据结构学习记录——什么是堆(优先队列、堆的概念、最大堆最小堆、优先队列的完全二叉树表示、堆的特性、堆的抽象数据类型描述)

    目录 优先队列 若采用数组或链表实现优先队列  数组 链表 有序数组 有序链表 总结 若采用二叉搜索树来实现优先队列 最大堆 堆的概念 优先队列的完全二叉树表示 堆的两个特性  结构性 有序性 【例】最大堆和最小堆 【例】不是堆 堆的抽象数据类型描述 优先队列 (Prio

    2024年02月02日
    浏览(52)
  • 程序员为什么不喜欢关电脑?揭秘背后的原因与“英雄”本色

    在许多人眼中,程序员似乎总是与电脑形影不离,甚至深夜时分,他们的电脑屏幕也依旧亮着。那么,为什么程序员们似乎从不喜欢关电脑呢?今天,就让我们一起走进程序员的世界,揭秘这背后的原因,看看他们真正的“英雄”本色! 在程序员的日常工作中,保持流畅且不

    2024年02月19日
    浏览(62)
  • 个性化定制界面 VS 极简版原装界面:你更喜欢哪一个?为什么?

    不管昨天、今天、明天,能豁然开朗就是最美好的一天。 个性化定制界面和极简版原装界面,哪一个你用起来更加顺手呢,相比之下你更喜欢哪一个? 随着移动互联网技术的不断发展,手机和电脑成为我们生活中必不可少的工具之一。而手机和电脑界面作为我们与手机交互

    2024年02月11日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包