Главная · Поиск книг · Поступления книг · 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 ... 18 19 20 21 22 23 24  25 26 27 28 29 30 31 ... 85

     Команда LEA загружает в регистр DX адрес DISAREA для возможности  DOS
локализовать информацию, предназначенную для вывода. В результате успешной
операции флаг  переноса  очищается (это можно проверить),  а в регистре AX
устанавливается число выведенных символов.  Ошибка в данной операции может
произойти,  если  yстановлен  неправильный  файловый номер.  В этом случае
будет установлен флаг CF и код ошибки (в данном случае 6) в  регистре  AX.
Поскольку  регистр  AX  может  содержать  или  длину,  или код ошибки,  то
единственный способ определить состояние ошибки - проверить флаг CF.


                        Упражнение: Вывод на экран
                       ----------------------------
     Воспользуемся  отладчиком  DEBUG  для  проверки  внутренних  эффектов
прерывания.  Загрузите DEBUG и после вывода на экран приглашения введите A
100 для  ввода ассемблерных команд (не машинных команд) по адpесу 100.  Не
забудьте,   что   DEBUG   предполагает,   что   все   числа   вводятся   в
шестнадцатиричном формате:

               100  MOV  AH,40
               102  MOV  BX,01
               105  MOV  CX,хх     (введите длину вашего имени)
               108  MOV  DX,10E
               10B  INT  21
               10D  RET
               10E  DB   'Ваше имя'

     Программа устанавливает в регистре AH запрос на вывод и устанавливает
шест. значение 10F в регистре DX - адрес DB, содержащей ваше имя  в  конце
программы.
     Когда вы наберете все команды, нажмите  еще  раз  Return.  С  помощью
команды U (U  100,10D)  дисассемблируйте  программу  для  проверки.  Затем
используйте команды R и  T  для  трассировки  выполнения.  При  выполнении
команды INT 21H отладчик перейдет в BIOS, поэтому  при  достижении  адреса
10B введите команду GO (G 10D) для перехода к команде RET.  Ваше имя будет
выведено на экран. С помощью команды Q вернитесь в DOS.


     ВВОД С КЛАВИАТУРЫ: РАСШИРЕННЫЙ DOS
     ________________________________________________________________

     Ниже приведены команды, иллюстрирующие использование функции ввода  с
клавиатуры в расширенной версии DOS:

          INAREA    DB   20 DUP (' ')   ;Область ввода
                    MOV  AH,3FH         ;Запрос на ввод
                    MOV  BX,00          ;Номер для клавиатуры
                    MOV  CX,20          ;Максимум байт для ввода
                    LEA  DX,INAREA      ;Адрес области ввода
                    INT  21H            ;Вызов DOS

     Команда LEA  загружает  относительный  адрес  INAREA  в  регистр  DX.
Команда INT ожидает, пока пользователь не введет cимволы с клавиатуры,  но
не проверяет превышает ли число введенных символов максимальное значение в
регистре CX (20 в приведенном примере).  Нажатие клавиши Return (код шест.
0D) указывает на завершение ввода.  Например, после ввода текста "PC Users
Group" INAREA будет содержать:

               PC Users Group, шест.0D, шест.0A

     После  введенного  текста  непосредственно  следует  символ  возврата
каретки (шест.0D),  который  был введен,  и символ конца строки (шест.0A),
который не был  введен.  В  силу  данной  особенности  максимальное  число
символов  и  размер  области  ввода  должны предусматpивать место для двух
символов. Если будет введено cимволов меньше  максимального  значения,  то
область памяти за введенными символами сохранит прежнее значение.
     В результате успешной  операции  будет  очищен  флаг  CF  (что  можно
проверить) и в регистре AX  будет  установлено  число  байт,  введенных  с
клавиатуры.  В предыдущем примере это число будет  равно  14  плюс  2  для
перевода каретки   и   конца  строки,  т.е.  16.  Соответствующим  образом
программа может определить действительное число введенных  символов.  Хотя
данное свойство  весьма тривиально для ответов типа YES или NO,  оно может
быть полезно для ответов с пеpеменной длиной, таких, например, как имена.
     Ошибка ввода может  возникнуть,  если  определен  неправильный  номер
файла. В этом случае будет установлен флаг CF и в регистр AX будет помещен
код ошибки (6 в данном случае).  Так как регистр AX  может  содержать  или
длину введенных данных, или код ошибки, то единственный способ определения
наличия ошибки - проверка флага CF.
     Если  вводить  текст,  который    превышает    максимальную    длину,
yстановленную в регистре CX, то будут приниматься все символы.  Рассмотрим
ситуацию, когда регистр CX содержит 08,а пользователь введет  символы  "PC
Exchange".  В результате первые  восемь  символов  "PC  Excha"  попадут  в
область ввода без кодов возврата каретки и конца  строки.  В  регистре  AX
будет установлена длина 08. Следующая команда INT будет  принимать  данные
не с клавиатуры, а из собственного  буфера,  поскольку  там  еще  остались
предыдущие данные.  Таким образом, в область ввода будут  приняты  символы
"ngе", символ перевода каретки и символ новой строки, в регистре AX  будет
установлено значение 05. Обе операции ввода являются вполне нормальными  и
флаг CF будет очищен.

               Первый INT:      PC Excha       AX = 08
               Второй INT:      ngе,0D,0A      AX = 05

     Программа может определить факт ввода законченного текста, если а)  в
регистре AX получится значение меньше, чем  в  регистре  CX  или  б)  если
содержимые AX и CX равны, но последние два символа в области ввода - 0D  и
0A.
     Встроенные в DOS проверки по функции 0AH для ввода с клавиатуры имеют
