§ Через CHS

Для загрузки секторов используется классический подход с указанием цилиндра, головки и сектора (CHS - Cylinder Head Sector). Ссылка на источник.
mov     ax, $02         ; 02-Чтение 03-Запись
mov     al, 48          ; Количество секторов, 48 секторов по 512 байт
mov     bx, $8000       ; ds:bx Указатель на буфер
mov     cx, $0002       ; Номер сектора и цилиндра (первый сектор - 1, последний - 63)
mov     dh, $00         ; Номер головки (от 0 до 255)
mov     dl, $80         ; Номер диска (0-Floppy, $80-Drive C, $81-Drive D и т.д.)
int     13h

; По следующим адреса хранится информация
; 0:0078 => таблица параметров дискеты
; 0:0104 => таблица параметров диска

+5-4-3-2-1-0-9-8-7-6-5-4-3-2-1-0+
¦c c c c c c c c C C s s s s s s¦
+7-6-5-4-3-2-1-0¦9+8+-+-+-+-+-+-+
В регистре CL (биты 0..5) содержится номер сектора от 1 до 63. В регистре CH содержится младшие 8 бит цилиндра, и в старших 2 битах регистра CL - биты 8..9 номера цилиндра, то есть вычисляется так:
Сектор  = CL & 63;
Цилиндр = ((CL & 0xC0) << 2) + CH;
Номер цилиндра может быть равным от 0 до 1023, головки от 0 до 255, а сектора от 1 до 63. Чтобы вычислить положение сектора на диске в режиме LBA (Large Block Array), считается так:
LBA = (Sector-1) + Head*63 + Cylinder*63*256

§ Через LBA

В современных BIOS есть специальные функции для работы с плоской моделью дисков. Ссылка на функцию.
mov     ah, 42h       ; Код функции чтения диска (43h запись)
mov     si, DAP       ; ds:si Таблица с параметрами
mov     dl, $80       ; Номер диска
int     13h
Таблица параметров
DAP:
    db 10h   ; Размер DAP (всегда 10h)
    db 00h   ; Не используется
    dw 0001h ; Количество секторов для чтения (до 127)
    dw 0000h ; Смещение данных
    dw 0800h ; Сегмент данных
    dq 0     ; Номер сектора от 0 до n-1
31 мая, 2021
© 2007-2022 Том летит беспокойно