Главная · Поиск книг · Поступления книг · 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 ... 48 49 50 51 52 53 54  55 56 57 58 59 60 61 ... 85
действительности ES:DI) - адрес ASCIIZ-строки, содержащей  новые  значения
дисковода, пути доступа,  имени  и  типа  файла.  Если  указывается  номер
дисковода, то он должен быть одинаков в обоих строках.  Путь доступа может
быть различным, поэтому данная операция может  не  только  переименовывать
файл, но и переносить его в другое подоглавление.

               MOV  AH,56H         ;Запрос на переименование файла
               LEA  DX,oldstring   ;DS:DX
               LEA  DI,newstring   ;ES:DI
               INT  21H            ;Вызов DOS

     В случае ошибки регистр  AX  возвращает  коды  03  (путь  доступа  не
найден), 05 (нет доступа?) и 17 (разные дисководы).
     Другие функции DOS, имеющие отношение  к  дисковым  файлам,  включают
создание подоглавления (шест.39), удаление элемента оглавления  (шест.3A),
изменение текущего оглавления (шест. 3B),  управление  вводом-выводом  для
устройств  (шест.44),    дублирование    файлового    номера    (шест.45),
принудительное  дублирование  файлового  номера    (шест.46),    получение
состояния проверки ? (шест.54).


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

     - Многие функции расширенной версии DOS оперируют с  ASCIIZ-строками,
которые содержат путь доступа и завершаются байтом, содержащим шест.00.

     - Функции создания и открытия возвращают значение  файлового  номера,
который используется для последующего доступа к файлу.

     - В случае ошибок многие функции устанавливают флаг CF и помещают код
ошибки в регистр AX.

     - Как правило, функция создания  используется  для  записи  файла,  а
открытия - для чтения.

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


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

     17.1. Какие значения кодов возврата для ситуаций "файл не  найден"  и
"ошибка файлового номера" ?

     17.2. Определите ASCIIZ-строку по имени PATH1 для файла  CUST.LST  на
дисководе C.

     17.3. Для предыдущего файла (п.17.2) напишите команды а)  определения
элемента по имени CUSTHAN для файлового  номера,  б)  создание  файла,  в)
записи файла из области CUSTOUT (128 байт) и г) закрытия файла. Обеспечьте
проверку на ошибки.

     17.4. Для файла (п.17.3) напишите команды  а)  открытия  файла  и  б)
чтения файла в область CUSTIN. Обеспечьте контроль ошибок.

     17.5. В каких случаях необходимо закрывать файл, который  был  открыт
только для чтения ?

     17.6. Измените программу на  рис.17.4  так,  чтобы  пользователь  мог
вводить с клавиатуры  имя  файла,  который  необходимо  выдать  на  экран.
Обеспечьте возможность любого числа запросов и завершение программы только
по пустому запросу, т.е. простому нажатию клавиши Return.



ГЛАВА 18                                  Дисковая память IV: Функции BIOS
__________________________________________________________________________

     Ц е л ь: Показать основные требования к программированию функций BIOS
для создания и чтения дисковых файлов.


     ВВЕДЕНИЕ
     ________________________________________________________________

     Для дисковых операций можно программировать непосредственно на уровне
BIOS, хотя BIOS и не обеспечивает автоматически  использование  оглавления
или блокирование/деблокирование записей.  Дисковая операция BIOS  INT  13H
рассматривает все "записи", как имеющие размер сектора, а адресацию  диска
осуществляет в терминах действительных номера дорожки и номера сектора.
     Для  дисковых  операций  чтения,  записи  и  верификации   необходима
инициализация следующих регистров:

AH        Определяет  тип  операции:   чтение,   запись,  верификация  или
          форматирование.
