У меня есть этот относительно простой загрузчик, который использует 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