2016-11-13 7 views
1

в первую очередь, извините за мой плохой английский, я французский. На данный момент я изучаю asm с fasm для тестирования программирования загрузочного сектора.FASM - загрузочный сектор на USB не работает

У меня есть простая программа загрузки, я ее скомпилировал, и я написал boot.bin в первом секторе моего usb.

Но когда я загрузить на ПК или в VirtualBox, диск не найден ....

Загрузочный код сектора:

;======================================================================= 
; a simpliest 1.44 bootable image by shoorick ;) 
;======================================================================= 
_bs equ 512 
_st equ 18 
_hd equ 2 
_tr equ 80 
;======================================================================= 
    org 7C00h 
    jmp start 
    nop 
;===================================================== 
    db "HE-HE OS";  ; 8 
    dw _bs    ; b/s 
    db 1    ; s/c 
    dw 1    ; rs 
    db 2    ; fats 
    dw 224    ; rde 
    dw 2880   ; as 
    db 0F0h   ; media 
    dw 9    ; s/fat 
    dw _st    ; s/t 
    dw _hd    ; h 
    dd 0    ; hs 
    dd 0    ; -- 
    db 0    ; drv 
    db 0    ; -- 
    db 29h    ; ebr 
    dd 0    ; sn 
    db "NO NAME "; ; 11 
    db "FAT12 ";  ; 8 
;===================================================== 
start: 
    mov ax,cs 
    mov ds,ax 
    mov cx,count 
    mov si,hello 
    mov bx,7 
    mov ah,0Eh 
@@: 
    lodsb 
    int 10h 
    loop @B 
    xor ah,ah 
    int 16h 
    int 19h 

hello db "Hi! This is disk-invalid!" 
count = $ - hello 

;======================================================================= 
    rb 7E00h-2-$ 
    db 055h,0AAh 
;======================================================================= 

Этот код обеспечивают примерами веб-сайта в помощью fasm'овской ,

+1

Вы установили правильный _boot order_ в вашем BIOS? Если это вообще возможно, переместите USB-устройство в верхнюю часть. – Fifoernik

ответ

0

Есть несколько причин, почему загрузчик не будет работать:

  1. загрузчик не в первом секторе USB/Floppy/и т.д..
  2. загрузчик не ТОЧНО 512 байт длиной
  3. вам не хватает подписи 0xAA55 в последние 2 байта загрузчика

в вашем примере я предполагаю, что у вас есть неправильный размер загрузчика (это не 512 байт)

попытка заменить

rb 7E00h-2-$ 
db 055h,0AAh 

с

TIMES 510-($-$$) DB 0 
DW 0xAA55  

это гарантирует, что ваш файл имеет длину ровно 512 байт, и это имеет необходимый Загрузчик подпись

+0

Его ассемблерный файл верен. Используемые DB и DW - это одно и то же, что выражается по-разному. 'rb 7E00h-2- $' на самом деле действителен и будет генерировать необходимые байты для выгрузки на 510, где размещается подпись загрузки. Создание его 512. 'rb' является директивой _FASM_ для резервирования определенного количества байтов. –

+0

@Michael Petch hm странно, если я пытаюсь использовать его метод для ввода 510 байт, тогда я получаю двоичный файл длиной 32256 байт. im используя плоский ассемблер 1.71.51 – SeeSoftware

+0

Я ожидаю, что вы получите 32256, если вы не использовали 'org 07c00h' –

 Смежные вопросы

  • Нет связанных вопросов^_^