- 博客(3)
- 收藏
- 关注
原创 Linux源码0.11解析:03_head.s
在执行main函数之前,先要执行三个由汇编代码生成的程序,即bootsect、setup和head。之后,才执行由main函数开始的用C语言编写的操作系统内核程序。前面我们讲过,第一步,加载bootsect到0x07C00,然后复制到0x90000;第二步,加载setup到0x90200。值得注意的是,这两段程序是分别加载、分别执行的。head程序与它们的加载方式有所不同。大致的过程是,先将head.s汇编成目标代码,将用C语言编写的内核程序编译成目标代码,然后链接成system模块。
2023-04-12 20:32:51
241
原创 Linux源码0.11解析:02_setup.s
因为中断号是不能冲突的, Intel 把 0 到 0x19 号中断都作为保留中断,比如 0 号中断就规定为除零异常,软件自定义的中断都应该放在这之后,但是 IBM 在原 PC 机中搞砸了,跟保留中断号发生了冲突,以后也没有纠正过来,所以我们得重新对其进行编程,不得不做,却又一点意思也没有。所以,这里取的就是这个代码段描述符,段基址是 0,偏移也是 0,那加一块就还是 0 咯,所以最终这个跳转指令,就是跳转到内存地址的 0 地址处,开始执行。但这些准备工作还不够,后续的准备工作将由head程序来完成。
2023-04-12 20:29:05
174
原创 Linux源码0.11解析: 01_bootsect.s
本文解析bootsect.s程序。即从硬盘启动扇区的512字节中复制数据到内存中0x7c00位置,并跳转到该位置执行,
2023-04-12 20:21:50
465
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人