系统调用:https://blog.csdn.net/AABond/article/details/127791223

第一章 迷惑问题

  • 大端与小端字节序

定义:
一个超过255 的数字必然要占用2 个字节以上,这两个字节,在物理内
存中,哪个在前?哪个在后?拿Oxl234 举例,数值中的高位12 是放在内存的高地址处,还是低地址处?
于是就产生了这两种相反的排列顺序。
1 )小端字节序是数值的低宇节放在内存的低地址处,数值的高宇节放在内存的高地址。
2 )大端字节序是数值的低宇节放在内存的高地址处,数值的高宇节放在内存的低地址。

拓展:
字节序不仅是在CPU 访问内存中的概念,而且也包括在文件存储和网络传输中。bmp 格式的图片就
属于小端字节序,而jpeg 格式的图片则为大端字节序,这没什么可说的,采用什么序列完全是开发者设
计产品时的需要。

  • section 或segment

section 称为节,是指在汇编源码中经由关键字section 或segment 修饰、逻辑划分的指令或数据区域,
汇编器会将这两个关键字修饰的区域在目标文件中编译成节,也就是说“节”最初诞生于目标文件中。

segment 称为段,是链接器根据目标文件中属性相同的多个section 合并后的section 集合,这个集合
称为segment,也就是段,链接器把目标文件链接成可执行文件,因此段最终诞生于可执行文件中。我们
平时所说的可执行程序内存空间中的代码段和数据段就是指的segment 。

  • 如何控制CPU的下一条指令
    用于存放下一条指令地址的寄存器称为程序计数器PC (Program Counter ) 。这
    个名词在我看来是个概念级别的内容,它只是CPU 中有关下一条指令存放地址的统称,也就是说PC 是
    用来表示下一条指令的存放地址,具体的实现形式不限。
    CPU 按照指令集可以分为很多种,由于PC 只是个概念,所以在不同种类的CPU 中,有不同的实现。

  • 转义字符与ASCII码表
    ASCII 码表中任何字符都是1 个字节大小,在字符串中不可见字符虽然用“转义字符+可见字符”两个字
    符来表示,但这只是编译器为了让人们能写出不可见字符的方式,目的是让不可见字符变得“可见”,针对的
    是人,这样人们写程序时就能在字符串中用到不可见字符。不可见字符本身在编译后还是那1 个字节的ASCII
    码。说白了,我们能够将不可见字符显示出来,原因就是编译器在给我们做支持,它将“转义字符+可见字符”
    这种形式的不可见字符转换成了该不可见字符的ASCII 码。

  • MBR、EBR、DBR、OBR (重要)
    MBR:Master Boot Record,主引导程序。
    EBR: Expand Boot Record.
    DBR:Dos Boot Record.
    OBR: OS Boot Record,操作系统引导程序(内核加载器)。

整个硬盘只有1个MBR,其位于整个硬盘最开始的扇区一0道0扇区。而EBR 可有无数个,具体位置取决于扩展分区的分配情况,总之是位于各子扩展分区最开始的扇区。

BIOS、MBR、OBR的关系
DBR、OBR 、MBR、EBR 都包含引导程序,因此它们都称为引导扇区,只要该扇区中存在可执行的程序,该扇区就是可引导扇区。若该扇区位于整个硬盘最开始的扇区,并且以Ox55 和OxAA剧结束, BIOS就认为该扇区中存在MBR,该扇区就是MBR 引导扇区。若该扇区位于各分区最开始的扇区,井且以Ox55和OxAA结束,MBR就认为该扇区中有操作系统引导程序OBR,该扇区就是OBR 引导扇区。

第二章 编写MBR 主引导记录

BIOS

实模式下的1M内存 (**)

bios是如何被激活的

1)接电的一瞬间, CPU 的CS: ip 寄存器被强制初始化为0xF0: OxFFF0.在实模式下的段基址要乘以16 ,也就是左移4 位,于是OxFOOO: OxFFFO 的等效地址将是OxFFFFO 。
2)推理OxFFFFO此处是跳转指令,jmp far f000: e05b,即Oxfe05b。这是BIOS 代码真正开始的地方。
3)BIOS 便马不停蹄地检测内存、显卡等外设信息,当检测通过,并初始化好硬件后,开始在内存中0x000 ~0x3FF 处建立数据结构,中断向量表IVT 并填写中断例程。

0x7c00的由来

bios第一个接力棒是0x7c00,也就是MBR

第三章 完善MBR


0 条评论

发表回复

您的电子邮箱地址不会被公开。