如何从软盘运行简单的操作系统?

时间:2013-08-14 15:30:39

标签: assembly operating-system boot

我最近一直试图在大会上制作一个操作系统,但是我遇到了一些问题。我可以在VirtualBox中运行我的操作系统但它只是告诉我一旦我尝试从软盘驱动器运行它就从软盘驱动器中删除媒体。我在多台计算机上试过但是他们都这么说。我不知道还有什么可以尝试,我会把我的源代码放在下面,以防它帮助你。 提前致谢, Jake Zachariah Nixon。

BITS 16

jmp short start             ;jump to start of os, past disk description
nop                         ;pad out before description

OEMLabel        db "FIRSTBOOT"  ; Disk label
BytesPerSector      dw 512      ; Bytes per sector
SectorsPerCluster   db 1        ; Sectors per cluster
ReservedForBoot     dw 1        ; Reserved sectors for boot record
NumberOfFats        db 2        ; Number of copies of the FAT
RootDirEntries      dw 224      ; Number of entries in root dir
LogicalSectors      dw 2880     ; Number of logical sectors
MediumByte      db 0F0h         ; Medium descriptor byte
SectorsPerFat       dw 9        ; Sectors per FAT
SectorsPerTrack     dw 18       ; Sectors per track (36/cylinder)
Sides           dw 2            ; Number of sides/heads
HiddenSectors       dd 0        ; Number of hidden sectors
LargeSectors        dd 0        ; Number of LBA sectors
DriveNo         dw 0            ; Drive No: 0
Signature       db 41           ; Drive signature: 41 for floppy
VolumeID        dd 00000000h    ; Volume ID: any number
VolumeLabel     db "FIRSTOS    "; Volume Label: any 11 chars
FileSystem      db "FAT12   "   ; File system type: don't change!

start:
    mov ax, 07C0h               ;4k stack space after bootloader
    add ax, 288                 ;4096 + 512 devided by 16 bytes per        paragraph
    mov ss, ax
    mov sp, 4096

    mov ax, 07C0h               ;set data segment to where we are loaded
    mov ds, ax

    mov si, text_string         ;put string position in SI
    call print_string           ;calls print string routine

    jmp $                       ;Jumps here to make infinate loop


    text_string db 'This is my awesome OS called FirstOS! I am currently building it from the ground up!', 0

print_string:                   ;routine to outpu string in SI to screen
    mov ah, 0Eh                 ;int 10h 'print char' function

.repeat:
    lodsb                       ;get char from string
    cmp al, 0                   
    je .done                    ;if char = 0 then jump to .done
    int 10h                     ;else print char
    jmp .repeat                 ;then repeat process

.done:
    ret                         ;return to other code


    times 510-($-$$) db 0       ;pad remainder of boot sector with 0s
    dw 0AA55h                   ;The standard pc boot signature

再次感谢:)

2 个答案:

答案 0 :(得分:2)

它正在运作!我发现问题只是我没有正确地将图像写入软盘!谢谢你的帮助。如果其他人遇到同样的问题,我找到的最好的软件称为rawwrite。它非常易于使用且非常快速。 再次感谢, Jake Zachariah Nixon。

答案 1 :(得分:1)

很难确切地说出问题所在,但这里有两件事你可以尝试。

  1. 您使用的计算机是否设置为尝试启动软盘驱动器?在BIOS设置中验证(通过在引导过程的早期按特殊键输入)。
  2. 磁盘是否可启动?这是一个OSDev教程,其中包含有关创建软盘可启动操作系统的说明;在最底部,它提供了有关如何创建软盘的说明:http://wiki.osdev.org/Babystep1