Шаг 68.
Абсолютные операции дискового ввода-вывода

    На этом шаге мы рассмотрим посекторные чтение и запись.

    Для непосредственного доступа к диску можно использовать операции абсолютного чтения и записи с помощью функций 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.

    На следующем шаге мы проиллюстрируем использование этих функций.




Предыдущий шаг Содержание