小编rap*_*piz的帖子

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

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
Run Code Online (Sandbox Code Playgroud)

这用于

lgdt gdtdesc
Run Code Online (Sandbox Code Playgroud)

gdtdesc 的第一个字不应该是 gdt 的字节大小吗?在这种情况下,它是3*8=24,它等于gdtdesc - gdt。为什么gdtdesc - gdt - 1在这里?

x86 assembly operating-system xv6 gdt

2
推荐指数
1
解决办法
66
查看次数

标签 统计

assembly ×1

gdt ×1

operating-system ×1

x86 ×1

xv6 ×1