在 0 級程式碼段中,將來源資料段的資料複製到目標資料段,所有段描述符置於 GDT。
DSEG SEGMENT USE16
GDT LABEL BYTE
DUMMY DESC <>
CODEM DESC <...> ; 程式碼段描述符
DATAS DESC <...> ; 來源資料段描述符
DATAD DESC <...> ; 目標資料段描述符
VGDTR PDESC <...> ; GDTR 偽描述符
GDTLEN = $ - GDT
CODEM_SEL = CODEM - GDT
DATAS_SEL = DATAS - GDT
DATAD_SEL = DATAD - GDT
DSEG ENDS
START PROC
; 設定各描述符基址、界限、屬性 (略)
LGDT QWORD PTR VGDTR
CLI
MOV EAX, CR0
OR EAX, 1
MOV CR0, EAX
JMP FAR PTR CODEM_SEL:VIRTUAL ; 清流水線,進入保護模式
VIRTUAL:
MOV AX, DATAS_SEL
MOV DS, AX
MOV AX, DATAD_SEL
MOV ES, AX
XOR SI, SI
XOR DI, DI
MOV CX, DATA_LEN
REP MOVSB
; 返回實模式 (略)
START ENDP
保護模式下的段描述符設置與資料傳輸是作業系統開發與嵌入式韌體的基礎功。熟練掌握 GDT/LDT/IDT 操作、模式切換流程,是寫出可靠底層代碼的前提。