Загрузка с int 13h 02h работает нормально в qemu и bochs, но не на аппаратном - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть этот относительно простой загрузчик, который использует int 13h для загрузки одного сектора с диска, сектор состоит почти целиком из 0 с сохранением для первого байта, который является 'X'. Программа предназначена для загрузки этого второго сектора в 0x7e00 и затем распечатки первого байта, X, используя int 10h 0eh. Это прекрасно работает в qemu и bochs, но не когда я загружаю его на USB, в этом случае он ничего не печатает, но делает , перемещая курсор вправо. Печать данных, которые загружаются вместе с загрузочным сектором, прекрасно работает на оборудовании, а копирование программы с USB и запуск ее в qemu также работает нормально, так что я знаю, что не ошибаюсь при загрузке данных. Я также проверил флаг переноса на наличие ошибки в более сложных версиях и даже запустил программу, которая использовала int 13h 08h, чтобы узнать о фактической конструкции диска.

На данный момент я в полном недоумении.

[org 0x7c00]
[bits 16]
jmp 0:main

BOOT_DRIVE: db 0

main:
    mov [BOOT_DRIVE], dl

    ; Setup registers
    mov bx, 0
    mov ds, bx
    mov es, bx
    mov fs, bx
    mov gs, bx

    ; Setup stack
    mov ss, bx
    mov bp, 0x9000
    mov sp, bp

    ; Read sectors from disk
    mov ah, 0x02

    mov ch, 0 ; Cylinder 0
    mov dh, 0 ; Head 0
    mov cl, 2 ; Sector 2

    mov al, 1 ; Read 1 sector

    mov bx, sec2 ; Read to sec2 (will end up at 0x7e00)

    int 0x13 ; Interrupt

    ; Display first loaded byte
    mov ah, 0x0e

    mov al, [sec2]
    int 0x10

    hlt

; Pad to end of first sector
times 510-($-$$) db 0
dw 0xaa55

; Data in second sector.
sec2:
    db 'X'

; Pad to end of second sector
times 1024-($-$$) db 0
...