более мощные средства.  Их выбор для использования в  программах  является
предпочтительным.


                         Упражнение: Ввод данных
                        -------------------------
     Выполним упражнение в  котором  можно  проследить  операцию  ввода  c
клавиатуры с  помощью отладчика DEBUG.  Предполагаемая программа позволяет
вводить до 12 символов,  включая символы конца  каретки  и  конца  строки.
Загрузите  DEBUG  и  после  вывода  на экран приглашения введите A 100 для
ввода ассемблерных команд,  начиная c адреса 100.  Не забудьте,  что DEBUG
предполагает, что все числа вводятся в шестнадцатиричном формате.

               100  MOV  AH,3F
               102  MOV  BX,00
               105  MOV  CX,0C
               108  MOV  DX,10F
               10B  INT  21
               10D  JMP  100
               10F  DB   ' '

     Программа устанавливает регистры AH  и  BX  для  запроса  на  ввод  c
клавиатуры, заносит максимальную длину ввода в регистр CX  и  загружает  в
регистр DX значение 10F - область DB в  конце  программы.  В  эту  область
будут помещаться вводимые символы.
     Когда вы наберете все команды, нажмите  еще  раз  Return.  С  помощью
команды U 100,108 выполните  дисассемблирование  программы  для  проверки.
Затем используйте команды R  и  T  для  трассировки  четырех  команд  MOV.
Остановившись по адресу 10B, введите G  10D  для  выполнения  команды  INT
(входить в BIOS не  следует).  Теперь  отладчик  позволит  ввести  данные,
завершаемые клавишей Return.  Проверьте содержимое регистра AX,  состояние
флага CF и используя команду D 10F, просмотрите введенные данные в памяти.
Для завершения работы введите команду Q.


     ИСПОЛЬЗОВАНИЕ СИМВОЛОВ ВОЗВРАТА КАРЕТКИ,
     КОНЦА СТРОКИ И ТАБУЛЯЦИИ ДЛЯ ВЫВОДА НА ЭКРАН
     ________________________________________________________________

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

                     Десятичные ASCII        Шестнадцатиричные

               CR           13                      0DH
               LF           10                      0AH
               TAB          09                      09H

     Эти символы при операциях ввода-вывода выполняют одинаковые  действия
как в базовой, так и в расширенной версиях DOS. Например:

          MESSAGE   DB        09,'PC Users Group Annual Report',13,10
                    MOV       AH,40H              ;Запрос на вывод
                    MOV       BX,01               ;Номер файла
                    MOV       CX,31               ;Длина текста
                    LEA       DX,MESSAGE          ;Адрес текста
                    INT       21H                 ;Вызов DOS

     Использование директивы EQU для определения  кодов  делает  программу
более понятной:

     CR             EQU       13                  ;или EQU 0DH
     LF             EQU       10                  ;или EQU 0AH
     TAB            EQU       09                  ;или EQU 09H
     MESSAGE DB     TAB,  'PC Users Group Annual' DB 'Report', CR, LF


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

     - Команда INT 10Н передает управление в BIOS для ввода  с  клавиатуры
или вывода на экран.  Команда  INT  21H  передает  управление  в  DOS  для
выполнения некоторых более сложных действий при операциях ввода-вывода.

     - Будьте внимательны  при  использовании  шестнадцатиричной  нотации,
например INT 21 и INT 21H - это не одно и то же.

     - Будьте внимательны при установке значений в регистры AХ, BX,  CX  и
DX для операций ввода-вывода.

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

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

     -  Для  вывода  на  экран  под  управлением  расширенной  версии  DOS
устанавливайте в регистре AН значение 40Н, а  в  регистре  BX  -  файловый
номер 01.

     - Для ввода с  клавиатуры  под  управлением  расширенной  версии  DOS
устанавливайте в регистре АН значение функции  3FH,  а  в  регистре  BX  -
файловый номер 00. Введенные в область ввода данные завершаются  символами
возврат каретки и перевод строки.  Данная операция не  контролирует  ввод,
превышающий по длине максимальное значение.


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

     8.1. Какие шестнадцатиричные значения строки и столбца  соответствуют
нижнему правому углу экрана 25х40?

     8.2. Напишите команды для установки курсора  по  координатам:  строка
12, столбец 8.

     8.3. Напишите команды для очистки экрана, начиная с 0-го столбца 12-й
строки до 79-го столбца 22-й строки.

     8.4. Составьте необходимые  элементы  данных  и  команды  для  вывода
запроса 'Введите дату (дд/мм/гг)'. За сообщением должен следовать звуковой
сигнал.  Используйте для вывода: а) функцию базовой версии DOS, б) функцию
расширенной версии DOS и файловый номер.

     8.5. Составьте необходимые элементы данных  и  команды  для  ввода  с
клавиатуры в формате  вопроса  8.4.  Используйте  для  ввода:  а)  функцию
базовой версии DOS, б) функцию расширенной версии DOS и файловый номер.

     8.6. Укажите стандартные файловые  номера  для  ввода  с  клавиатуры,
обычного вывода на экран и вывода на принтер.

     8.7.  Введите  в  компьютер  программу  из  рис.8.2  со    следующими
изменениями, ассемблируйте ее, выполните компоновку и проверку работы:  а)
вместо строки 12 середина  строки  15;  б)  вместо  очистки  всего  экрана
очистка только строк от 0 до 15.

     8.8. Измените программу из рис.8.2 для использования ее в расширенной
версии DOS. Выполните ее ассемблирование, компоновку и проверку работы.




ГЛАВА 9                      Экранные операции II: Расширенные возможности
__________________________________________________________________________

     Ц е л ь: Показать  более  развитые  возможности  управления  экраном,
Предыдущая страница Следующая страница
1 ... 18 19 20 21 22 23 24  25 26 27 28 29 30 31 ... 85
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (15)

Реклама