You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

251 lines
9.8 KiB

; ͼʾ��
; �ߵ�ַ�������������������������������������������������������͵�ַ
; | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
; |7654321076543210765432107654321076543210765432107654321076543210| <- 8 ֽ
; |--------========--------========--------========--------========|
; ���������ש��������������ש����������������������ש���������������
; ��31..24�� (����ͼ) �� �λ�ַ(23..0) �� �ν���(15..0)��
; �� �� �� �� ��
; �� ��ַ2���۩��ک� �٩���ַ1b�� ��ַ1a �� �ν���1 ��
; �ǩ������贈�����ש������贈���������������������贈��������������
; �� %6 �� %5 �� %4 �� %3 �� %2 �� %1 ��
; ���������ߩ������ߩ������ߩ������ߩ��������������ߩ���������������
; �� \_________
; �� \__________________
; �� \________________________________________________
; �� \
; �������ש����ש����ש����ש����ש����ש����ש����ש����ש����ש����ש����ש����ש����ש����ש�����
; �� 7 �� 6 �� 5 �� 4 �� 3 �� 2 �� 1 �� 0 �� 7 �� 6 �� 5 �� 4 �� 3 �� 2 �� 1 �� 0 ��
; �ǩ����贈���贈���贈���贈���ߩ����ߩ����ߩ����贈���贈���ߩ����贈���贈���ߩ����ߩ����ߩ�����
; �� G �� D �� 0 �� AVL�� ��� 2 (19..16) �� P �� DPL �� S �� TYPE ��
; �ǩ����ߩ����ߩ����ߩ����贈���������������������贈���ߩ����������ߩ����ߩ�����������������������
; �� ��: ���� 2 �� ��: ��� 2 �� ��: ����1 ��
; �������������������������ߩ����������������������ߩ�����������������������������������������������
; �ߵ�ַ �͵�ַ
;
;
; ˵��:
;
; (1) P: ����(Present)�
; P=1 ��ʾ�������Ե�ַת������Ч�ģ�����˵���������������Ķδ��ڣ������ڴ��У�
; P=0 ��ʾ�������Ե�ַת����Ч�����öβ����ڡ�ʹ�ø������������ڴ�����ʱ�������쳣��
;
; (2) DPL: ��ʾ��������Ȩ��(Descriptor Privilege level)����2λ�����涨���������ε���Ȩ����������Ȩ���飬�Ծ����Ըö��ܷ����ʡ�
;
; (3) S: ˵�������������͡�
; ���ڴ洢�����������ԣ�S=1����������ϵͳ������������������(S=0)��
;
; (4) TYPE: ˵���洢���������������Ĵ洢�εľ������ԡ�
;
;
; ���ݶ����� ����ֵ ˵��
; ----------------------------------
; 0 ֻ��
; 1 ֻ�����ѷ���
; 2 ��/д
; 3 ��/д���ѷ���
; 4 ֻ����������չ
; 5 ֻ����������չ���ѷ���
; 6 ��/д��������չ
; 7 ��/д��������չ���ѷ���
;
;
; ����ֵ ˵��
; ���������� ----------------------------------
; 8 ִֻ��
; 9 ִֻ�С��ѷ���
; A ִ��/��
; B ִ��/�����ѷ���
; C ִֻ�С�һ������
; D ִֻ�С�һ�����Ρ��ѷ���
; E ִ��/����һ������
; F ִ��/����һ�����Ρ��ѷ���
;
;
; ϵͳ������ ���ͱ��� ˵��
; ----------------------------------
; 0 <δ>
; 1 ����286TSS
; 2 LDT
; 3 �286TSS
; 4 286������
; 5 ������
; 6 286���
; 7 286������
; 8 ���
; 9 ����386TSS
; A <δ>
; B �386TSS
; C 386������
; D <δ>
; E 386���
; F 386������
;
; (5) G: �������(Granularity)�
; G=0 ��ʾ��������Ϊ�ֽڣ�
; G=1 ��ʾ��������Ϊ4K �ֽڡ�
; ע�⣬��������ֻ�Զν�����Ч���Զλ���ַ��Ч���λ���ַ�������ֽ�Ϊ��λ��
;
; (6) D: Dλ��һ����������λ����������ִ�жΡ�������չ���ݶλ���SS�Ĵ���Ѱַ�Ķ�(ͨ���Ƕ�ջ��)�������������е�����������ͬ��
; �� ��������ִ�жε��������У�Dλ������ָ��ʹ�õĵ�ַ����������Ĭ�ϵĴ�С��
; �� D=1��ʾĬ��������ָ��ʹ��32λ��ַ��32λ��8λ�������������Ĵ�����Ҳ��Ϊ32λ�����Σ�
; �� D=0 ��ʾĬ�������£�ʹ��16λ��ַ��16λ��8λ�������������Ĵ�����Ҳ��Ϊ16λ�����Σ�����80286���ݡ�����ʹ�õ�ַ��Сǰ׺�Ͳ�������Сǰ׺�ֱ��ı�Ĭ�ϵĵ�ַ���������Ĵ�С��
; �� ��������չ���ݶε��������У�Dλ�����ε��ϲ��߽硣
; �� D=1��ʾ�ε��ϲ�����Ϊ4G��
; �� D=0��ʾ�ε��ϲ�����Ϊ64K������Ϊ����80286���ݡ�
; �� ��������SS�Ĵ���Ѱַ�Ķ��������У�Dλ������ʽ�Ķ�ջ����ָ��(��PUSH��POPָ��)ʹ�ú��ֶ�ջָ���Ĵ�����
; �� D=1��ʾʹ��32λ��ջָ���Ĵ���ESP��
; �� D=0��ʾʹ��16λ��ջָ���Ĵ���SP������80286���ݡ�
;
; (7) AVL: ����������λ��80386�Ը�λ��ʹ��δ���涨��Intel��˾Ҳ��֤���󿪷������Ĵ�����ֻҪ��80386���ݣ��Ͳ����Ը�λ��ʹ�����κζ������涨��
;
;----------------------------------------------------------------------------
; ����������ֵ˵��
; ����:
; DA_ : Descriptor Attribute
; D : ���ݶ�
; C : ������
; S : ϵͳ��
; R : ֻ��
; RW : ��д
; A : �ѷ���
; ���� : �ɰ���������˼����
;----------------------------------------------------------------------------
DA_32 EQU 4000h ; 32 �
DA_LIMIT_4K EQU 8000h ; �ν�������Ϊ 4K �ֽ�
DA_DPL0 EQU 00h ; DPL = 0
DA_DPL1 EQU 20h ; DPL = 1
DA_DPL2 EQU 40h ; DPL = 2
DA_DPL3 EQU 60h ; DPL = 3
;----------------------------------------------------------------------------
; �洢������������ֵ˵��
;----------------------------------------------------------------------------
DA_DR EQU 90h ; ���ڵ�ֻ�����ݶ�����ֵ
DA_DRW EQU 92h ; ���ڵĿɶ�д���ݶ�����ֵ
DA_DRWA EQU 93h ; ���ڵ��ѷ��ʿɶ�д���ݶ�����ֵ
DA_C EQU 98h ; ���ڵ�ִֻ�д���������ֵ
DA_CR EQU 9Ah ; ���ڵĿ�ִ�пɶ�����������ֵ
DA_CCO EQU 9Ch ; ���ڵ�ִֻ��һ�´���������ֵ
DA_CCOR EQU 9Eh ; ���ڵĿ�ִ�пɶ�һ�´���������ֵ
;----------------------------------------------------------------------------
; ϵͳ������������ֵ˵��
;----------------------------------------------------------------------------
DA_LDT EQU 82h ; �ֲ���������������ֵ
DA_TaskGate EQU 85h ; ����������ֵ
DA_386TSS EQU 89h ; ���� 386 ����״̬������ֵ
DA_386CGate EQU 8Ch ; 386 ����������ֵ
DA_386IGate EQU 8Eh ; 386 �ж�������ֵ
DA_386TGate EQU 8Fh ; 386 ����������ֵ
;----------------------------------------------------------------------------
; ѡ����ͼʾ:
; �������ש����ש����ש����ש����ש����ש����ש����ש����ש����ש����ש����ש����ש����ש����ש�����
; �� 15 �� 14 �� 13 �� 12 �� 11 �� 10 �� 9 �� 8 �� 7 �� 6 �� 5 �� 4 �� 3 �� 2 �� 1 �� 0 ��
; �ǩ����ߩ����ߩ����ߩ����ߩ����ߩ����ߩ����ߩ����ߩ����ߩ����ߩ����ߩ����ߩ����贈���贈���ߩ�����
; �� ���������� �� TI �� RPL ��
; �������������������������������������������������������������������������������ߩ����ߩ�����������
;
; RPL(Requested Privilege Level): ������Ȩ����������Ȩ���顣
;
; TI(Table Indicator): ������������ָʾλ
; TI=0 ָʾ��ȫ����������GDT�ж�ȡ��������
; TI=1 ָʾ�Ӿֲ���������LDT�ж�ȡ��������
;
;----------------------------------------------------------------------------
; ѡ��������ֵ˵��
; ����:
; SA_ : Selector Attribute
SA_RPL0 EQU 0 ; ��
SA_RPL1 EQU 1 ; �� RPL
SA_RPL2 EQU 2 ; ��
SA_RPL3 EQU 3 ; ��
SA_TIG EQU 0 ; ��TI
SA_TIL EQU 4 ; ��
;----------------------------------------------------------------------------
;----------------------------------------------------------------------------
; ��ҳ����ʹ�õij���˵��
;----------------------------------------------------------------------------
PG_P EQU 1 ; ҳ��������λ
PG_RWR EQU 0 ; R/W ����λֵ, ��/ִ��
PG_RWW EQU 2 ; R/W ����λֵ, ��/д/ִ��
PG_USS EQU 0 ; U/S ����λֵ, ϵͳ��
PG_USU EQU 4 ; U/S ����λֵ, �û���
;----------------------------------------------------------------------------
; =========================================
; FLAGS - Intel 8086 Family Flags Register
; =========================================
;
; |11|10|F|E|D|C|B|A|9|8|7|6|5|4|3|2|1|0|
; | | | | | | | | | | | | | | | | | '--- CF����Carry Flag
; | | | | | | | | | | | | | | | | '--- 1
; | | | | | | | | | | | | | | | '--- PF����Parity Flag
; | | | | | | | | | | | | | | '--- 0
; | | | | | | | | | | | | | '--- AF����Auxiliary Flag
; | | | | | | | | | | | | '--- 0
; | | | | | | | | | | | '--- ZF����Zero Flag
; | | | | | | | | | | '--- SF����Sign Flag
; | | | | | | | | | '--- TF����Trap Flag (Single Step)
; | | | | | | | | '--- IF����Interrupt Flag
; | | | | | | | '--- DF����Direction Flag
; | | | | | | '--- OF����Overflow flag
; | | | | '----- IOPL����I/O Privilege Level (286+ only)
; | | | '----- NT����Nested Task Flag (286+ only)
; | | '----- 0
; | '----- RF����Resume Flag (386+ only)
; '------ VM����Virtual Mode Flag (386+ only)
;
; ע: see PUSHF POPF STI CLI STD CLD
;
; �� ------------------------------------------------------------------------------------------------------
;
; ������
; 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 ; �ν��� 0--15 (2 �ֽ�)
dw %1 & 0FFFFh ; �λ�ַ 0--15 (2 �ֽ�)
db (%1 >> 16) & 0FFh ; �λ�ַ 16--23 (1 �ֽ�)
db %3 & 0xFF ;�����Եĵ�8λ 0--7
db ((%2 >> 16) & 0Fh) | (%3 >> 8) ; �ν���16--19λ ���� 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 �ֽ�
; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^