03 做好访问内存的最基础准备工作
你好,我是闪客。
这一讲我们要探索的问题是,操作系统是怎么为程序访问内存的方式做初步规划的?
上一讲咱们说到,操作系统的代码最开头的 512 字节的数据,先从硬盘的启动区移动到了内存 0x7c00 处,然后又立刻被移动到 0x90000 处,并且跳转到 0x90000 加上 go 这个标签所代表的偏移量。

那我们接下来,就继续把目光放在 go 这个标签的位置,跟着 CPU 执行的步伐往后看。
一眼望去,全都是 mov 操作,那就很好办了。这段代码的直接意思很容易理解,就是把 cs 寄存器的值分别复制给 ds、es 和 ss 寄存器,然后又把 0xFF00 给了 sp 寄存器。
回顾下 CPU 寄存器的图解:

由此也可以看出,其实操作系统最开始这几行代码的难点并不在翻译,而是在于它要完成什么事情,而要理解它们要完成的事情,就需要计算机体系结构的知识,说白了就是指 Intel CPU 的使用说明。
如果你能把 Intel CPU 手册阅读一遍并且有个大体的认识,那这几行代码就不在话下了。
但对于大部分软件工程师来说,Intel CPU 手册还是过于底层了,所以建议你课后真正花时间去系统了解一下。这里你先听我往下讲就好了,研读 Linux0.11 源码需要用到的核心知识点我都会告诉你。