首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(NASM) (80x86)引导加载程序需要xor、ax、ax

(NASM) (80x86)引导加载程序需要xor、ax、ax
EN

Stack Overflow用户
提问于 2016-08-31 03:39:31
回答 1查看 543关注 0票数 3

我正在学习如何从osdev中制作一个引导加载程序。我使用NASM来组装我的代码,使用x86机器来运行我的引导加载程序。这是一段小代码,它打印一个字符并输入一个无限循环:

代码语言:javascript
复制
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指令的情况下运行.

额外注释:

  • 我使用以下命令组装Xubuntu下的代码: nasm -f bin -o main.bin main.asm
  • 我使用以下命令将512个字节的机器代码存储在一个笔式驱动器上: sudo dd if=main.bin of=/dev/sdb
  • 我的电脑可以从笔式驱动器启动。

非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2018-02-01 19:10:30

2018年,我偶然发现了同样的问题。迈克尔的回答和评论似乎是最好的解决办法。我们并不生活在一个完美的世界里,这就是事实。这就是我在启动OS时想要开发BIOS的原因。我讨厌在没有检查的情况下在电脑上运行别人的代码。但对于固件和BIOSes来说,这太难了。如果你在不知道你在做什么的情况下处理BIOS的话,它甚至可能会把你的电脑给砖头。

无论如何,我刚刚添加了这个评论,以防其他人在稍后遇到同样的问题。我会认真地建议检查源代码和/或反向工程一些已经可用的引导加载程序,如GRUB、Windows Boot Manager、LILO等。您还可以为您的PC下载实时USB linux发行版,将其安装在闪存驱动器中,并在十六进制编辑器中查看引导扇区代码,甚至可以将其拆卸。

这并不完全是对这个问题的回答,但值得一提。为了使这更有意义,我只能说我已经反转了GRUB的代码,就像安装在Kali可引导上的代码一样,它以XOR BP, BP指令开始。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39240353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档