Недавно я изучал сборку x86 и для практики решил собрать свой собственный загрузчик. Перед работой с int13H в самом загрузчике я решил попробовать прочитать сектор (логический 19) на дискете. Но, к сожалению, после записи кода и запуска его в QEMU данные не были загружены сами собой. Я полагаю, что я где-то ошибаюсь. Вот мой код.
read_sector:
mov ah,02H ; Function code to Read Sector
mov al,01 ; Read one sector
lea bx,[SECTOR] ; Address of input buffer
mov ch,00 ; Track 0
mov cl,02 ; Sector 1
mov dh,01 ; Head number 1
mov dl,00 ; Drive Number ( 0 - Floppy)
int 13H ; call the routine
mov ah,0EH
add al,48
int 10H
ret
Чтобы прояснить ситуацию, я на самом деле читаю:
Логический сектор 19:
Трек 0
Голова -1
Сектор- 2
В коде SECTOR представляет метку, с помощью которой я получаю доступ для записи, а также для чтения входных данных из сектора.
Код моей функции печати (довольно простой):
print:
mov al,03H
int 10H
.repeat:
lodsb
mov ah,0EH
cmp al,0
je .done
int 10H
jmp .repeat
.done:
ret
Извините за незначительные вещи, оставленные в коде: (
Относительно вызова этой функции и доступа (печати) к данным здесь есть код.
call read_sector
mov si,[SECTOR]
Но его запуск на экране ничего не показывает. Я также сослался на файлы Ральфа Брауна и проверил все (int 13H fun: 02H). Я также проверил код возврата в топоре и флаге переноса, и был установлен флаг переноса, указывающий на успешное чтение. Без других источников, на мой взгляд, первое место, на которое нужно ссылаться, было переполнение стека. Я был бы чрезвычайно благодарен, если бы кто-нибудь помог мне.