2013-01-16 4 views
0

글로벌 디스크립터 테이블 (GDT)의 기초를 밟았으며 ASM을 사용하여 "GDT.inc"를 성공적으로 작성하여 부트 로더에 쉽게 포함시킬 수 있습니다. . 아기 단계로서 난 메모리 (메모리의 어떤 부분)은 0xFFFFFFFF를글로벌 디스크립터 테이블에 두 개의 개별 세그먼트를 생성하는 방법

; null descriptor 
    dd 0    ; null descriptor--just fill 8 bytes with zero 
    dd 0 

; code descriptor:   ; code descriptor. Right after null descriptor 
    dw 0FFFFh   ; limit low 
    dw 0    ; base low 
    db 0    ; base middle 
    db 10011010b   ; access 
    db 11001111b   ; granularity 
    db 0    ; base high 

; data descriptor:   ; data descriptor 
    dw 0FFFFh   ; limit low (Same as code) 
    dw 0    ; base low 
    db 0    ; base middle 
    db 10010010b   ; access 
    db 11001111b   ; granularity 
    db 0    ; base high 

지금 내 목적 GDT를 이용하여 두 개의 별개의 영역을 생성하는 것이다 바이트 읽기 및 첫 번째 바이트에서 작성하는 코드 디스크립터 데이터 디스크립터를 구성한 예를 들어, 처음에는 512B를 하나의 영역으로, 다음으로 512B를 다른 영역으로 사용하고 남은 공간은 사용되지 않은 상태로 둡니다.

어떻게해야합니까?

답변

1

기본 주소가 & 인 곳을 바꿀 수 있습니다. 그래서 예에서 당신은 .base =을 0x200 으로 제한 할 =을 0x200

다음 데이터 기술자에 대한 코드 설명 .base = 0x0으로 으로 제한 할 =을 0x200 // 512 바이트

에 대한

했다 1 KB가 비어지면 나머지 메모리가 있습니다

자세한 내용은 "http://wiki.osdev.org/GDT_Tutorial"을 참조하십시오.