陷阱门
make_gate_descriptor:
; 输入:
; EAX=门代码在段内偏移地址
; BX=门代码所在段的选择子
; CX=段类型及属性等(各属性位都在原始位置)
; 返回:
; EDX 描述符高32位
; EAX 描述符低32位
push ebx
push ecx
mov edx,eax
and edx,0xffff0000 ;保留偏移地址高16位于EDX高16位置,低16位清零
or dx,cx ;将CX中的属性部分写入EDX低16位
and eax,0x0000ffff ;保留偏移地址低16位于EAX低16位置,高16位清零
shl ebx,16 ;将EBX左移16位,保存门代码段选择子,低16位写零
or eax,ebx ;将段选择子写入EAX寄存器高16位
pop ecx
pop ebx
retf