Главная · Поиск книг · Поступления книг · Top 40 · Форумы · Ссылки · Читатели

Настройка текста
Перенос строк


    Прохождения игр    
Demon's Souls |#13| Storm King
Demon's Souls |#12| Old Monk & Old Hero
Demon's Souls |#11| Мaneater part 2
Demon's Souls |#10| Мaneater (part 1)

Другие игры...


liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня
Rambler's Top100
Образование - Питер Абель Весь текст 992.61 Kb

Ассемблер и программирование для IBM PC

Предыдущая страница Следующая страница
1 ... 44 45 46 47 48 49 50  51 52 53 54 55 56 57 ... 85
установить каждую область DTA.

     - Операция открытия файла устанавливает  в  блоке  FCB  значения  для
следующих элементов: имя файла, тип файла, размер записи (шест.80), размер
файла и дата.  Программа должна  заменить  размер  записей  на  правильное
значение.

     - Программа, использующая для записи  файла  операцию  DOS  INT  21H,
должна закрыть файл в конце обработки для того, чтобы  поместить  на  диск
все оставшиеся в буфере записи (если таковые  имеются)  и  скорректировать
соответствующий элемент оглавления.

     - При использовании для чтения и записи операции DOS INT 21H  система
автоматически изменяет текущий номер записи в FCB.

     - Операция  чтения  по  прерыванию  DOS  INT  21H  проверяет  наличие
требуемой записи сначала в буфере и  при  отсутствии  выполняет  чтение  с
диска.

     -  Прямой  метод  доступа  требует  указания  номера  записи  в  поле
относительного номера записи блока FCB.

     - Восемь байт (двойное слово) относительного номера записи кодируются
в обратной последовательности байт.

     - Если требуемая запись при прямом доступе уже находится в буфере, то
система передает ее непосредственно в DTA.  В противном случае выполняется
чтение с диска в буфер всего сектора, содержащего необходимую запись.

     - Операции прямого блочного чтения  и  записи  более  эффективны  при
наличии достаточной памяти.  Эти операции  особенно  удобны  для  загрузки
таблиц.

     -  Команды  DOS  INT  25H  и  26H  осуществляют  дисковые    операции
абсолютного чтения и записи, но не поддерживают обработку  оглавления,  не
определяют конец файла и не  обеспечивают  блокирование  и  деблокирование
записей.


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

     16.1. Напишите функции базовой версии DOS для следующих операций:  а)
создание файла, б) установка DTA, в) последовательная запись, г)  открытие
файла, д) последовательное чтение.

     16.2.  Программа  использует  размер  записи,  устанавливаемый    при
открытии файла по умолчанию. а) Сколько записей содержит один  сектор?  б)
Сколько записей содержит дискета с тремя дорожками по девять  секторов  на
каждой?  в)  Если  на  дискете  (б)  находится  один    файл,    то    при
последовательном чтении сколько произойдет физических обращений к диску?

     16.3. Напишите программу, которая создает дисковый  файл,  содержащий
записи из трех  элементов:  номер  товара  (пять  символов),  наименование
товара (12 символов) и стоимость единицы товара (одно  слово).  Ввод  этих
значений должен осуществляться пользователем  с  клавиатуры.  Не  забудьте
преобразовать числа из ASCII представления в двоичное представление.

     16.4. Напишите программу, которая выводит на экран файл, созданный  в
вопросе 16.3.

     16.5. Определите текущий блок и запись для следующих номеров  записей
при прямом доступе: а)45, б)73, в)150, г)260.

     16.6. В каком виде номер записи 2652 (десятичное)  устанавливается  в
поле относительной записи блока FCB?

     16.7.  Укажите  шестнадцатеричные  номера  функций   для    следующих
операций: а) прямая запись, б) прямое чтение, в) прямая блочная запись, г)
прямое блочное чтение.

     16.8.  Напишите  команды  для  определения  числа   записей    файла,
предполагая, что операция открытия уже выполнена.  Имена полей с  размером
файла FCB FLSZ и размером записи FCB FCSZ.

     16.9. Используя программу  из  вопроса  16.4  для  создания  файла  с
