linux-0x0A-32位保护模式下的内存访问
在linux-0x09-再谈16位实模式下的内存访问中谈过,CS、DS寄存器中存放的段基址。
当cpu切换到32位保护模式后,CS、DS存放的就不再是段基址了,而是段选择子。顾名思义,就是CPU要根据CS、DS先选择一个段基址,再映射到物理地址。这也是GDT表存在的意义linux-0x08-全局描述符表。
1 段选择子

比如mov [ds:3], ax
DS中的值是0x0008,对应的二进制就是上图,在高14位的16进制就是0x02,含义就是到全局描述符表中找脚标2的地方的段描述符。
找到了段描述符之后读出来段基址=0
再用段基址加上偏移就是物理地址=0+0x3=0x3
2 GDT
在linux-0x08-全局描述符表中有GDT表的详细布局。
linux-0x0A-32位保护模式下的内存访问
https://bannirui.github.io/2025/05/11/Linux/linux-0x0A-32位保护模式下的内存访问/