在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
在这里?