gpt4 book ai didi

assembly - 为什么在xv6中gdtdesc中有sizeof(gdt)-1

转载 作者:行者123 更新时间:2023-12-02 02:09:28 24 4
gpt4 key购买 nike

bootasm.S

.p2align 2                                # force 4 byte alignment
gdt:
SEG_NULLASM # null seg
SEG_ASM(STA_X|STA_R, 0x0, 0xffffffff) # code seg
SEG_ASM(STA_W, 0x0, 0xffffffff) # data seg

gdtdesc:
.word (gdtdesc - gdt - 1) # sizeof(gdt) - 1
.long gdt # address gdt

这用于

lgdt gdtdesc

gdtdesc 的第一个字不应该是 gdt 的大小(以字节为单位)吗?在本例中,它是 3*8=24,等于 gdtdesc - gdt。为什么这里是gdtdesc - gdt - 1

最佳答案

根据手册,lgdt想要 GDT 大小(以字节为单位),但也将其描述为“限制”。最后一个字节的大小与地址之间的措辞是不明确的。 (这作为一种允许更高限制而不环绕 16 位限制的方式是有意义的。)

但是https://wiki.osdev.org/GDT_Tutorial中的例子使用 sizeof(gdt) 所以这要么是 xv6 中的错误,要么是 osdev 教程中的错误。

https://wiki.osdev.org/Global_Descriptor_Table同意 xv6,说“限制”是 size-1,与 GDT 教程不同。这是有道理的:

The size is the size of the table subtracted by 1. This is because the maximum value of size is 65535, while the GDT can be up to 65536 bytes (a maximum of 8192 entries). Further no GDT can have a size of 0.

如果您想确认详细信息,请查看Intel或AMD的手册;他们希望在系统开发细节中的某个地方澄清这一点,与 lgdt 的指令集引用条目分开。

或者你希望他们会。但不幸的是英特尔表示:

Section 2.4.1 Global Descriptor Table Register (GDTR)

"the table limit specifies the number of bytes in the table".

这可能只是意味着无论谁写它都如此陷入限制=最后一个字节的偏移量=大小的想法中,他们甚至没有意识到这一点不清楚。段限制本身(在 GDT 条目中)也以这种方式工作,使用 0xFFFFF (粒度 = 页)将限制指定为 4GiB 地址空间的最顶部,即无限制。

关于assembly - 为什么在xv6中gdtdesc中有sizeof(gdt)-1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67901342/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com