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

如何制作写入NASM编写引导扇区的可引导U盘及启动失败问题排查

你遇到的问题大概率既不是笔记本硬件故障也不是U盘本身损坏,而是引导模式兼容、镜像写入方式、BIOS校验规则导致的软件配置问题,可按以下步骤排查:

1. 确认镜像写入方式正确

你执行的编译命令输出的是raw格式的二进制引导文件,命名为boot_sect.iso是错误命名,该文件并非标准ISO9660格式镜像:

nasm -fbin boot_sect.asm -o boot_sect.bin # 建议重命名为bin避免误解
qemu-system-x86_64 -drive format=raw,file=boot_sect.bin

写入U盘时必须直接写入整个U盘块设备:

  • Linux下执行dd if=boot_sect.bin of=/dev/sdX bs=512(注意/dev/sdX是你的U盘整个设备,不要写成分区如/dev/sdX1)
  • Windows下用Rufus写入时,要选择「DD镜像模式」,不能选默认的ISO模式,否则工具会判定不是合法ISO导致引导结构错误。

2. 调整BIOS启动配置

你的汇编代码是Legacy BIOS模式的引导扇区,不支持UEFI模式启动。大部分新笔记本默认开启UEFI安全启动,部分甚至默认关闭了Legacy/CSM兼容模式,你需要:

  • 进笔记本BIOS关闭「安全启动(Secure Boot)」
  • 开启「Legacy BIOS支持」/「CSM兼容模式」
  • 启动项选择对应U盘的Legacy模式引导项,不要选UEFI模式的U盘启动项。

3. 补充合法MBR分区表过BIOS校验

你当前的代码只补了0xaa55引导结束签名,没有填充MBR偏移0x1BE到0x1FD位置的分区表,很多实机BIOS会校验该区域是否存在标记为0x80的可引导分区,如果没有就会判定该扇区为非法引导扇区,拒绝执行。可以修改汇编代码补充分区表:

mov ah ,  0x0e    
mov al , `h`    
int 0x10    
mov al , `1`    
int 0x10    
jmp $

; 新增:填充到分区表起始位置,添加一条可引导分区项
times 0x1be - ($ - $$) db 0
db 0x80                     ; 标记为可引导分区
db 0x00,0x02,0x00           ; 分区起始CHS地址
db 0x0c                     ; 分区类型(FAT32 LBA)
db 0x00,0x04,0x00           ; 分区结束CHS地址
dd 0x00000001               ; 分区起始LBA
dd 0x00001fff               ; 分区大小

times 510-($-$$) db 0 
dw 0xaa55

4. 其他兼容性排查

部分老BIOS对USB3.0接口的U盘支持不完善,你可以换用USB2.0的U盘,或者插在笔记本的USB2.0接口上尝试启动。


内容的提问来源于stack exchange,提问作者Νίκος Αντωνετσής

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:54:03