在c / c ++中编写一个简单的bootloader

时间:2014-02-11 09:24:43

标签: bootloader

我需要编写一个在pc启动时运行的简单引导加载程序并运行命令dir(获取usb驱动器上的文件和文件夹列表(我使用的是可启动的USB)) 通过这条指令:

http://www.codeproject.com/Articles/28067/Boot-Into-Your-Own-Hello-World-Application?msg=4756180#xx4756180xx

这是我的asm文件,然后我使用NASM从它创建一个bin文件然后从它做一个iso把它放在我的usb上。

;**************************************************
; Hello World OS Boot loader
; Designed by Arnav
; http://pendorasoft.byethost15.com/
;**************************************************

[BITS 16]
[ORG 0x0000]

; code located at 0000:7C00, adjust segment registers
      cli
      mov     ax, 0x07C0
      mov     ds, ax
      mov     es, ax
      mov     fs, ax
      mov     gs, ax

; create stack
      mov     ax, 0x0000
      mov     ss, ax
      mov     sp, 0xFFFF
      sti

; post message
      mov     si,msgHello
      call    DisplayMessage
      mov     si, msgEnd
    call    DisplayMessage
     hlt  


; Display Message
 DisplayMessage:
      lodsb                                       ; load next character
      or      al, al                              ; test for NUL character
      jz      .DONE
      mov     ah, 0x0E                            ; BIOS teletype
      mov     bh, 0x00                            ; display page 0
      mov     bl, 0x07                            ; text attribute
      int     0x10                                ; invoke BIOS
      jmp     DisplayMessage
  .DONE:
      ret          

; data section
msgHello  db 0x0D, 0x0A, "Hello World", 0x0D, 0x0A, 0x00          
msgEnd  db 0x0D, 0x0A, "That's all folks!!!", 0x0D, 0x0A, 0x00           

;ASM Signature
      TIMES 510-($-$$) DB 0
      DW 0xAA55

但我不想在屏幕上打印一些内容。我希望它能在我的USB上显示文件和文件夹列表 我应该如何完成我的代码?

1 个答案:

答案 0 :(得分:1)

也许我错了,但是在引导程序的阶段,计算机对DOS,Linux,Windows等没有任何线索......所以你不能执行与操作系统相关的操作。为此,您需要加载操作系统。

如果你需要打印驱动器C的内容,你需要自己实现辛苦工作......即:读取FAT结构,名称等......

此功能的(pascal)来源可在以下位置找到:https://sites.google.com/site/fritzone/longfilenames并搜索旧版本的TechHelp(http://www.danielsays.com/ss-gallery-dos-tech-help-60.html),其中包含所需的文档...