Второй этап загрузчика печатает мусор используя Int 0x10 / ah = 0x0e
Я пытаюсь изучить ассемблер и написать загрузчик. Следующий код загружает содержимое дисковода гибких дисков в память и переходит к нему (начинает загрузку по адресу 0x1000). Этот код должен печатать «X» на экране, но по какой-то причине он печатает пробел. Может кто-нибудь сказать, пожалуйста, что не так?
[bits 16]
jmp reset
reset: ;Resets floppy drive
xor ax,ax ;0 = Reset floppy disk
mov dl,0 ;Drive 0 is floppy
int 0x13
jc reset ;If carry flag was set, try again
mov ax,0x1000 ;When we read the sector, we are going to read address 0x1000
mov es,ax ;Set ES with 0x1000
floppy:
mov ah,0x2 ;2 = Read floppy
mov al,0x11 ;Reading one sector
mov ch,0x0 ;Track 1
mov cl,0x2 ;Sector 2, track 1
mov dh,0x0 ;Head 1
mov dl,0x0 ;Drive = 0 (Floppy)
int 0x13
jc floppy ;If carry flag was set, try again
jmp 0x1000:0000 ;Jump to 0x1000, start of second program
times 510 - ($ - $) db 0 ;Fill the rest of sector with 0
dw 0xAA55 ;This is the boot signiture
;---
;--[segment 2]--
mov bx, var
mov ah, 0x0e
mov al, [bx]
int 0x10
jmp $
var:
db 'X'
times 737280 - ($ - $) db 0