문제가 있습니다. 마지막으로 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.
이 사람이 문제가 어디 알고 있나요 (가상 머신의 상태는 지금 '전문가 명상'이다)? 작동 시키려면 어떻게해야합니까? 도와주세요. 여기
가상 컴퓨터에서 보호 모드로 전환 할 수 없으면 호스트와 협상해야합니다. DPMI가 표준입니다 (물론, 그렇습니다). VirtualBox가 구현하는지는 알 수 없습니다. http://en.wikipedia.org/wiki/DPMI –
그래서 어떻게해야합니까? – user35443
나는 이해하지 못한다. 무엇을 사용해야합니까? 영어 문구가별로 좋지 않습니다. – user35443