2012-08-07 5 views
1

문제가 있습니다. 마지막으로 GDT, A20 및 보호 모드로 게임하고 있습니다. GDT에 대한 간단한 코드가 있습니다.오류없이 점프 할 수 없습니다.

gdt_start: 
gdt_null: 
    dd 00000000h 
    dd 00000000h 

gdt_code: 
    dw 0xFFFF 
    dw 0 
    db 0 
    db 10011010b 
    db 11001111b 
    db 00000000b 

gdt_data: 
    dw 0xFFFF  
    dw 0     
    db 0     
    db 10010010b    
    db 11001111b    
    db 0 

gdt_end: 
gdt_ptr: 
    dw gdt_end - gdt_data - 1 
    dd gdt_start 

install_gdt: 
    cli; 
    pusha 
    lgdt [gdt_ptr] 
    sti 
    popa 

    ret 

매우 간단합니다. 두 번째 단계 코드의

ena20: 
    mov al, 0xDD 
    out 0x64, al 
    ret 

그리고 일부 : 내가 단계별로 이동하려고

call install_gdt 
    call ena20 

    cli 
    mov eax, cr0 
    or eax, 1 
    mov cr0, eax 

    jmp 0x8:stage3 
;------------------------------------------- 
;STAGE3 
;------------------------------------------- 
BITS 32 
stage3: 
    ;mov ax, 0x10 
    ;mov ds, ax 
    ;mov ss, ax 
    ;mov es, ax 
    ;mov esp, 90000h 

    ;mov edi, 0xB8000 
    ;mov byte [edi], 'A' 

    jmp $ 

여기 수 있도록 내 A20입니다. 내가 성공적으로 GDT를 레지스터에로드하고 A20을 활성화하고 보호 모드로 이동할 수 있습니다. 내가 jmp 0x8:stage3려고 할 때, 나는 버추얼 박스에서 오류를 받고 있어요 :

A critical error has occurred while running the virtual machine and 
the machine execution has been stopped. 

이 사람이 문제가 어디 알고 있나요 (가상 머신의 상태는 지금 '전문가 명상'이다)? 작동 시키려면 어떻게해야합니까? 도와주세요. 여기

+0

가상 컴퓨터에서 보호 모드로 전환 할 수 없으면 호스트와 협상해야합니다. DPMI가 표준입니다 (물론, 그렇습니다). VirtualBox가 구현하는지는 알 수 없습니다. http://en.wikipedia.org/wiki/DPMI –

+0

그래서 어떻게해야합니까? – user35443

+0

나는 이해하지 못한다. 무엇을 사용해야합니까? 영어 문구가별로 좋지 않습니다. – user35443

답변

1

:

gdt_ptr: 
    dw gdt_end - gdt_data - 1 
    dd gdt_start 

gdt_endgdt_data에서 GDT 크기와 아직 시작 gdt_start에 있습니다 왜?

또한 GDT가 포함 된 리얼 모드 세그먼트는 어떻습니까? gdt_start 값에 어떻게 포함 시키시겠습니까? 여기

는 :

mov eax, cr0 
    or eax, 1 
    mov cr0, eax 

    jmp 0x8:stage3 

BITS 32 
stage3: 

당신은 기본 0 관련 GDT 항목에 따라 세그먼트에서 stage3합니다. 그럴까요? IOW, stage3의 값은이 레이블에있는 코드의 실제 주소와 같습니까?

+0

gdt_data의 GDT 크기가 gdt_end인데 왜 시작은 gdt_start입니까? - 복구 됨, 여전히 작동하지 않음 – user35443

+0

...이 레이블에있는 코드의 실제 주소와 동일한 stage3의 값입니까? -yes – user35443

+0

관련 GDT 항목에 따라 밑수가 0 인 세그먼트에서 stage3을 원합니다. 그럴까요? -이 질문을 이해하지 못합니다. – user35443