本文接前文—— 《自己动手写操作系统》——制作一个简单的操作系统-CSDN博客内容,回答为什么机器开机后会执行这段汇编代码,这段代码有什么特殊之处?
背景知识
8086CPU
- 处理器是16位,地址总线是20位,访存范围是1MB。
CS和IP寄存器
参考CS和IP寄存器的作用及执行分析_cs寄存器和ip寄存器的作用-CSDN博客得到这几点关键结论:
- 任何时刻,8086CPU都会将CS:IP指向的指令作为下一条需要取出的执行指令
- 8086CPU中的计算公式为 (CS << 4)|IP, 即CS左移4位,然后再加上IP
BIOS
- CPU加电之后,硬件会把一个ROM芯片映射到地址空间
0xF0000~0xFFFFF
上。同时,会把CS寄存器的值改为0xFFFF,其余寄存器的值全部清零,因此此时CS:IP=0xFFFF:0x0000=0xFFFF0
,即下一条即将执行的指令位置。而0xFFFF0~0xFFFFF
之间其实只有16B的空间,这里只是一条跳转指令,跳转到BIOS真正的入口地址:
jmp far f000:e05b #- 这条