21,459
社区成员
发帖
与我相关
我的任务
分享
; 宏 ------------------------------------------------------------------------------------------------------
;
; 描述符
; usage: Descriptor Base, Limit, Attr
; Base: dd
; Limit: dd (low 20 bits available)
; Attr: dw (lower 4 bits of higher byte are always 0)
%macro Descriptor 3
dw %2 & 0FFFFh ; 段界限 1 (2 字节)
dw %1 & 0FFFFh ; 段基址 1 (2 字节)
db (%1 >> 16) & 0FFh ; 段基址 2 (1 字节)
dw ((%2 >> 8) & 0F00h) | (%3 & 0F0FFh) ; 属性 1 + 段界限 2 + 属性 2 (2 字节)
db (%1 >> 24) & 0FFh ; 段基址 3 (1 字节)
%endmacro ; 共 8 字节
;
; 门
; usage: Gate Selector, Offset, DCount, Attr
; Selector: dw
; Offset: dd
; DCount: db
; Attr: db
%macro Gate 4
dw (%2 & 0FFFFh) ; 偏移 1 (2 字节)
dw %1 ; 选择子 (2 字节)
dw (%3 & 1Fh) | ((%4 << 8) & 0FF00h) ; 属性 (2 字节)
dw ((%2 >> 16) & 0FFFFh) ; 偏移 2 (2 字节)
%endmacro ; 共 8 字节
; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
; 门 目标选择子, 偏移, DCount, 属性
LABEL_CALL_GATE_TEST: Gate SelectorCodeDest, 0, 0, DA_386CGate + DA_DPL3
dw (%3 & 1Fh) | ((%4 << 8) & 0FF00h) ; 属性 (2 字节)
dw (0 & 0FFFFh)
dw SelectorCodeDest
dw (0 & 1Fh) | ((DA_386CGate + DA_DPL3 << 8) & 0FF00h)
dw ((0 >> 16) & 0FFFFh)
dw (0 & 0FFFFh)
dw SelectorCodeDest
dw (0 & 1Fh) | ((DA_386CGate | DA_DPL3 << 8) & 0FF00h)
dw ((0 >> 16) & 0FFFFh)
; 宏 ------------------------------------------------------------------------------------------------------
;
; 描述符
; usage: Descriptor Base, Limit, Attr
; Base: dd
; Limit: dd (low 20 bits available)
; Attr: dw (lower 4 bits of higher byte are always 0)
%macro Descriptor 3
dw (%2) & 0FFFFh ; 段界限 1 (2 字节)
dw (%1) & 0FFFFh ; 段基址 1 (2 字节)
db ((%1) >> 16) & 0FFh ; 段基址 2 (1 字节)
dw (((%2) >> 8) & 0F00h) | ((%3) & 0F0FFh) ; 属性 1 + 段界限 2 + 属性 2 (2 字节)
db ((%1) >> 24) & 0FFh ; 段基址 3 (1 字节)
%endmacro ; 共 8 字节
;
; 门
; usage: Gate Selector, Offset, DCount, Attr
; Selector: dw
; Offset: dd
; DCount: db
; Attr: db
%macro Gate 4
dw ((%2) & 0FFFFh) ; 偏移 1 (2 字节)
dw (%1) ; 选择子 (2 字节)
dw ((%3) & 1Fh) | (((%4) << 8) & 0FF00h) ; 属性 (2 字节)
dw (((%2) >> 16) & 0FFFFh) ; 偏移 2 (2 字节)
%endmacro ; 共 8 字节