2013-08-14 2 views
2

Я недавно пытался создать ОС на Ассамблее, однако у меня были некоторые проблемы. Я могу запустить свою ОС в 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

Это работает! Я узнал, что проблема в том, что я не написал изображение на дискете правильно! Спасибо за вашу помощь. Если у кого-то еще такая же проблема, лучшее программное обеспечение, которое я нашел, было вызвано rawwrite. Это действительно легко использовать и очень быстро. Еще раз спасибо, Джейк Захария Никсон.

+1

Извините! Я не мог сделать это до определенного количества времени после публикации ответа. Тогда я забыл об этом ха-ха :) Спасибо за напоминание! –

1

Трудно точно сказать, в чем проблема, но вот две вещи, которые вы можете попробовать.

  1. Является ли компьютер, который вы используете, чтобы попытаться загрузить с флоппи-дисковода? Проверьте это в настройках BIOS (введенный нажатием специальной клавиши в начале процесса загрузки).
  2. Является ли диск загрузочным? Вот учебник OSDev, в котором есть инструкции по созданию гибкой загрузочной операционной системы; в самом низу он дает инструкции о том, как создать дискету: http://wiki.osdev.org/Babystep1
Смежные вопросы