AL        Определяет число секторов.
CH        Определяет номер дорожки.
CL        Определяет номер начального сектора.
DH        Номер головки (стороны) : 0 или 1 для дискеты.
DL        Номер дисковода: 0=A, 1=B и т.д.
ES:BX     Адрес буфера  ввода/вывода  в  области  данных  (за  исключением
          операции верификации).


     ДИСКОВЫЕ ОПЕРАЦИИ В BIOS
     ________________________________________________________________

     Для указания необходимой дисковой операции необходимо перед  INT  13H
загрузить в регистр AH соответствующий код.


               AH = 00: Сброс системы контролера дисковода
              ---------------------------------------------
     Данная операция осуществляет  полный  сброс  контролера  дисковода  и
требует для выполнения INT 13H загрузку в  регистр  AH  значение  шест.00.
Операция используется в случаях,  когда  после  других  дисковых  операций
возвращается код серьезной ошибки.


                 AH = 01: Определить состояние дисковода
                -----------------------------------------
     Данная операция возвращает в регистре AL  состояние  дисковода  после
последней операции  ввода/вывода  (см.Байт состояния в следующем разделе).
Операция требует только загрузки значения 01 в регистр AH.


                         AH = 02: Чтение секторов
                        --------------------------
     Данная  операция  выполняет  чтение  в  память  определенного   числа
секторов на одной дорожке.  Число секторов обычно 1, 8 или 9. Адрес памяти
для области ввода должен  быть  загружен  в  регистр  BX,  причем  следует
помнить, что реальный адрес зависит от содержимого регистра EX, так как  в
данном случае используется регистровая пара  ES:BX.  В  следующем  примере
выполняется  чтение  сектора  в  область  INSECT,  которая  должна    быть
достаточно большой, чтобы вместить все данные:

               MOV  AH,02     ;Запрос на чтение
               MOV  AL,01     ; один сектор
               LEA  BX,INSERT ;Буфер ввода в ES:BX
               MOV  CH,05     ;Дорожка 05
               MOV  CL,03     ;Сектор 03
               MOV  DH,00     ;Сторона (головка) 00
               MOV  DL,01     ;Дисковод 01 (B)
               INT  13H       ;Вызов BIOS

     Число действительно прочитанных секторов возвращается в регистре  AL.
Регистры DS, BX, CX и DX сохраняют свои значения.
     В большинстве случаев программа указывает только один сектор или  все
сектора на дорожке. Для последовательного чтения секторов программа должна
увеличивать содержимое регистров  CH  и  CL.  Заметьте,  что  когда  номер
сектора достигает максимального значения, его необходимо сбросить в 01,  а
номер  дорожки  увеличить  на  1  или  изменить  сторону  0  на  1    (для
двухсторонних дискет).


                         AH = 03: Запись секторов
                        --------------------------
     Данная операция записывает данные из указанной области памяти (обычно
512 байтов или кратное 512) в один или  несколько  определенных  секторов.
Управляющая информация загружается в регистры аналогично  операции  чтения
диска (код 02).  Операция записи возвращает в регистре AL число  секторов,
которые действительно были записаны.  Регистры DX, BX, CX и  DX  сохраняют
свои значения.


                       AH = 04: Верификация сектора
                      ------------------------------
     Данная операция проверяет, может ли быть найден указанный  сектор,  и
выполняет своего рода контроль на четность.  Операцию  можно  использовать
после записи  (код  03)  для  гарантии  более  надежного  вывода,  на  что
потребуется  дополнительное  время  ввода/вывода.    Значения    регистров
устанавливаются  аналогично  операции  записи  (код  03),  за  исключением
регистровой  пары  ES:BX  -  их  инициализация  не  требуется.    Операция
возвращает в регистре AL число обработанных секторов.  Регистры DX, BX, CX
и DX сохраняют свои значения.


                     AH = 05: Форматирование дорожек
                    ---------------------------------
     Данная операция используется для форматирования  определенного  числа
