手把手操作系统之跳转到setup接着执行代码

在上面我们将2扇区的内容已经加载到了0x08200的内存中,其实在第二扇区我们存放我们的setup代码,我们会跳转到0x08200处执行我们的代码, 接下来我们就写我们的setup,并将setup写到我们的boot.img中  ...好了开始工作..


添加setup.s

手把手操作系统之跳转到setup接着执行代码

很简单调用了int 10h的0x0a号功能,是什么来着  想想,对了 就是显示字符,具体的用法,请参考前面的文章,  setup.s准备好了,接下来就是修改我们的Makefile

修改Makefile

手把手操作系统之跳转到setup接着执行代码

Makefile中就是多编译了一个setup.bin 并将setup.bin写到软盘的512字节之后,就是将setup.bin写到了第二扇区

好了,该准备的准备好了,那么接下来的问题来了,我们怎么将CS:IP指向到setup中执行呢, 大家想想… 用jmpi吗。。但nasm不能用此命令会报错的,我想段间进行跳转下而已嘛 OK,我们其实模拟了函数的返回。

修改boot.s 进行跳转

手把手操作系统之跳转到setup接着执行代码

在boot.s中添加代码入上, 当我们执行ret的时候,很happy的  cs:0x0820 IP:0  那么cs:ip=0x08200  cs:ip会到此处执行代码,我们已经将第二扇区的代码加载到了此处,那么接下来就是setup来接管执行任务了,通过bios加载的第一扇区已经完成了任务,后面我们代码的大小就不用受512字节控制了,解放喽…….

结果查看

手把手操作系统之跳转到setup接着执行代码

我们可以看到cs:ip已经到我么的setup中执行代码了