На этом шаге мы рассмотрим посекторные чтение и запись.
Для непосредственного доступа к диску можно использовать операции абсолютного чтения и записи с помощью функций DOS INT 25H и 26Н. В этом случае теряются преимущества использования каталога диска и блокирования и разблокирования записей, обеспечиваемые функцией DOS INT 21Н.
Абсолютные операции предполагают, что все записи имеют размер сектора, поэтому прямой доступ осуществляется к полному сектору или блоку секторов. Адресация диска выполняется по "логическому номеру записи" (абсолютный сектор). Для определения логического номера записи на двусторонних дискетах с восемнадцатью секторами счет секторов ведется с дорожки 0 сектора 1 следующим образом:
Дорожка Сектор Логический номер записи 0 1 0 0 2 1 1 1 18 1 9 26 2 9 44
Таким образом, используется следующая формула:
Логический номер записи = (дорожка * 18) + (сектор - 1).
Например, логический номер записи на дорожке 2 и секторе 9 определяется как
(2 * 18) + (9 - 1) = 36 + 8 = 44.
Фрагмент программы для абсолютных операций ввода-вывода:
MOV AL,drive ;0 для A, 1 для В и т.д. MOV BX,addr ;Адрес области ввода-вывода. MOV CX,sectors ;Число секторов. MOV DX,record ;Начальный логич.номер записи. INT 25Н или 26Н ;Абсолютное чтение или запись.
Операции абсолютного чтения или записи разрушают содержимое всех регистров, кроме сегментных, и устанавливают флаг CF для индикации успешной (0) или безуспешной (1) операции. В случае безуспешной операции содержимое регистра AL описывает характер ошибки:
Команда INT записывает содержимое флагового регистра в стек. После завершения команды INT следует восстановить флаги, но проверив перед этим флаг CF.
На следующем шаге мы проиллюстрируем использование этих функций.