You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

开发简单bootloader时汇编指令jmp $的作用是什么?

关于bootloader代码中jmp $的功能解答

你对jmp $的字面理解完全正确:这确实是跳转到当前指令地址的死循环,CPU执行到这条指令后会无限重复执行它,永远不会向后运行。

你疑惑的「会不会无法执行后面的代码」属于认知误区:后面两行内容本来就不是需要CPU执行的代码,是主引导记录(MBR)的校验标识,不需要被运行,具体逻辑如下:

  • x86架构的BIOS完成上电自检后,会读取存储设备的第一个扇区(固定大小512字节),检查该扇区的最后两个字节是否为0x55和0xaa,如果符合就判定这是合法的可引导扇区,将整个扇区内容加载到内存0x7c00地址处,然后跳转到0x7c00开始执行代码。
  • 你贴的是最小可引导镜像的标准Demo写法,各部分作用如下:
    • 开头的jmp $是整个扇区唯一的可执行逻辑,作用就是让CPU在完成引导后停在这里,一般用于测试BIOS能不能正常识别你的引导扇区,不需要执行后续引导逻辑时就用这种最简写法。
    • 第二行times 510-($-$$) db 0(你贴的代码里漏了db 0后缀,属于常规笔误)的作用是用0填充空白,把前面的代码长度补到刚好510字节,保证最后的魔数刚好落在扇区的最后两个字节位置。
    • 第三行的0x55 0xaa是BIOS识别可引导扇区的魔数,属于纯校验用的数据,不需要CPU执行,完全不存在「需要运行到这行」的需求。

如果后续要扩展bootloader功能,比如加载内核镜像、跳转到内核入口之类的,把开头的jmp $替换成对应业务逻辑即可。

内容的提问来源于stack exchange,提问作者ZeroSkill Gaming

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 01:06:04