assembly - 自定义引导加载程序问题

标签 assembly x86 disk utility bootloader

我正在尝试为 Hobby OS 编写一个引导加载程序,并让它运行良好。 没什么特别的,只是打印一行文本:

BITS 16
ORG 0

start: jmp main


OEM         db "Test OS "           
BytesPerSector:     DW 512
SectorsPerCluster:  DB 1
ReservedSectors:    DW 1
NumberOfFATs:   DB 2
RootEntries:    DW 224
TotalSectors:   DW 2880
Media:      DB 0xf8  
SectorsPerFAT:  DW 9
SectorsPerTrack:    DW 18
HeadsPerCylinder:   DW 2
HiddenSectors:  DD 0
TotalSectorsBig:    DD 0
DriveNumber:        DB 0
Unused:         DB 0
ExtBootSignature:   DB 0x29
SerialNumber:   DD 0xa0a1a2a3
VolumeLabel:    DB "HOBBY  OS  "
FileSystem:         DB "FAT12   "



main:
    ;Adjust code Seg.
    cli
    mov ax, 0x07c0
    mov ds, ax
    mov es, ax
    mov fs, ax
    mov gs, ax
    ;Set up Stack
    mov ax, 0x0000
    mov ss, ax
    mov sp, 0xFFFF
    sti

    mov si, msg
    call print

print:

    .charLoop:

        lodsb
        or al,al
        jz .done
        mov ah, 0x0E
        int 0x10
    .done
        ret

msg db "Hello World",13,10,0

我正在编译

nasm -f bin loader.asm -o loader.bin
dd if=loader.bin of=floppy.img bs=512 count=1 seek=0

我读到前 446 字节是引导代码,字节 447 - 509 是分区表。 我尝试然后使用:

dd if=loader.bin of=floppy.img bs=446 count=1 seek=0

尝试防止分区表被覆盖但还是没有雪茄。

我使用装有 OSX 的 Mac 并使用 VirtualBox 测试操作系统

我可以在 VBox 中运行 floppy.img 并且代码工作正常,但是当我尝试将引导加载程序安装到 FAT 16 格式化磁盘上时,OSX 似乎无法再读取磁盘镜像,就好像它未格式化一样。

磁盘实用程序发出的确切消息是 Unable to attach image "floppy.img."(No Mountable File Systems)即使我刚刚使用 FAT 16 文件系统格式化了磁盘。

不幸的是,由于这是我的第一篇文章,我无法给您图片。

我真的很感激任何帮助。磁盘结构确实不是我的强项。

最佳答案

当您使用 dd 时,请尝试添加 conv=notrunc 选项。这迫使它不会尝试截断文件,而是仅覆盖您指定的部分。

关于assembly - 自定义引导加载程序问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7048529/

相关文章:

sqlite - Cocoa 中的 SQLite3 磁盘 I/O 错误是什么

cocoa - 如何使磁盘在 Windows 和 MAC OS X 中自动运行

assembly - PIC汇编-BCF STATUS,RP0语法错误

c - 为什么没有打印出来?

assembly - 内存布局中的 "pitch"(MPITCH、VPITCH)是什么?

assembly - 在 x86 程序集中打印十六进制值

assembly - Intel x86 32位寄存器困惑

iphone - iOS - ASM 代码会在 armv7/armv7s/arm64 上运行吗?

assembly - 在 DDD 中解释 eFlags

powershell - 将物理设备 ID 与卷设备 ID 相关联