§ Через 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-2023 Сидит галимый запад