【发布时间】:2018-02-13 07:46:24
【问题描述】:
我正在尝试在此处更改此代码中的 VGA。人们说我可以使用 int 10h,但是,我在虚拟框中出现错误。此时我想通过任何类型的VGA设置屏幕。我设法设置了 Globa 描述表并写入 80x25 屏幕,但没有初始化 VGA。我该怎么做?
代码:
;===DATA============================================================================================
[bits 16]
[org 0x500]
jmp boot
;===VARIABLES======================================================================================
gdt_start:
dd 0
dd 0
dw 0xFFFF
dw 0
db 0
db 10011010b
db 11001111b
db 0
dw 0xFFFF
dw 0
db 0
db 10010010b
db 11001111b
db 0
gdt_end:
GDT_loader:
dw gdt_end - gdt_start - 1
dd gdt_start
;===CODE============================================================================================
load_GDT:
pusha
cli
lgdt [GDT_loader]
sti
popa
ret
boot:
; Initalize the GDT
; Setup Stacks
cli
mov ax, 0x0000
mov ss, ax
mov sp, 0xFFFF
sti
; Clear segment registers
mov ax, 00h
mov ds, ax
mov es, ax
mov fs, ax
mov gs, ax
call load_GDT
cli
mov eax, cr0
or eax, 1
mov cr0, eax
jmp 08h:kernel
;===VARIABLES=======================================================================================
bootingmessage db "Starting up", 0x00
;===DATA============================================================================================
[bits 32]
;===CODE============================================================================================
kernel:
mov ax, 10h
mov ds, ax
mov es, ax
mov ss, ax
mov esp, 0x900000
cli
;*****************
;Setup VGA Here
;*****************
jmp $
【问题讨论】:
-
我不知道“初始化 VGA”在这种情况下是什么意思。你的意思是set video mode?
-
“我收到一个错误。”什么错误?