"门",英文原名Gate,门是一种描述符,该描述符的结构如下图:
直观来看,一个门描述了由一个选择子和一个偏移所指定的线性地址,程序正是通过这个地址进行转移的。门描述符分为4种:
调用门(Call gates)
中断门(Interrupt gates)
陷阱门(Trap gates)
任务门(Task gates)
这个例子中,我们用到调用门。简单起见,不涉及任何特权级转变。
使用调用门的具体步骤如下:
1、增加通过调用门转移的目标代码段,由于我们要用call指令使用调用门,所以在代码结尾处加了retf
2、加入上面代码段的选择子和描述符,并且初始化这个描述符
3、添加调用门和调用门选择子
4、使用调用门
代码pm.inc添加了门描述符,如下:
代码pmtest.asm 如下:
在DOSBOX显示结果如下图: