
- •8.091402 “Системы управления и автоматики”
- •Введение
- •Порядок выполнения работы.
- •Задания на лабораторную работу.
- •Содержание отчета.
- •Контрольные вопросы.
- •Лабораторная работа №2 Изучение способов организации ветвлений и циклов на языке ассемблер
- •Цель работы
- •Указания по подготовке к выполнению лабораторной работы
- •Строковые операции
- •Копирование строки
- •Сравнение строк
- •Сканирование строки.
- •Чтение из строки
- •Запись в строку
- •Чтение строки из порта
- •Запись строки в порт
- •Рекомендации по выполнению лабораторной работы
- •Задания на лабораторную работу.
- •Содержание отчета.
- •Контрольные вопросы.
- •Искажение имен
- •Подключение библиотек
- •Задания на лабораторную работу.
- •Содержание отчета.
- •Контрольные вопросы.
- •Лабораторная работа №4 Управление памятью.
- •Цель работы
- •Указания по подготовке к выполнению лабораторной работы
- •Содержание отчета
- •В данной лабораторной работе необходимо выполнить следующее:
- •Задания на лабораторную работу.
- •Контрольные вопросы и задания
- •Задания на лабораторную работу.
- •Содержание отчета.
- •Контрольные вопросы.
- •Задания на лабораторную работу.
- •Задания на лабораторную работу.
- •Содержание отчета.
- •Контрольные вопросы.
- •Надруковано в учбово-виробничому
- •61166, Харкiв, просп. Ленiна, 14.
Лабораторная работа №2 Изучение способов организации ветвлений и циклов на языке ассемблер
Цель работы
Ознакомление с функциональными возможностями систем программирования на языке ассемблер, структурой программы, основными командами и директивами языка программирования ассемблер, которые позволяют осуществлять ветвление, организовывать циклы. Получить навыки составления нелинейных программ на языке ассемблер и их отладки. Ознакомление с расширенными возможностями отладчика.
Указания по подготовке к выполнению лабораторной работы
При подготовке к выполнению лабораторной работы необходимо ознакомится с материалом лекций, который посвящен организации циклов условных переходов, структур типа switch-case, структуре программы, директивам компилятора, способам адресации, описанию регистров, представлению данных в памяти ЭВМ.
Очень часто при обработке строк, массивов данных необходимо осуществлять последовательное сравнение одного или нескольких элементов массива с остальными. Для этой решения этой задачи на языках высокого уровня применяют циклы, однако при программировании на ассемблере, часто целесообразнее применять «Строковые операции». «Строковые операции» – это набор команд, который позволяет провести циклическую обработку всей строки (массива) выполнив одну команду процессора. Перед выполнением строковой команды необходимо осуществить инициализацию ряда регистров, указав, где находится строка (элемент) источник и где находится строка (элемент) приемник, а также количество повторений команды.
Строковые операции
Все команды для работы со строками (массивами) считают, что строка-источник находится по адресу 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 |