Главная · Поиск книг · Поступления книг · 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 ... 49 50 51 52 53 54 55  56 57 58 59 60 61 62 ... 85
        MOV     CX,CURADR       ;Последняя дорожка/сектор
        CMP     CL,10           ;Последний сектор?
        JNE     C90             ; нет - выйти
        CMP     SIDE,00         ;Обойти, если сторона = 0
        JE      C20
        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  напишите  команды  контроля  записи
(операция верификации).



ГЛАВА 19                                                            Печать
__________________________________________________________________________

     Ц е л ь: Описать возможности программ на языке ассемблера для  вывода
информации на печатающее устройство (принтер).


     ВВЕДЕНИЕ
     ________________________________________________________________

     Вывод на принтер несколько проще операций с  экраном  и  диском.  Для
печати существует несколько операций, выполняющихся через DOS  INT  21H  и
BIOS INT  17H.  Команды,  посылаемые  на  принтер,  включают  коды  "конец
страницы", "конец строки" и "возврат каретки".
     Принтеры  классифицируются  по  качеству  печати.  Матричный  принтер
формирует символы в виде матрицы точек и обеспечивает нормальный, узкий  и
широкий  форматы  символов.  Более    совершенные    матричные    принтеры
обеспечивают точечную графику, наклонный шрифт, жирную  печать  и  двойную
плотность, а также могут печатать,  например,  символы  игральных  карт  и
другие  алфавитно-цифровые    символы.    Высококачественные    печатающие
устройства ограничены набором символов на сменной "ромашке" или  барабане,
но обеспечивают отличное качество печати и большое разнообразие принтеров.
Многие высококачественные  принтеры  обеспечивают  печать  10,  12  или 15
символов  на  дюйм,  а  также  пропорциональное   расположение   пробелов,
подчеркивание,  теневую  и  полужирную печать.  Лазерные принтеры обладают
преимуществами как для матричной графики,  так и для  качественной  печати
текстов.
     Другая классификация печатающих  устройств  связана  с  интерфейсами.
Компьютеры IBM PC имеют  параллельный  интерфейс,  позволяющий  передавать
одновременно восемь битов из процессора на принтер. Кроме того, существует
последовательный интерфейс, который выполняет побитовую передачу данных.
     Многие принтеры имеют буфер памяти, объемом в несколько тысяч байтов.
Принтеры также могут принимать биты  контроля  на  четность  (нечетность).
Принтеры должны "понимать" специальные сигналы  из  процессора,  например,
для прогона листа, перевода строки или горизонтальной  табуляции.  В  свою
очередь, процессор должен "понимать" сигналы от принтера,  указывающие  на
конец бумаги или состояние "занято".
     К сожалению многие типы принтеров по  разному  реагируют  на  сигналы
процессора и  одной  из  наиболее  сложных  проблем  для  программистов  -
обеспечить  соответствие  собственных  программ    имеющимся    печатающим
устройством.


     СИМВОЛЫ УПРАВЛЕНИЯ ПЕЧАТЬЮ
     ________________________________________________________________

     Стандартными символами управления печатью являются следующие:

               Десятичн.    Шест.          Назначение

                  08         08       Возврат на шаг
                  09         09       Горизонтальная табуляция
                  10         0A       Перевод строки
                  11         0B       Вертикальная табуляция
                  12         0C       Прогон страницы
                  13         0D       Возврат каретки

     Г о р и з о н т а л ь н а я     т а б у л я ц и я.     Горизонтальная
табуляция (шест. 09) возможна только на принтерах, имеющих соответствующее
обеспечение, иначе символы  табуляции  игнорируются.  В  последнем  случае
можно имитировать табуляцию выводом соответствующего числа пробелов.

     П е р е в о д  с т р о к и.    Символ   перевода   строки   (шест.OA)
используется для прогона листа на один интервал. Соответственно для печати
через два интервала используется два символа перевода строки.

     П р о г о н  с т р а н и ц ы.   Установка  бумаги   после   включения
принтера определяет начальную позицию печати страницы.  Длина страницы  по
умолчанию составляет 11 дюймов.  Ни процессор, ни принтер автоматически не
определяют конец страницы.  Если ваша программа продолжает печатать  после
конца страницы, то произойдет переход через межстраничную перфорацию на на
чало следующей страницы. Для управления страницами необходимо подсчитывать
число   напечатанных   строк   и  при  достижении  максимального  значения
(например, 55 строк) выдать  код  прогона  страницы  (шест.0C)  и,  затем,
сбросить счетчик строк в 0 или 1.
     В  конце  печати  необходимо  выдать  символ  "перевода  строки"  или
"прогона  страницы"  для  вывода  на  печать  данные  последней    строки,
находящиеся в  буфере  печатающего  устройства.  Использование  последнего
символа "прогон страницы" позволяет установить напечатанный последний лист
в положение для отрыва.


     ФУНКЦИИ ПЕЧАТИ В РАСШИРЕННОЙ ВЕРСИИ DOS
     ________________________________________________________________

     В операционной системе DOS 2.0 имеются  файловые  указатели,  которые
были  показаны  в  главах по управлению экраном дисплея и дисковой печати.
Для вывода на печатающее устройство используется  функция  DOS  шест.40  и
стандартный  файловый  номер 04.  Следующий пример демонстрирует печать 25
символов из области HEADG:

               HEADG     DB   'Industrial Bicycle Mfrs', 0DH, 0AH
                         ...
                         MOV  AH,40H    ;Запрос печати
                         MOV  BX,04     ;Файловый номер принтера
                         MOV  CX,25     ;25 символов
                         LEA  DX,HEADG  ;Область вывода
                         INT  21H       ;Вызов DOS

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


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

__________________________________________________________________________

TITLE   PRTNAME (COM)   Ввод и печать имен
CODESG  SEGMENT PARA PUBLIC 'CODE'
        ASSUME  CS:CODESG,DS:CODESG,SS:CODESG,ES:CODESG
        ORG     100H
BEGIN:  JMP     SHORT MAIN
Предыдущая страница Следующая страница
1 ... 49 50 51 52 53 54 55  56 57 58 59 60 61 62 ... 85
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (15)

Реклама