【问题标题】:FASM - Boot sector on USB don't workFASM - USB 上的引导扇区不起作用
【发布时间】:2017-03-27 07:33:49
【问题描述】:

首先,对不起我的英语不好,我是法国人。 目前,我用 fasm 学习 asm 来测试引导扇区编程。

我做了一个简单的启动程序,我已经编译了它,我在我的 USB 的第一个扇区写入了 boot.bin。

但是当我在我的 PC 或 virtualbox 中启动时,找不到驱动器......

引导扇区代码:

;=======================================================================
;   a simpliest 1.44 bootable image by shoorick ;)
;=======================================================================
_bs equ 512
_st equ 18
_hd equ 2
_tr equ 80
;=======================================================================
    org 7C00h
    jmp start
    nop
;=====================================================
    db  "HE-HE OS";     ; 8
    dw  _bs             ; b/s
    db  1               ; s/c  
    dw  1               ; rs
    db  2               ; fats
    dw  224             ; rde
    dw  2880            ; as 
    db  0F0h            ; media
    dw  9               ; s/fat
    dw  _st             ; s/t
    dw  _hd             ; h
    dd  0               ; hs
    dd  0               ; --
    db  0               ; drv
    db  0               ; --
    db  29h             ; ebr
    dd  0               ; sn
    db  "NO NAME    ";  ; 11
    db  "FAT12   ";     ; 8
;=====================================================
start:
    mov   ax,cs
    mov   ds,ax
    mov   cx,count
    mov   si,hello
    mov   bx,7
    mov   ah,0Eh
@@:
    lodsb
    int   10h
    loop  @B
    xor   ah,ah
    int   16h
    int   19h

hello   db "Hi! This is disk-invalid!"
count = $ - hello  

;=======================================================================
    rb 7E00h-2-$
    db 055h,0AAh
;=======================================================================

此代码由fasm网站示例提供。

【问题讨论】:

  • 您是否在 BIOS 中设置了正确的引导顺序?如果可能,请将 USB 设备移到顶部。

标签: usb boot fasm sector


【解决方案1】:

引导加载程序无法工作的原因有几个:

  1. 引导加载程序不在 USB/Floppy/etc 的第一个扇区中。
  2. 引导加载程序不是完全 512 字节长
  3. 您在引导加载程序的最后 2 个字节处缺少 0xAA55 签名

在您的示例中,我假设您的引导加载程序大小错误(不是 512 字节)

尝试替换

rb 7E00h-2-$
db 055h,0AAh

TIMES 510-($-$$) DB 0
DW 0xAA55     

这可确保您的文件长度正好为 512 字节,并且具有所需的引导加载程序签名

【讨论】:

  • 他的汇编文件是正确的。您正在使用的 DB 和 DW 是相同的东西,表达方式不同。 rb 7E00h-2-$ 实际上是有效的,并将生成所需的字节以填充到放置引导签名的 510。使其成为 512。rb 是一个 FASM 指令,用于保留指定的字节数。
  • @Michael Petch hm 很奇怪,如果我尝试使用他的方法填充 510 字节,那么我会得到一个 32256 字节长的二进制文件。我使用平面汇编器 1.71.51
  • 如果你不使用org 07c00h,我希望你会得到32256
猜你喜欢
  • 2014-06-25
  • 2021-12-27
  • 1970-01-01
  • 2023-03-23
  • 2016-02-15
  • 2016-07-02
  • 2018-07-05
  • 1970-01-01
  • 2017-03-05
相关资源
最近更新 更多