Лабораторные работы по системному ПО

Страница: 2/6

MOV DH, 05 ; строка 05

MOV DL, 12 ; столбец 12

INT 10Н ; передача у правления в BIOS

И очистки всего экрана

MOV АН, 0600 ; АН 06 (прокрутка) AL 00 (весь экран)

MOV BH, 07 ; нормальный атрибут

MOV СХ, 0000 ; верхняя левая позиция

MOV DX, 184FH ; нижняя правая позиция

INT 10H ; передача управления в BIOS

Значение 02 в регистре АН указывает команде INT 10Н на выполнение операции установки курсора. Значение 06 в регистре АН указывает на выполнение операции очистки экрана.

Вывод на экран в DOS требует определения текстового сообщения в области данных, установки в регистре АН значения 09 и указания команды DOS INT 21H. В процессе выполнения операции конец сообщения определяется по ограничителю ($), как показано ниже:

INT 10H DB 'имя студента?', ‘$’

.

.

MOV АН, 09 ; запрос вывода на экран

LEA DX, INT 10Н ; загрузка адреса со общения

INT 21H ; вызов DOS

Для ввода данных с клавиатуры, область ввода требует наличия списка параметров, содержащего спецификацию полей, которые необходимы при выполнении команды INT: максимальная длина вводимого текста; поле, куда команда возвращает действительную длину введенного текста в байтах. Для запроса на ввод необходимо поместить в регистр АН номер функции – 10(OAH), загрузить адрес списка параметров в регистр DX и выполнить INT 21H.

Содержание задания.

1. Напишите программу вывода на экран набора символов ASCII - кода.

2. Напишите программу, запрашивающую ввод имени, а затем отображающую в средине экрана введенное имя.

Лабораторная работа № 4

Изучение команд обработки строк

Цель работы: Объяснить назначение специальных цепочечных команд, используемых для обработки специальных символьных данных.

Общие сведения.

Для обработки строковых данных ассемблер имеет пять команд обработки строк:

MOVS - переслать один байт или одно слово из одной области памяти в другую;

LODS - загрузить из памяти один байт в регистр AL или одно слово в регистр АХ;

STOS - записать содержимое регистра AL или АХ в память;

CMPS - сравнить содержимое двух областей памяти размером в один байт или в одно слово;

SCAS - сравнить содержимое регистра AL или АХ с содержимым памяти.

Префикс REP позволяет этим командам обрабатывать строки любой длины. Префикс кодируется непосредственно перед цепочечной командой, например REP MOVS В. Для использования префикса REP необходимо установить начальное значение в регистре СХ. При выполнении цепочечной команды с префиксом REP происходит уменьшение на одно значение в регистре СХ до 0. Таким образом, можно обрабатывать строки любой длины. В следующем примере выполняется пересылка 20 байт из STRING1 в STRING2. Предположим, что оба регистра DS и ES инициализированы адресом сегмента данных:

STRING1 DB 20DUP('*')

STRING2 DB 20DUP (")

……

CLD ; сброс файла DF

MOV СХ, 20 ; счетчик на 20 байт

LEA DI, STRING2 ; адрес "куда"

LEA SI, STRING1 ; адрес "откуда"

REP MOVSB ; переслать данные

Для команды LODS адрес памяти определяется регистрами DS:SI. В зависимости от значения флага DF происходит увеличение или уменьшение значения в регистре SI. Поскольку одна команда STOS также увеличивает или уменьшает адрес в регистре DI на 1 для байта или на два для слова. Практическая польза команды STOS с префиксом REP- инициализация области данных конкретным значением. Длина области (в байтах или словах ) загружается в регистр СХ. Команда CMPS сравнивает содержимое одной области памяти ( адресуемой регистрами DS : SI ) с содержимым другой области ( адресуемой регистрами ES : DI ). В зависимости от флага DF команда CMPS также увеличивает или уменьшает адреса в регистрах SI и DI на 1 для байта или на два для слова. При использовании префикса REP в регистре СХ должно находится значение длины сравниваемых полей. Команда CMPS может сравнивать любое число байтов или слов.

Рассмотрим процесс сравнения двух строк содержащих их имена Jean и JOAN. Сравнение побайтово слева направо приводит к следующему

J : J равно

Е : 0 не равно ( Е<0 )

А : А равно

N : N равно

Сравнение всех четырех байтов заканчивается сравнением N:N - равно/нуль. Так как имена " не равны ", операция должна прекратиться, как только будет обнаружено условие " не равно". Для этих целей команда REP имеет модификацию. REPE, которая повторяет сравнение до тех пор, пока сравниваемые элементы равны или регистр СХ не равен нулю. Кодируется повторяющееся однобайтное сравнение следующим образом :

REPE CMPSB.

Команда SCAS отличается от команды CMPS тем, что сканирует строку на определенное значение байта или слова. Команда SCAS сравнивает содержимое области памяти (адресуемой регистрами ES:DI ) с содержимым регистра AL или АХ. В зависимости от значения флага DF команда SCAS также увеличивает или уменьшает адрес в регистре DI на 1 для байта или на 2 для слова. При использовании префикса REP и значения длины в регистре СХ команды SCAS может сканировать строки другой длины. Команда SCAS особенно полезна в текстовых редакторах, где программа должна сканировать строки, выполняя поиск знаков пунктуации. Так как команда SCAS В должна продолжать сканирование до тех пор, пока результат сканирования "не равно" или регистр СХ не равен нулю, то используется префикс REPNE:

Реферат опубликован: 17/02/2008