Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Изучение системы команд Ассемблера. Команды обработки строк данных и команды организации циклов
Практическое занятие № 12 «Изучение системы команд Ассемблера. Команды обработки строк данных и команды организации циклов»
Цель работы: изучить команды обработки строк данных и организации циклов.
Образовательные результаты, заявленные в ФГОС: Студент должен уметь: производить инсталляцию и настройку программного обеспечения компьютерных систем;
знать: основные компоненты программного обеспечения компьютерных систем.
Команды обработки строк данных Строка – это последовательность байтов или слов, размещаемых в смежных ячейках памяти.
Таблица 12.1 – Команды обработки строк
Если обрабатываемая строка состоит из 16-разрядных машинных слов, то применяется мнемокоды команд без буквы “B” на конце (например, LODS); если строка состоит из байтов, то – мнемокоды команд с буквой “B” (например, LODSB). Операнды команд после из мнемокодов, как правило, не указываются; везде используется неявная адресация. Команда MOVS, MOVSB (move strings) – это пересылка элемента строки из одной области памяти в другую (в отличие от MOV, которая не может выполнять пересылки «память-память»). Строка-источник адресуется регистрами DS:SI (то есть находится в сегменте памяти, на который указывает DS, и имеет смещение, находящееся в SI), строка-получатель – регистрами ES:DI. Таким образом, строка-получатель размещается в дополнительном сегменте данных, если только значения DS и ES не равны. Содержимое индексных регистров SI и DI во время работы строковых команд не остаётся неизменным – оно также изменяется автоматически в соответствии с правилом SI←SI+delta, DI←DI+delta. Здесь delta=1 для байтовых строк и delta=2 для строк, состоящих из 16-разрядных машинных слов. В ряде случаев возникает необходимость в пересылке строки в обратном порядке, начиная не с первого, а с последнего элемента. Содержимое индексных регистров при этом должно не увеличиваться, а уменьшаться. Направление изменения содержимого задаётся с помощью флага DF в регистре FLAGS микропроцессора: при DF=0 используется «плюс», при DF=1 – «минус». Сам же флаг DF управляется специальными командами: CLD (сбросить флаг, это значение по умолчанию) и STD (установить флаг).
Команда LODS, LODSB (load from string). Команда осуществляет загрузку элемента строки (слова или байта) в регистр AX или AL соответственно. Строка адресуется с помощью регистров DS:SI. Команда STOS, STOSB (store to string). С помощью этой команды производится заполнение строки словом (байтом) из регистра АХ или AL соответственно. Заполняемая строка адресуется с помощью регистров ES:DI. Команда SCAS, SCASB (scan string). Эта команда используется для так называемого «сканирования» одной строки в поисках нужного элемента (слова или байта). В процессе работы команды осуществляется сравнение элемента строки, расположенного по адресу ES:DI, со значением в регистре AX (или AL) путём вычитания; результат вычитания не фиксируется, но устанавливаются соответствующие флаги. Как и при выполнении прочих строковых команд, производится автоинкрементирование (либо автодекрементирование) регистра DI. Команда CMPS, CMPSB (compare strings). Команда осуществляет поэлементное сравнение элементов двух строк (слов или байтов), одна из которых, как и прежде, расположена в памяти по адресу в регистрах DS:SI, вторая – по адресу в ES:DI. При выполнении этой команды производится вычитание элемента строки с адресом в SI из элемента строки с адресом в DI; результат вычитания никуда не записывается, но зато устанавливаются соответствующие флаги. ZF – флаг нуля. Устанавливается в 1, если результат предыдущей команды – ноль. Команды организации циклов При работе на Ассемблере можно организовать циклы, используя команды условных переходов. Однако, кроме этого, 8086-совместимые МП предоставляют в распоряжение программиста специальные команды циклов LOOP, LOOPNZ, LOOPZ. Все эти команды используют метку, расположенную выше по программе. Часть программы между меткой и какой-либо из рассматриваемых команд и есть тело цикла. Перед входом в цикл следует записать в регистр CX число повторений цикла. Каждый раз при очередном повторении тела цикла процессор будет автоматически вычитать единицу их СХ. Цикл закончится, если: - СХ будет равен 0 (для команды LOOP);
- СХ будет равен 0 или флаг ZF будет равен 1 (для команды LOOPNZ); - СХ будет равен 0 или флаг ZF будет равен 0 (для команды LOOPZ). Для организации циклов при работе со строковыми командами имеются специальные команды-префиксы REP (repeat), REPE, REPNE. Они записываются перед основной командой (например, REP MOVSB) и обеспечивают её выполнение не один, а несколько раз, организуя по сути дела аппаратный (очень быстрый) цикл. Число повторений предварительно записывается в CX и на каждом шаге содержимое CX автоматически уменьшается на 1. Префикс REP («повторять, пока не обнулится счётчик») анализирует только одно условие окончания повторений, а именно CX = 0. Префикс REPE («повторять, пока равно») анализирует следующее составное условие окончания повторений: (CX = 0) ИЛИ (ZF = 0). Префикс REPNE («повторять, пока не равно») в качестве условия окончания повторений использует следующее: (CX = 0) ИЛИ (ZF = 1).
Примеры программ Пример 1: вычислить сумму 1+2+…+19+20 и записать результат в регистр SI. Удобно программировать вычисление этой суммы в обратном порядке, т.е. начиная с 20 – тогда можно воспользоваться регистром с убывающим содержимым. В данном случае нам подходит цикл LOOP со счетчиком в CX – ведь его содержимое как раз уменьшается на каждой итерации цикла. MOV AX, 0; будем накапливать сумму в АХ MOV CX, 20; подготовим счётчик цикла MET: ; этой меткой обозначено начало цикла ADD AX, CX; прибавляем очередное слагаемое LOOP MET; переход на начало цикла, если СХ не равно нулю MOV SI, AX; выдадим результат.
Пример 2: Дан массив из трех байтов. Получить другой массив, в котором каждый элемент первого массива увеличен на 5. Рассматривая массив как строку байтов, разместим исходные данные в сегменте данных (DS) с адреса 0000h, а результат – в дополнительном сегменте (ES) также с адреса 0000h. MOV SI, 0; начальное значение для LODS (источник данных) MOV DI, 0; начальное значение для STOS (приемник) MOV CX, 3; в нашем примере – три исходных элемента MET: LODSB ; загрузим очередной байт массива в AL ADD AL, 5; обработаем его, как указано в задаче STOSB ; запишем обработанный байт в массив результата LOOP MET
Задания для практической работы
1 Составить таблицу «Команды обработки строк» с указанием названия команды, ее мнемокода, адресов источника и приемника. 2 Составить таблицу «Команды организации циклов» с указанием названия команды, ее мнемокода и выполняемого действия. 3 Разработать программу на языке Ассемблер для выполнения задачи в соответствии с вариантом.
Таблица 12.2 – Таблица вариантов
Контрольные вопросы
1 В каком случае в мнемокоде команд обработки строк ставится буква В? 2 Как изменить направление изменения содержимого индексных регистров? 3 Опишите работу команды LOOP. 4 Как работает префикс REP? Можно ли его использовать не со строковыми командами?
|
|||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2020-03-27; просмотров: 408; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.117.153.38 (0.01 с.) |