|
|
@@ -3,7 +3,7 @@ MBR_BASE_ADDR equ 0x7c00 ; mbr 在内存中的位置
|
|
|
LOADER_BASE_ADDR equ 0x900 ; loader 在内存中的位置
|
|
|
LOADER_START_SECTOR equ 0x2 ; loader 在硬盘上的逻辑扇区地址,即 LBA 地址
|
|
|
|
|
|
-;---------------------------- GDT 描述符属性 -----------------------------------------------------------------------------------------------------------------------
|
|
|
+; ---------------------------- GDT 描述符属性 -----------------------------------------------------------------------------------------------------------------------
|
|
|
; 段描述符格式
|
|
|
; 31~24 23 22 21 20 19~16 15 14~13 12 11~8 7~0
|
|
|
; ----------------------------------------------------------
|
|
|
@@ -14,29 +14,30 @@ LOADER_START_SECTOR equ 0x2 ; loader 在硬盘上的逻辑扇区地址,即 LBA
|
|
|
; ----------------------------------------------------------
|
|
|
; | Base | Limit |
|
|
|
; ----------------------------------------------------------
|
|
|
+;
|
|
|
+DESC_G_4K equ 1000_0000_0000_0000_0000_0000b
|
|
|
+DESC_D_32 equ 100_0000_0000_0000_0000_0000b
|
|
|
|
|
|
-DESC_G_4K equ 1OOO_OOOO_OOOO_OOOO_OOOO_OOOOb
|
|
|
-DESC_D_32 equ 1_OO_OOOO_OOOO_OOOO_OOOO_OOOOb
|
|
|
-DESC_L equ 0_OOOOOOOOOOOOOOOOOOOOOb ; 64 位代码标记,不设置, clear(0)
|
|
|
-DESC_AVL equ 0_OOOOOOOOOOOOOOOOOOOOb ; Reserved for future use
|
|
|
+DESC_L equ 00_0000_0000_0000_0000_0000b ; 64 位代码标记,不设置, clear(0)
|
|
|
+DESC_AVL equ 0_0000_0000_0000_0000_0000b ; Reserved for future use
|
|
|
|
|
|
-DESC_LIMIT_CODE2 equ 1111_0000_0000_0000_0000b
|
|
|
+DESC_LIMIT_CODE2 equ 11110000000000000000b
|
|
|
DESC_LIMIT_DATA2 equ DESC_LIMIT_CODE2
|
|
|
-DESC_LIMIT_VIDEO2 equ 0000_0000_0000_0000_0000b
|
|
|
+DESC_LIMIT_VIDEO2 equ 00000000000000000000b
|
|
|
|
|
|
-DESC_P equ 1000_0000_0000_0000b ; 段是否存在。由 CPU 来检查,如果为 0,CPU 将抛出异常
|
|
|
+DESC_P equ 1000000000000000b ; 段是否存在。由 CPU 来检查,如果为 0,CPU 将抛出异常
|
|
|
|
|
|
; DPL 表示 4 种特权级,分别是 0、1、2、3 级特权,数据越小,特权越大
|
|
|
-DESC_DPL_0 equ 000_0000_0000_0000b
|
|
|
-DESC_DPL_1 equ 010_0000_0000_0000b
|
|
|
-DESC_DPL_2 equ 100_0000_0000_0000b
|
|
|
-DESC_DPL_3 equ 110_0000_0000_0000b
|
|
|
+DESC_DPL_0 equ 000000000000000b
|
|
|
+DESC_DPL_1 equ 010000000000000b
|
|
|
+DESC_DPL_2 equ 100000000000000b
|
|
|
+DESC_DPL_3 equ 110000000000000b
|
|
|
|
|
|
-DESC_S_CODE equ 1_0000_0000_0000b ; s 为 0 表示系统段,S 为 1 表示非系统段
|
|
|
+DESC_S_CODE equ 1000000000000b ; s 为 0 表示系统段,S 为 1 表示非系统段
|
|
|
DESC_S_DATA equ DESC_S_CODE
|
|
|
-DESC_S_SYS equ 0_0000_0000_0000b
|
|
|
-DESC_TYPE_CODE equ 1000_0000_0000b ; x=1,c=0,r=0,a=0 代码是可执行的,非一致性,不可读,已访问位 a 清 0
|
|
|
-DESC_TYPE_DATA equ 0010_0000_0000b ; x=0,e=0,w=1,a=0 数据段是不可执行的,向上扩展,可写,已访问位 a 清 0
|
|
|
+DESC_S_SYS equ 0000000000000b
|
|
|
+DESC_TYPE_CODE equ 100000000000b ; x=1,c=0,r=0,a=0 代码是可执行的,非一致性,不可读,已访问位 a 清 0
|
|
|
+DESC_TYPE_DATA equ 001000000000b ; x=0,e=0,w=1,a=0 数据段是不可执行的,向上扩展,可写,已访问位 a 清 0
|
|
|
|
|
|
DESC_CODE_HIGH4 equ (0x00 << 24) + DESC_G_4K + DESC_D_32 + DESC_L + DESC_AVL + DESC_LIMIT_CODE2 + DESC_P + DESC_DPL_0 + DESC_S_CODE + DESC_TYPE_CODE + 0x00
|
|
|
DESC_DATA_HIGH4 equ (0x00 << 24) + DESC_G_4K + DESC_D_32 + DESC_L + DESC_AVL + DESC_LIMIT_CODE2 + DESC_P + DESC_DPL_0 + DESC_S_DATA + DESC_TYPE_DATA + 0x00
|
|
|
@@ -47,5 +48,5 @@ RPL0 equ 00b
|
|
|
RPL1 equ 01b
|
|
|
RPL2 equ 10b
|
|
|
RPL3 equ 11b
|
|
|
-TI_GDT equ 000b
|
|
|
+TI_GDT equ 000b
|
|
|
TI_LDT equ 100b
|