41 #define NULL_SEGMENT 0
43 #define KERNEL_DATA_SEGMENT (1 * 8)
45 #define KERNEL_CODE_SEGMENT (2 * 8)
56 #define MAKE_GDT_TYPE1(SegmentType,S,DPL,P) \
57 ((((P) << 7) & 0x80) | (((DPL) << 5) & 0x60) | (((S) << 4) & 0x10) | ((SegmentType) & 0x0f))
65 #define MAKE_DATA_SEGMENT(expdown,writable) \
66 (((((expdown) << 2) & 0x04) | (((writable) << 1) & 0x02)) & 0x06)
73 #define MAKE_CODE_SEGMENT(conforming,readable) \
74 ((((((conforming) << 2) & 0x04) | (((readable) << 1) & 0x02)) | 0x08) & 0x0e)
77 #define DATA_SEGMENT_TYPE MAKE_DATA_SEGMENT(0,1)
79 #define CODE_SEGMENT_TYPE MAKE_CODE_SEGMENT(0,1)
133 static inline void ckGdtInitNull(
Gdt *pGdt)
135 ((
int *)pGdt)[1] = ((
int *)pGdt)[0] = 0;
unsigned reserved
Definition: gdt.h:109
unsigned G
Definition: gdt.h:109
#define GDT_TABLE_ADDRESS
GDT 테이블의 선형 주소입니다.
Definition: memory_map.h:62
unsigned P
Definition: gdt.h:99
uint8_t Address_24_32
Definition: gdt.h:114
unsigned S
Definition: gdt.h:99
uint8_t GdtType2
Gdt 구조체를 참조하십시오.
Definition: gdt.h:84
uint16_t Size_0_15
Definition: gdt.h:91
unsigned DPL
Definition: gdt.h:99
unsigned Size_16_19
Definition: gdt.h:108
unsigned AVL
Definition: gdt.h:109
void ckGdtLoad(uint16_t size, Gdt *address)
lgdt 명령어로 GDT 테이블을 로드합니다.
GDT를 나타내는 구조체입니다.
Definition: gdt.h:89
void ckGdtInit(Gdt *pGdt, uint32_t address, uint32_t size, GdtType1 type1)
Gdt 구조체를 초기화합니다.
Definition: gdt.c:63
unsigned D
Definition: gdt.h:109
GdtType2 type2
Definition: gdt.h:111
void ckGdtTableInitialize(void)
GDT 테이블을 초기화합니다.
Definition: gdt.c:36
GdtType1 type1
Definition: gdt.h:101
uint16_t Address_0_15
Definition: gdt.h:91
struct tagGdt Gdt
GDT를 나타내는 구조체입니다.
unsigned SegmentType
Definition: gdt.h:99
uint8_t GdtType1
Gdt 구조체를 참조하십시오.
Definition: gdt.h:82
uint8_t Address_16_23
Definition: gdt.h:93