最终生成的文件实际上是由两部分组成的:第一部分是start.S的汇编生成的部分代码,这部分代码被放入了第一个扇区,也就是最开始的部分。而另外一部分则是os.h的代码,这部分代码是通过使用dd命令写入到磁盘的相应位置的。
为实现将start.s文件生成的代码加载到内存中的目标,我们需要保证第一个扇区的最后两个字节必须为0xAA,0x55,这对于编译过程至关重要。若不加上这个特定的代码,编译器将会提示无法找到引导的设备,这将会导致编译失败。
终端运行make然后F5运行,可能会导致start.s文件生成的代码加载到内存中,但如果没有两个特殊字符0xAA和0x55,那么BIOS将无法识别其为有效的代码,也就无法加载start.s文件并进行正常的运行。
写上代码
.org 0x1fe //十进制是510,第一个字节的最后两个字节是0x55和0xaa,所以位置就是510,.org 0x1fe是偏移了510字节
.byte 0x55, 0xaa // 510字节的地方就是0x55,511字节的地方就是0xaa
//.byte 就相当于unsigned char s[] = {0x55,0xaa};
运行会发现在代码位置停止,QEMU会显示从disk去启动
在DEBUG这样的计算机调试工具上面,可以很容易地看到处理器的寄存器信息,了解CPU的运行状态和指令执行情况。