最近在看《自己动手编写操作系统》一书。发现用如下代码初始化描述符:
Code
xor eax, eax
mov ax, cs
shl eax, 4
add eax, LABEL_SEG_CODE32
mov word [LABEL_DESC_CODE32 + 2], ax
shr eax, 16
mov byte [LABEL_DESC_CODE32 + 4], al
mov byte [LABEL_DESC_CODE32 + 7], ah
xor eax, eax
mov ax, cs
shl eax, 4
add eax, LABEL_SEG_CODE32
mov word [LABEL_DESC_CODE32 + 2], ax
shr eax, 16
mov byte [LABEL_DESC_CODE32 + 4], al
mov byte [LABEL_DESC_CODE32 + 7], ah
但是选择子的结构的低3位确有别的用处。一直疑惑为什么低3位设置值不影响选择子中偏移值。后来回想段描述符占用8字节也就是说对于段描述符的偏移来说低3位一直为0.