количеством,  ценами  и  наименованиями  товаров,  сформируйте   файл    с
приведенными ниже данными.  Напишите  программу,  которая  выполняет  одно
блочное чтение данного файла и выводит каждую запись на экран.

               Номер     Цена      Наименование

               023       00315     Ассемблеры
               024       00430     Компоновщики
               027       00525     Компиляторы
               049       00920     Компрессоры
               114       11250     Экстракторы
               117       00630     Буксиры
               122       10520     Лифты
               124       21335     Процессоры
               127       00960     Станки для наклеивания меток
               232       05635     Черпатели?
               999       00000

     16.10.  Измените  программу  из  вопроса  16.9  так,    чтобы    цены
записывались на диск в двоичном формате.

     16.11.  Измените  программу  из  вопроса  16.9    так,    чтобы    а)
использовалась операция прямого чтения, б) пользователь мог вводить  номер
и количество товара и в) выполнялось вычисление и вывод на экран стоимости
(произведение количества товара на стоимость единицы товара).



ГЛАВА 17                      Дисковая память III: Расширенные функции DOS
__________________________________________________________________________

     Ц е л ь: Ознакомить с расширенными функциями DOS,  начиная  с  версии
2.0 для обработки дисковых файлов.


     ВВЕДЕНИЕ
     ________________________________________________________________

     Функции базовой версии DOS для обработки файлов, показанные  в  главе
16, действительны для всех последующих версий DOS. В данной главе показаны
ряд  расширенных  функций,  введенных  в  версиях  DOS  2.0  и  3.0  и  не
поддерживаемых в ранних версиях.  Прежде, чем пытаться выполнить  дисковые
операции из данной главы, следует убедиться в наличии  необходимой  версии
DOS.
     Многие из расширенных функций проще своих аналогов в  базовой  версии
DOS.  В руководствах по  DOS  рекомендуется  использовать  новые  функции,
которые  более  естественны  для  систем  типа  UNIX.  Некоторые  операции
включают использование строк в  формате  ASCIIZ  для  начальной  установки
дисковода, пути доступа и имени файла; номера файла для  последовательного
доступа к файлу; специальных кодов возврата.


     ДАННЫЕ В ФОРМАТЕ ASCIIZ
     ________________________________________________________________

     При использовании многих расширенных функций  для  дисковых  операций
необходимо  сообщить  DOS  адрес  строки  в  формате  ASCIIZ,   содержащей
идентификацию файла в виде номера дисковода, пути доступа  и  имени  файла
(все  параметры    необязательные)    и    строка    должна    завершаться
шестнадцатеричным нулем, например:

               PATHNM1    DB    'B:\TEST.ASM',0
               PATHNM2    DB    'C:\UTILITY\NU.EXE',0

     Обратная  косая  (или  прямая  косая)   используются    в    качестве
разделителя.  Нулевой байт (zero) завершает строку (отсюда название ASCIIZ
формата). Для прерываний, использующих в качестве параметра ASCIIZ строку,
адрес этой  строки  загружается  в  регистр  DX,  например,  командой  LEA
DX,PATHNM1.


     ФАЙЛОВЫЙ НОМЕР И КОДЫ ВОЗВРАТА
     ________________________________________________________________

     Операции создания и открытия файла  требуют  загрузки  в  регистр  AX
двухбайтового числа, представляющего  собой  файловый  номер.  В  главе  8
показано, что стандартные устройства не нуждаются в  операции  открытия  и
могут использовать непосредственно файловые номера: 0 - ввод, 1 - вывод, 2
- вывод сообщений об ошибках, 3 - внешнее устройство, 4 - принтер.
     Для доступа к диску при  создании  или  открытии  файла  используется
ASCIIZ строка  и  функции  DOS   шест.3C   или   3D.   Успешная   операция
устанавливает  флаг  CF  в 0 и помещает файловый номер в регистр AX.  Этот
номер необходимо сохранить в элементе данных DW  и  использовать  его  для
всех  последующих  операций  над дисковым файлом.  При неуспешной операции
флаг CF устанавливается в  1,  а  в  регистр  AX  помещается  код  ошибки,
зависящий от операции (см.табл.17.1).

