我正在学习如何从osdev中制作一个引导加载程序。我使用NASM来组装我的代码,使用x86机器来运行我的引导加载程序。这是一段小代码,它打印一个字符并输入一个无限循环:
BITS 16
xor ax, ax
mov ah, 0x0E
mov al, 0x41
int 0x10
jmp $
times 510-($-$$) db 0x00
db 0x55
db 0xAA我的问题是:当我评论'xor ax,ax‘指令时,为什么代码不运行?正如您在上面的代码中所看到的,ax值被更改为存储中断参数,因此代码应该在没有xor指令的情况下运行.
额外注释:
非常感谢。
发布于 2018-02-01 19:10:30
2018年,我偶然发现了同样的问题。迈克尔的回答和评论似乎是最好的解决办法。我们并不生活在一个完美的世界里,这就是事实。这就是我在启动OS时想要开发BIOS的原因。我讨厌在没有检查的情况下在电脑上运行别人的代码。但对于固件和BIOSes来说,这太难了。如果你在不知道你在做什么的情况下处理BIOS的话,它甚至可能会把你的电脑给砖头。
无论如何,我刚刚添加了这个评论,以防其他人在稍后遇到同样的问题。我会认真地建议检查源代码和/或反向工程一些已经可用的引导加载程序,如GRUB、Windows Boot Manager、LILO等。您还可以为您的PC下载实时USB linux发行版,将其安装在闪存驱动器中,并在十六进制编辑器中查看引导扇区代码,甚至可以将其拆卸。
这并不完全是对这个问题的回答,但值得一提。为了使这更有意义,我只能说我已经反转了GRUB的代码,就像安装在Kali可引导上的代码一样,它以XOR BP, BP指令开始。
https://stackoverflow.com/questions/39240353
复制相似问题