你知道 0x7C00,这个在 x86 汇编中的一个神秘数字吗?0x7C00 是一个内存地址,BIOS 就是将 MBR (Master Boot Record, hdd/fdd 的第一个 sector) 读入 0x7C00 这个地址,然后进行后续引导的。
操作系统或是 bootloader 的开发者必须假设他们的汇编代码被加载并从 0x7C00 处开始执行。
不过,为什么在 x86 中 BIOS 要将 MBR 加载到 0x7C00 呢?
这个问题的关键是明确“传值调用(Call by value)”与“传引用调用(Call by reference)”的定义。
简单来说:
“传值调用”是将值(values)作为函数参数传入;
“传引用调用”是将变量(variables)本身作为函数参数传入;
一个隐喻:
“传值调用”是我在纸片上写下一些内容并把纸片交给你, 内容可以是一个URL,也可能是一份完整的《战争与和平》副本。
不管是什么,现在都在我给你的那张纸上,所以它实际上是你的纸。你可以在那张纸上随便涂鸦,也可以通过那张纸找到别的什么东西。
“传引用调用”是当我在我的笔记本上写了一些内容然后把笔记本递给你。
你可以在我的笔记本上涂鸦(也许我想要你这么做,也许我没料到你会这么做),然后我保留我的笔记本,你的任何涂鸦也一并保留在笔记本里。
此外,如果你或我写的是有关如何找到其他内容的信息,无论你或我可以去那里,更改这些信息。