LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1463|回复: 3

#define _set_gate(gate_addr,type,dpl,addr)

[复制链接]
发表于 2005-12-9 13:49:11 | 显示全部楼层 |阅读模式
#define _set_gate(gate_addr,type,dpl,addr) \
__asm__ ("movw %%dx,%%ax\n\t" \
        "movw %0,%%dx\n\t" \
        "movl %%eax,%1\n\t" \
        "movl %%edx,%2" \
        : \
        : "i" ((short) (0x8000+(dpl<<13)+(type<<8))), \
        "o" (*((char *) (gate_addr))), \
        "o" (*(4+(char *) (gate_addr))), \
        "d" ((char *) (addr)),"a" (0x00080000))
不太明白,有那位能解释一下?
发表于 2005-12-19 13:46:11 | 显示全部楼层
嗯,这个需要看书..
或者在网上搜一下"保护模式"字样
回复 支持 反对

使用道具 举报

发表于 2005-12-19 22:22:23 | 显示全部楼层
这是填充IDT表的过程,因为IDT表中每一项都是8字节长的,所以用上edx,eax两个寄存器用于填充刚刚好,至于这8字节中如何设置则需要参考Intel的保护模式中中断的有关描述,很多介绍LINUX内核的书籍上也有的。
回复 支持 反对

使用道具 举报

发表于 2005-12-20 09:41:59 | 显示全部楼层
intel x86 manual
研究i386 Linux实现必备
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表