Иллюстрированный самоучитель по Assembler

Обработка строк

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

Пример 3.7. Вывод на экран прямой записью в видеопамять.

;В полях данных, адресуемых через DS
msg db 'Измерения закончены'
msg_len=$-msg; Длина строки
;В программном сегменте
mov SI,offset msg; DS:31 › выводимая строка
mov AX,OB800h; Сегментный адрес видеобуфера
mov ES,AX; Будем адресовать через ES
mov DI,25*80*2; Смещение к последней строке экрана
mov CX,msg_len; Счетчик цикла вывода символов
eld; DF=0, движение по строке
; и по экрану вперед
mov AH,31h; Атрибут символов-синий по голубому
outher: lodsb; Взять символ из строки в AL
show; Вывод на экран символа
; из AL и его атрибута из AH
loop outser; Цикл

Регистры DS:SI настраиваются на адрес начата выводимой строки; регистры ES:DI – на адрес требуемой позиции в видеобуфере. В регистр СХ надо поместить длину строки в байтах, а флаг DF сбросить, чтобы двигаться по строке вперед. На экран будет выводиться содержимое регистра АХ, в младшем байте которого должен находиться код ASCII выводимого символа, а в старшем байте – атрибут символа, т.е. код цвета символа (в младшем полубайте) и код цвета фона (в старшем полубайте). В примере число 31h образует синие символы по бирюзовому фону. При желании можно выбрать другую комбинацию цветов, выбрав ее с помощью табл. 3.1.

Таблица 3.1. Коды цветов стандартной цветовой палитры.

Код Цвет Код Цвет
0h Черный 8h Серый
1h Синий 9h Голубой
2h Зеленый 10h Салатовый
3h Бирюзовый 11h Светло-бирюзовый
4h Красный 12h Розовый
5h Фиолетовый 13h Светло-фиолетовый
6h Коричневый 14h Желтый
7h Белый 15h Ярко-белый

Выбирая цвета, следует иметь в виду, что при стандартной настройке видеосистемы для цвета фона можно использовать лишь значения из левого столбца таблицы; выбор любого яркого цвета из правого столбца приведет в выводу мерцающего символа. Например, атрибут символа Bill образует синий мерцающий символ на бирюзовом фоне (а не синий символ на светло-бирюзовом фоне).

Содержательную часть цикла вывода образуют две команды lodsb и stosw. Первая команда загружает в регистр AL код очередного символа, вторая выводит его вместе с атрибутом, хранящемся в АН, на экран. При этом после каждого выполнения команды lodsb содержимое SI увеличивается процессором на 1, смещая адресацию к следующему символу строки; в то же время каждое выполнение команды stosw увеличивает DI на 2 (потому что команда stosw работает со словами), смещая адресацию на экране на 2 байт, т.е. как раз к позиции следующего символа.

Примеры использования команд cmps и seas можно найти в Приложении.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.