__________________________________________________________________________

               01   Ошибка номера функции
               02   Файл не найден
               03   Путь доступа не найден
               04   Открыто слишком много файлов
               05   Нет доступа (Операция отвергнута)
               06   Ошибка файлового номера
               07   Блок управления памятью разрушен
               08   Недостаточно памяти
               09   Ошибка адреса блока памяти
               10   Ошибка оборудования
               11   Ошибка формата
               12   Ошибка кода доступа
               13   Ошибка данных
               15   Ошибка дисковода
               16   Попытка удалить оглавление
               17   Другое устройство  ?
               18   Нет больше файлов
__________________________________________________________________________

     Таб.17.1. Коды ошибок


     СОЗДАНИЕ ДИСКОВОГО ФАЙЛА
     ________________________________________________________________

     В последующих разделах  раскрыты  требования  к  созданию,  записи  и
закрытию дисковых файлов для расширенной версии DOS.


                         Создание файла: Шест.3C
                        -------------------------
     Для  создания  нового  файла  или   переписывания    старого    файла
используется функция шест.3C.  При этом регистр DX должен содержать  адрес
ASCIIZ-строки, а регистр  CX  -  необходимый  атрибут.  Байт  атрибут  был
рассмотрен в главе 15; для обычного файла значение атрибута - 0.
     Рассмотрим пример создания обычного файла:

               MOV  AH,3CH         ;Запрос на создание
               MOV  CX,00          ; обычного файла
               LEA  DX,PATHNM1     ;ASCIIZ строка
               INT  21H            ;Вызов DOS
               JC   error          ;Переход по ошибке
               MOV  HANDLE1,AX     ;Сохранение файлового номера в DW

     При правильном открытии операция создает элемент оглавления с  данным
атрибутом, очищает флаг CF и устанавливает файловый номер в  регистре  AX.
Этот номер должен  использоваться  для  всех  последующих  операций.  Если
создаваемый  файл  уже  существует  (т.е.  имя  файла    присутствует    в
оглавлении), то длина этого файла устанавливается в 0 для перезаписи.
     В случае возникновения ошибки операция устанавливает флаг CF  в  1  и
помещает в регистр AX код возврата: 03, 04 или 05 (см.табл.17.1).  Код  05
свидетельствует  либо  о  переполнении  оглавления,    либо    о    защите
существующего файла атрибутом "только  чтение".  При  завершении  операции
необходимо сначала проверить флаг CF, так как при создании файла  возможна
установка в регистре AX файлового номера 0005, который можно легко спутать
с кодом ошибки 05 (нет доступа).


                          Запись файла: шест.40
                         -----------------------
     Для записи  файла  используется  функция  DOS  шест.40.  При  этом  в
регистре BX должен быть установлен файловый номер, в регистре CX  -  число
записываемых байт, а в регистре DX - адрес  области  вывода.  В  следующем
примере происходит запись 256 байт из области OUTREC:

               HANDLE1 DW   ?
               OUTREC  DB   256 DUP (' ')
                       MOV  AH,40H         ;Запрос записи
                       MOV  BX,HANDLE1     ;Файловый номер
                       MOV  CX,256         ;Длина записи
                       LEA  DX,OUTREC      ;Адрес области вывода
                       INT  21H            ;Вызов DOS
                       JC   error2         ;Проверка на ошибку
                       CMP  AX,256         ;Все байты записаны?
                       JNE  error3

     Правильная операция записывает из памяти  на  диск  все  данные  (256
байт), очищает флаг CF и устанавливает в регистре AX  число  действительно
записанных байтов.  Если диск переполнен, то число записанных байтов может
отличаться от заданного числа.  В случае  неправильной  операции  флаг  CF
устанавливается в 1, а в регистр AX заносится код 05 (нет доступа) или  06
(ошибка файлового номера).


                         Закрытие файла: шест.3E
Предыдущая страница Следующая страница
1 ... 44 45 46 47 48 49 50  51 52 53 54 55 56 57 ... 85
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (15)

Реклама