自定义引导程序无法正常工作

时间:2017-01-29 13:09:20

标签: assembly x86 bootloader

我使用汇编语言设计了我的自定义引导程序(仅显示我的名字。)并使用NASM编译它。现在我想在USB中安装它。但是无法找到任何方法来刻录它。我已经测试过使用不同的实用程序,如ISOtoUSB,Universal USB,rufus。错误即将来临'图像无法启动。'

但是当我在oracle虚拟驱动器上运行相同的程序时,它可以完美运行。

我正在做一些大学项目并且已经开始了,我想把这个bootloader加载到usb,当我从usb启动时,我的bootloader应该可以工作。

请问好吗?

这是我的代码:

[BITS 16]
[ORG 0x7C00]

main:
mov ax, 0x0000
mov ds,ax

mov si, string
call print
jmp $

print:
mov ah,0x0E
mov bh,0x00

.nextchar
lodsb
or al,al
jz .return
int 0x10
jmp .nextchar
.return
ret
string db 'Welcome to the Amul Bhatia Operating System Now Installing....',0
times 510-($-$$) db 0
dw 0AA55h

enter image description here

2 个答案:

答案 0 :(得分:1)

你的引导加载程序没有任何问题,除了这个:

times 512-($-$$) db 0

替换为:

times 510-($-$$) db 0

你的方式,你的引导程序将是514字节而不是512.; - )

This is your bootloader running

答案 1 :(得分:0)

即使签名到位,您可能会发现某些硬件无法启动您的图像。似乎某些BIOS实现需要有效的BPB(BIOS参数块)才会出现在您的映像中。

您可以考虑使用以下内容替换引导加载程序的前几行:

bits 16

org 0                                   ; BIOS will load the MBR to this location.

bootStart:
                jmp             _start
                nop
                bootDrive       db      'MSDOS6.0'
                bpb
                bps                     dw      512
                spc                     db      8
                rs                      dw      1
                fats            db      2
                re                      dw      512
                ss                      dw      0
                media           db      0xf8
                spfat           dw      0xc900
                spt                     dw      0x3f00
                heads           dw      0x1000
                hidden          dw      0x3f00, 0
                ls                      dw      0x5142,0x0600
                pdn                     db      0x80
                cheads                  db      0
                sig                     db      0x29
                serialno        dw      0xce13, 0x4630
                label           db      'NO NAME'
                fattype         db      "FAT32"

_start:
                                                        ; set up the registers
                mov     ax, 0x07c0
                mov     ds, ax