Assembly 为什么MIT'中的代码和数据段选择器是0x8和0x10;何塞引导器?

Assembly 为什么MIT'中的代码和数据段选择器是0x8和0x10;何塞引导器?,assembly,x86,osdev,memory-segmentation,gdt,Assembly,X86,Osdev,Memory Segmentation,Gdt,在麻省理工学院关于引导加载程序的课程部分中,以下代码用于设置内核代码段和数据段选择器: .set PROT_MODE_CSEG, 0x8 # kernel code segment selector .set PROT_MODE_DSEG, 0x10 # kernel data segment selector 可以找到完整的代码 这些特定段选择器背后的含义是什么?为什么它们是0x8和0x10?文档表明它们是“32位代码段”。是什么使它们成为32位代码段?它们是引

在麻省理工学院关于引导加载程序的课程部分中,以下代码用于设置内核代码段和数据段选择器:

.set PROT_MODE_CSEG, 0x8         # kernel code segment selector
.set PROT_MODE_DSEG, 0x10        # kernel data segment selector
可以找到完整的代码


这些特定段选择器背后的含义是什么?为什么它们是0x8和0x10?文档表明它们是“32位代码段”。是什么使它们成为32位代码段?

它们是引用GDT(全局描述符表)中描述符项的选择器。GDT(和/或LDT)中的描述符条目给出给定段的访问权限、属性、基址、大小等。您可以在
boot.S
的底部找到定义的GDT,其中标签
GDT:
。每个条目是8个字节。第一个条目是空选择器,然后它们定义一个32位代码段(从GDT的偏移量0x08开始)和一个32位数据段(从GDT的偏移量0x10开始)。在底部有一篇Wiki文章,其中包含有关GDT的参考资料的附加链接:。这是GDT中的两个第一个选择器。这些可以根据操作系统的需要进行设置。这一个选择将它们用于代码和数据段。它们是引用GDT(全局描述符表)中描述符项的选择器。GDT(和/或LDT)中的描述符条目给出给定段的访问权限、属性、基址、大小等。您可以在
boot.S
的底部找到定义的GDT,其中标签
GDT:
。每个条目是8个字节。第一个条目是空选择器,然后它们定义一个32位代码段(从GDT的偏移量0x08开始)和一个32位数据段(从GDT的偏移量0x10开始)。在底部有一篇Wiki文章,其中包含有关GDT的参考资料的附加链接:。这是GDT中的两个第一个选择器。这些可以根据操作系统的需要进行设置。这一个选择将它们用于代码和数据段。