дорожек в соответствии с одним из четырех размеров (стандарт  для  системы
PC - 512).  Операции чтения и записи для  локализации  требуемого  сектора
требуют информацию о формате.  Для форматирования регистровая  пара  ES:BX
должна содержать адрес, который указывает на  группу  адресных  полей  для
дорожки.  Для каждого  сектора  на  дорожке  должен  быть  четырехбайтовый
элемент в виде T/H/S|B, где

               T номер дорожки,
               H номер головки,
               S номер сектора,
               B число байт на секторе, (00-128, 01-256, 02-512, 03-1024).

     Например, для форматирования 03 дорожки, на стороне 00 и  512  байтов
на сектор, первый элемент должен иметь значение  шест.03000102  и  за  ним
должны  быть  описаны  элементы  для  остальных  секторов   на    дорожке.
Техническое руководство по AT содержит ряд дополнительных операций BIOS.


     БАЙТ СОСТОЯНИЯ
     ________________________________________________________________

     Для всех рассмотренных выше операций (02,  03,  04  и  05)  в  случае
нормального завершения флаг CF и регистр AH содержит 0.  В  случае  ошибки
флаг CF  устанавливается  в  1,  а  регистр  AH  содержит  код  состояния,
идентифицирующий причину  ошибки.  Код  состояния  аналогичен  значению  в
регистре AL после выполнения операции 01.

                   AH                   Причина

               0000 0001     Ошибка команды для дискеты
               0000 0010     Не найден адресный маркер на диске
               0000 0011     Попытка записи на защищенный диск
               0000 0100     Не найден сектор
               0000 1000     Выход за границы DMA (памяти прямого доступа)
               0000 1001     Попытка доступа через границу 64K
               0001 0000     Чтение сбойный участок на диске
               0010 0000     Ошибка контролера дисковода
               0100 0000     Ошибка установки (поиска)
               1000 0000     Ошибка оборудования

     В случае возникновения ошибки, обычным действием является сброс диска
(AH=00) и троекратное повторение операции.  Если таким образом  ошибка  не
устраняется,  то  на  экран  выводится   соответствующее    сообщение    и
пользователь может сменить дискету.


     ПРОГРАММА: ИСПОЛЬЗОВАНИЕ BIOS ДЛЯ ЧТЕНИЯ СЕКТОРОВ
     ________________________________________________________________

__________________________________________________________________________

TITLE   BIOREAD (COM)   Чтение дискового сектора через BIOS
CODESG  SEGMENT PARA 'Code'
        ASSUME  CS:CODESG,DS:CODESG,SS:CODESG,ES:CODESG
        ORG     100H
BEGIN   JMP     MAIN
; ---------------------------------------------------------
RECDIN  DB      512 DUP(' ')    ;Область ввода
ENDCDE  DB      00
CURADR  DW      0304H           ;Начало (дорожка/сектор)
ENDADR  DW      0501H           ;Конец (дорожка/сектор)
READMSG DB      '*** Read error ***$'
SIDE    DB      00
; ---------------------------------------------------------
MAIN    PROC    NEAR
        MOV     AX,0600H        ;Функция прокрутки экрана
A20LOOP:
        CALL    Q10SCR          ;Очистить экран
        CALL    Q20CURS         ;Установить курсор
        CALL    C10ADDR         ;Определить адрес на диске
        MOV     CX,CURADR
        MOV     DX,ENDADR
        CMP     CX,DX           ;Последний сектор?
        JE      A90             ; да - выйти
        CALL    F10READ         ;Получить дисковую запись
        CMP     ENDCDE,00       ;Ошибка чтения?
        JNZ     A90             ; да - выйти
        CALL    G10DISP         ;Вывести сектор на экран
        JMP     A20LOOP         ;Повторить
A90     RET                     ;Завершить программу
MAIN    ENDP
;               Вычислить следующий адрес на диске:
;               ----------------------------------
C10ADDR PROC    NEAR
Предыдущая страница Следующая страница
1 ... 48 49 50 51 52 53 54  55 56 57 58 59 60 61 ... 85
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (15)

Реклама