enter_pm.mbr
org 0x7C00 ; 该命令表示程序将被装在到偏移地址为0x7C00的地方
; 该命令效果是全局的,但只能使用一次,之后不得再用
; 从该位置开始到整个源代码结束之间的所有标号在被访问时都会隐式地自动加上0x7C00
; 但是和vstart=0x7C00不同,vstart会将整个段内所有指令的汇编地址都加上0x7C00
; 而org不影响汇编地址,仅仅就是在访问标号的时候临时加一个0x7C00
; 并将这个临时的和作为访问结果返回
jmp start
GDT_BEG: ; GDT表的定义
DESC_SG_NULL dd 0x00000000, 0x00000000
DESC_SG_CODE dd 0x7C0001FF, 0x00409A00 ; TYPE=1010,代码段必须可读,否则msg中的内容是无法读出并写到显卡中的
DESC_SG_VIDEO dd 0x8000FFFF, 0x0040920B
DESC_SG_STACK dd 0x00007A00, 0x00409600
GDT_END:
; 段选择子
SLCT_NULL equ DESC_SG_NULL - GDT_BEG
SLCT_CODE equ DESC_SG_CODE - GDT_BEG
SLCT_VIDEO equ DESC_SG_VIDEO - GDT_BEG
SLCT_STACK equ DESC_SG_STACK - GDT_BEG
; GDT总共有多少个双字
GDT_SIZE_DWORD equ (GDT_END - GDT_BEG) / 4
GDTR