Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Asm_lab-Rus.docx
Скачиваний:
10
Добавлен:
27.08.2019
Размер:
238.79 Кб
Скачать
  1. Лабораторная работа №2 Изучение способов организации ветвлений и циклов на языке ассемблер

    1. Цель работы

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

    1. Указания по подготовке к выполнению лабораторной работы

При подготовке к выполнению лабораторной работы необходимо ознакомится с материалом лекций, который посвящен организации циклов условных переходов, структур типа switch-case, структуре программы, директивам компилятора, способам адресации, описанию регистров, представлению данных в памяти ЭВМ.

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

      1. Строковые операции

Все команды для работы со строками (массивами) считают, что строка-источник находится по адресу DS:ESI (или DS:SI), то есть в сегменте памяти, адресуемом сегментным регистром DS со смещением в ESI, а строка-приемник – соответственно в ES:EDI (или ES:DI). Кроме того, все строковые команды работают только с одним элементом строки (байтом (BYTE), словом (WORD) или двойным словом (DWORD)) за один раз. Для того чтобы команда выполнялась над всей строкой, необходим один из префиксов повторения операций.

REP

Повторять

REPE

Повторять, пока равно

REPNE

Повторять, пока не равно

REPZ

Повторять, пока ноль

REPNZ

Повторять, пока не ноль

Все эти команды – префиксы для операций над строками. Любой из префиксов выполняет следующую за ним команду строковой обработки столько раз, сколько указано в регистре ЕСХ (или СХ, в зависимости от разрядности адреса), уменьшая его при каждом выполнении команды на 1. Кроме того, префиксы REPZ и REPE прекращают повторения команды, если флаг ZF сброшен в 0, и префиксы REPNZ и REPNE прекращают повторения, если флаг ZF установлен в 1. Префикс REP обычно используется с командами INS, OUTS, MOVS, LODS, STOS, а префиксы REPE, REPNE, REPZ и REPNZ – с командами CMPS и SCAS. Поведение префиксов не с командами строковой обработки не определено.

Для указания того, в какую сторону (уменьшение или увеличение) должен измениться текущий индекс строки (массива) после выполнения очередного действия, служит флаг направления – DF. После выполнения команды регистры ESI (SI) и EDI (DI) увеличиваются на 1, 2 или 4 (если копируются байты, слова или двойные слова соответственно), если флаг DF = 0, и уменьшаются, если DF = 1. Для установки в 1 флага направления DF служит команда процессора STD, для сброса его в 0 служит команда процессора CLD.

Все команды строковой обработки имеют несколько вариаций в именовании, которые указывают на размерность обрабатываемых данных. При использовании базовой команды ассемблер сам определяет, какую команду поставить на основании размерности операндов, указанных в команде. Перечень всех команд указан в таблице.

Команда

MOVS

CMPS

SCAS

LODS

STOS

INS

OUTS

Назначе­ние

Копирование строки

Сравне­ние строк

Скани­рование строки

Чтение из строки

Запись в строку

Чтение строки из порта

Запись строки в порт

Байты

MOVSB

CMPSB

SCASB

LODSB

STOSB

INSB

OUTSB

Слова

MOVSW

CMPSW

SCASW

LODS

STOSW

INSW

OUTSW

Двойные слова

MOVSD

CMPSD

SCASD

LODS

STOSD

INSD

OUTSD

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]