02 从 0x7c00 到 0x90000
你好,我是闪客。
你可能会问,这一讲操作系统是不是就该做一些更高深的事情了?想多了,完全没有,等你读完这一讲后,你就知道了。
上一讲,我们讲了CPU 执行操作系统的最开始的两行代码:
这两行代码将数据段寄存器 ds 的值变成了 0x07c0,方便之后访问内存时,利用这个段基址进行寻址。
接下来我们带着这两行代码,继续往下看 6 行,代码如下:
此时,ds 寄存器的值已经是 0x07c0 了,然后又通过同样的方式将 es 寄存器的值变成 0x9000,接着又把 cx 寄存器的值变成 256(代码里确实是用十进制表示的,与其他地方有些不一致,不过不影响)。
现在 ds、es和cx 寄存器的值就都被赋上了确定的值了,我们先接着往下看。
再往下看有两个 sub 指令:
这个 sub 指令很简单,比如:
表示的意思是:
那么这行代码:
就表示:
也就是说,如果 sub 后面的两个寄存器一模一样,就相当于把这个寄存器里的值清零,这是一个基本玩法。