Head.s问题 谢谢了
setup_gdt:lgdt gdt_descr # 加载全局描述符表寄存器(内容已设置好,见232-238 行)。retgdt_descr: # 下面两行是lgdt 指令的6 字节操作数:长度,基址。.word 256*8-1 # so does gdt (not that that's any.long _gdt # magic number, but it works for me :^)# 全局表。前4 项分别是空项(不用)、代码段描述符、数据段描述符、系统段描述符,其中# 系统段描述符linux 没有派用处。后面还预留了252 项的空间,用于放置所创建任务的# 局部描述符(LDT)和对应的任务状态段TSS 的描述符。# (0-nul, 1-cs, 2-ds, 3-sys, 4-TSS0, 5-LDT0, 6-TSS1, 7-LDT1, 8-TSS2 etc...)_gdt: .quad 0x0000000000000000 /* NULL descriptor */.quad 0x00c09a0000000fff /* 16Mb */ # 代码段最大长度16M。.quad 0x00c0920000000fff /* 16Mb */ # 数据段最大长度16M。.quad 0x0000000000000000 /* TEMPORARY - don't use */.fill 252,8,0 /* space for LDT's and TSS's etc */
lea _idt,%edi # _idt 是中断描述符表的地址。mov $256,%ecxrp_sidt:movl %eax,(%edi) # 将哑中断门描述符存入表中。movl %edx,4(%edi)addl $8,%edi # edi 指向表中下一项。dec %ecxjne rp_sidtlidt idt_descr # 加载中断描述符表寄存器值。ret