Ваш код очень грязный. Для правильного использования int 13h
с AH = 3
необходимо также установить ES
(сегмент, в котором находится BX
, например, ES:BX
- это адрес буфера, который должен быть прочитан и записан на жесткий диск) и CX
к комбинации номера цилиндра и сектора (cylinder = CL[7:6] || CH
, sector = CL[5:0]
).
Предполагая, что вы хотите записать один сектор (512 байт) с физического адреса 5000h
в CHS 0: 0: 1 на жестком диске 0, ваш код будет выглядеть примерно так:
xor ax, ax
mov es, ax ; ES <- 0
mov cx, 1 ; cylinder 0, sector 1
mov dx, 0080h ; DH = 0 (head), drive = 80h (0th hard disk)
mov bx, 5000h ; segment offset of the buffer
mov ax, 0301h ; AH = 03 (disk write), AL = 01 (number of sectors to write)
int 13h
Вы также должны не забыть проверить, был ли установлен флаг переноса после выполнения прерывания. Будет ясно, если функция была выполнена правильно. Если он установлен, то регистр AH
будет содержать код ошибки.