< Назад  Далее >

Статья 7. Вывод на экран символьной информации

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


Пример 7.1. Вывод на экран информационного сообщения


text     segment 'code'       ; Начало сегмента команд
         assume CS:text, DS:data
begin:   mov    AX,data       ; Инициализация сегментного
         mov    DS,AX         ; регистра DS
         mov    AH,9          ; Функция DOS вывода на экран
         mov    DX,offset message ; Адрес выводимого сообщения
         int    21h           ; Вызов DOS
         mov    AX,4C00h      ; Завершение программы
         int    21h
text     ends                 ; Конец сегмента команд
data     segment              ; Начало сегмента данных
message  db 'Другую группу составляют различные аспекты реализации '
         db 'в программах на языке ассемблера аппаратных и '
         db 'системных возможностей персонального компьютера:'
         db '- программирование ввода-вывода;'
         db '- использование прерываний BIOS и функций DOS;'
         db '- программирование арифметического сопроцессора;'
         db '- работа в защищенном режиме;'
         db '- управление обычной и расширенной памятью.$'
data     ends                 ; Конец сегмента данных
stk      segment stack        ; Начало сегмента стека
         dw 128 dup (0)       ; Стек
stk      ends                 ; Конец сегмента стека
         end    begin         ; Конец текста программы

Заметим, что эта программа написана стандартным образом: в ней имеются сегменты команд, данных и стека. Так же будут составляться и программы последующих примеров этой книги.

Текст, предназначенный для вывода на экран, включен в программу в помощью директивы db (определить байт). Поскольку длина текста превышает ширину экрана, он разбит на участки, каждый из которых формально составляет отдельное предложение языка ассемблера. Заканчивается текст знаком $, характеризующим конец строки для функции DOS 09h.

Подготовив и выполнив эту программу, мы увидим, что весь текст вывелся на экран сплошной последовательностью символов без разбивки на строки и абзацы. Неприятно также и то, что наш текст вывелся на «грязный» экран с остатками предыдущих выводов. Для получения более удобочитаемого вывода в символьную строку следует включить коды управления курсором:

С очисткой экрана дело обстоит сложнее. Единственное, что пока можно сделать — это вывести на экран столько строк пробелов, чтобы, перемещаясь по мере вывода вверх по экрану, они очистили всю его верхнюю часть.

В примере 7.2 представлено описание модифицированной строки message (все остальные предложения программы не изменяются).


Пример 7.2. Вывод на экран форматированного текста


message  db 80 * 18 dup (' ')
         db 9, 'Другую группу составляют различные аспекты реализации в'
         db ' программах на', 10, 13, 'языке ассемблера аппаратных и'
         db ' системных возможностей персонального компьютера:', 10, 13
         db 9, '- программирование ввода-вывода;', 10, 13
         db 9, '- использование прерываний BIOS и функций DOS;', 10, 13
         db 9, '- программирование арифметического сопроцессора;', 10, 13
         db 9, '- работа в защищенном режиме;', 10, 13
         db 9, '- управление обычной и расширенной памятью.$'

Пробелы (18 строк по 80 пробелов в строке) описаны с помощью оператора dup (duplicate, дублировать). Перед словом dup указывается коэффициент повторения (в котором можно использовать арифметические выражения), а после оператора dup в скобках — повторяемая строка (состоящая не обязательно из одного символа). Коды табуляции создадут отступы красных строк. Чтобы текст выглядел на экране аккуратно, мы в середину первого абзаца включили коды 10 и 13 для перехода на следующую строку.

Кроме обычных алфавитно-цифровых символов и других знаков, имеющихся на клавиатуре компьютера (например, знаков < > [ ] { } | и др.) на экран можно выводить символы псевдографики. Таких символов всего 48; им соответствуют коды от 176 до 223. Так, например, для формирования на экране двойной рамки используются следующие коды:

Символы псевдографики

Наконец, если в строку, выводимую на экран, включить код 7, прозвучит короткий звуковой сигнал.

В примере 7.3 приведена символьная строка, вывод которой с помощью функции 09h DOS приведет к выводу длительного звукового сигнала и изображению приблизительно в центре чистого экрана слова «Внимание!» в рамке.


Пример 7.3. Вывод на экран информационного кадра


message  db 25 dup (7)
         db 80 * 12 dup (' ')
         db 35 dup (' '), 201, 9 dup (205), 187, 10, 13
         db 35 dup (' '), 186, 'Внимание!', 186, 10, 13
         db 35 dup (' '), 200, 9 dup (205), 188, 10, 13
         db 10 * 80 dup (' '), '$'

В приведенных выше примерах некоторые символы вводились в программу в виде их изображений (букв), а другие — с помощью их кодов. В действительности все символы, отображаемые на экране терминала или выводимые на печать, имеют закрепленные за ними коды, которые называются кодами ASCII. Каждый код ASCII занимает один байт и может принимать значение от 0 до 255. Совокупность всех 255 кодов вместе с изображениями символов составляют кодовою таблицу ASCII (рис. 7.1).

Рис. 7.1. Кодовая таблица для нашей страны в десятичном представлении

Рис. 7.1. Кодовая таблица для нашей страны в десятичном представлении


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


Сайт управляется системой uCoz