是的,基本上我想从16位系统改为32位系统,(后来64位系统才能工作),但它不工作。Nasm没有给予我一个错误,但它不能在virtualbox中运行。如果有人了解汇编,这里有一个链接:
https://github.com/Xulum12/assembly/blob/main/boot2.asm
[org 0x7c00]
GDT_Start:
null_descriptor:
dd 0
dd 0
code_descriptor:
dw 0xffff
dw 0
dw 0
db 10011010
db 11001111
db 0
data_descriptor:
dw 0xffff
dw 0
dw 0
db 10010010
db 11001111
db 0
GDT_end:
GDT_Descriptor:
dw GDT_end - GDT_Start - 1
dd GDT_Start
CODE_SEG equ code_descriptor - GDT_Start
DATA_SEG equ data_descriptor - GDT_Start
cli
lgdt [GDT_Descriptor]
mov eax, cr0
or eax, 1
mov cr0, eax
jmp CODE_SEG:stpm
[bits 32]
stpm:
mov al, 'q'
mov ah, 0x0f
mov [0xb8000], ax
times 510-($-$$) db 0
db 0x55, 0xaa
2条答案
按热度按时间6yoyoihd1#
它失败的一些原因包括:
x33g5p2x2#
你的代码从数据开始。CPU把数据当作指令,它可以做意想不到的事情。你需要把数据移到代码的结尾,或者在代码的开头添加一个
JMP
指令,跳过数据字节。