Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Абель.docx
Скачиваний:
13
Добавлен:
26.11.2018
Размер:
569.84 Кб
Скачать

Inc ch ;Увеличить номер дорожки

C20:

Xor side,01 ;Сменить сторону

MOV CL,01 ;Установить сектор = 1

MOV CURADR,CX

C90: RET

C10ADDR ENDP

; Чтение дискового сектора:

; ------------------------

F10READ PROC NEAR

MOV AL,01 ;Число секторов

MOV AH,02 ;Функция чтения

LEA BX,RECDIN ;Адрес буфера

MOV CX,CURADR ;Дорожка/сектор

MOV DH,SIDE ;Сторона

MOV DL,01 ;Дисковод B

Int 13h ;Выполнить ввод

CMP AH,00 ;Ошибка чтения?

JZ F90 ; нет - выйти

MOV ENDCDE,01 ; да -

CALL X10ERR ; ошибка чтения

F90:

Inc curadr ;Увеличить номер сектора

RET

F10READ ENDP

; Вывод сектора на экран:

; ----------------------

G10DISP PROC NEAR

MOV AH,40H ;Функция вывода на экран

MOV BX,01 ;Номер устройства

MOV CX,512 ;Длина

LEA DX,RECDIN

INT 21H

RET

G10DISP ENDP

; Очистка экрана:

; --------------

Q10SCR PROC NEAR

MOV AX,0600H ;Полный экран

MOV BH,1EH ;Установить цвет

MOV CX,0000 ;Функция прокрутки

MOV DX,184FH

INT 10H

RET

Q10SCR ENDP

; Установка курсора:

; -----------------

Q20CURS PROC NEAR

MOV AH,02 ;Функция установки

MOV BH,00 ; курсора

MOV DX,0000

INT 10H

RET

Q20CURS ENDP

; Вывод сообщения об ошибке на диске:

; ----------------------------------

X10ERR PROC NEAR

MOV AH,40H ;Функция вывода на экран

MOV BH,01 ;Номер устройства

MOV CX,18 ;Длина сообщения

LEA DX,READMSG

INT 21H

RET

X10ERR ENDP

CODESG ENDS

END BEGIN

__________________________________________________________________________

Рис.18.1. Использование BIOS для чтения дискового файла.

Рассмотрим программу, приведенную на рис.18.1, в которой используется

команда BIOS INT 13H для чтения секторов диска. Программа базируется на

примере, приведенном на рис.16.3, со следующими изменениями:

1. Отсутствует описание FCB и подпрограмма открытия.

2. Программа расчитывает каждый дисковый адрес. После каждого

чтения происходит увеличение номера сектора. При достижении номера

сектора 10 процедура C10ADDR сбрасывает это значение в 01. Если номер

стороны = 1, программа увеличивает номер дорожки; затем меняется

номер стороны: 0 на 1 и 1 на 0.

3. Область CURADR содержит начальные значения номеров дорожки и

сектора (их программа увеличивает), а область ENDADR - конечные

значения. Один из способов улучшения программы - предоставить

пользователю возможность указать начальные и конечные номера дорожки

и сектора с помощью соответствующего запроса.

Выполните данную программу под управлением отладчика DEBUG.

Проделайте трассировку команд, которые инициализируют сегментные регистры,

и установите начальный и конечный номера секторов для файловой таблицы FAT

(расположение таблицы FAT различно в разных версиях операционной системы).

Используя команду G (до) для выполнения ввода с диска и проверки

считанного содержимого таблицы FAT и элементов оглавления.

В качестве альтернативы отладчику DEBUG можно преобразовать

ASCII-символы в области ввода в их шест. эквиваленты и выдать на экран эти

значения, как это делает отладчик DEBUG (см. программу на рис.14.5). Таким

образом можно проверить содержимое любого сектора (в том числе

"спрятанного"), а также предоставить пользователю возможность внести

изменения и записать измененный сектор на диск.

Следует помнить, что при создании файла DOS может вносить записи на

любые доступные сектора, которые не обязательно будут смежными на диске.

Следовательно, с помощью команды BIOS INT 13H нельзя выполнить

последовательное чтение файла.

ОСНОВНЫЕ ПОЛОЖЕНИЯ НА ПАМЯТЬ

________________________________________________________________

- Команда BIOS INT 13H обеспечивает прямой доступ к дорожкам и

секторам диска.

- Команда BIOS INT 13H не поддерживает операции с оглавлением,

обнаружение конца файла, блокирование и деблокирование записей.

- Верификация сектора выполняет элементарную проверку записанных

данных, что приводит к увеличению времени обработки.

- Проверяйте байт состояния после каждой дисковой операции через

BIOS.

ВОПРОСЫ ДЛЯ САМОПРОВЕРКИ

________________________________________________________________

18.1. Напишите команды для сброса дискового контролера.

18.2. Напишите команды для чтения байта состояния дискеты.

18.3. Напишите команды для BIOS INT 13H, выполняющие чтение одного

сектора в область памяти INDISK, с дисковода A, головки 0, дорожки 6 и

сектора 3.

18.4. Напишите команды для BIOS INT 13H, выполняющие запись трех

секторов из области памяти OUTDISK, на дисковод B, головку 0, дорожку 8 и

сектор 1.

18.5. При записи данных в вопросе 18.4, как можно распознать попытку

записи на защищенный диск?

18.6. На основе вопроса 18.4 напишите команды контроля записи

(операция верификации).