assembly 没有错误消息,没有任何内容,但它不工作(512字节 Boot 文件)

yvt65v4c  于 2022-11-13  发布在  其他
关注(0)|答案(2)|浏览(113)

是的,基本上我想从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
6yoyoihd

6yoyoihd1#

它失败的一些原因包括:

  • 数据就像代码一样被执行
  • 描述符具有9个字节而不是8个字节
  • 段寄存器尚未设置
  • 代码没有像样的结尾
  • ...
x33g5p2x

x33g5p2x2#

你的代码从数据开始。CPU把数据当作指令,它可以做意想不到的事情。你需要把数据移到代码的结尾,或者在代码的开头添加一个JMP指令,跳过数据字节。

相关问题