Skip to content

05 · 长模式:在 32 位的世界里搭一座 64 位的桥 ​

上一卷收工的时候,咱们撂下过一句话:0x1000 起留着的三张页表地界,从画低内存地图的那天起就一直空着,也该住进去了。本站咱们就把它住满,然后再去推 64 位的门。本站咱们拿页表当桥,所以桥面得在推门之前铺好。门闩是 EFER 里的一个位,咱们不拨开它,门就推不动了。CR0 上的 PG 就是推门的那一下,推开的瞬间 CPU 立刻按新的翻译取指令,要是门后没有铺好的路,机器连一句遗言都不会给你留下。末了的那句远跳,把执行流真正送到桥的对岸。少了哪一样,或者次序走错了,机器的回应都是同一种:三重故障。构建那头咱们还有一件大事:64 位的代码要住进工程里的第四户编译世界,上一卷咱们数过三户,这一卷添的就是新的一户。它的链接也得自己住一条,因为链接器根本不允许 64 位的目标件进 32 位的链,咱们得把它编好、剥成裸字节,再当成数据拼进 16 位的镜像里。

本站咱们要干的活就是把桥铺到对岸。桥那头等着过桥的,就是咱们那个真正的 64 位内核:boot 把它从磁盘读进内存,它拿走问内存、配屏幕时存下的家底、再往高处安家,而终点的交接,就是把执行流亲手递到它的手里。

r05_long_mode-2-gfc5569b · fc5569b · 2026-10-01