Лабораторная работа №3
ПРОГРАММИРОВАНИЕ ВЛОЖЕННЫХ ЦИКЛОВ.
1.1 Цель лабораторной работы:
Освоение базово-индексной и базово-индексной со смещением адресаций при работе с 2-мерными массивами, а также форм записи базово-индексной адресаций; изучение способов организации циклов.
1.2 Задание
В соответствии с вариантом задания составьте граф-схему решения задачи и на ее основе разработайте программу .
Получите файл листинга программы .LST.
Выпишите машинные коды команд : JMP,JZ,LOOP,PUSH,POP.
1.3 Содержание отчета
титульный лист;
задание;
граф-схема решения задачи;
текст программы в виде распечатанного .LSTфайла с комментариями;
результаты работы программы (.CRFфайл, состояния регистров, дампы (dump) памяти;
машинные коды требуемых команд.
2. Основные понятия
Как и во всяком языке программирования, обработка массивов выполняется с помощью циклических конструкций. В Ассемблере существует 2 способа организации циклов:
цикл со счетчиком организуется с помощью команды LOOP;
цикл с условием организуется программистом самостоятельно с помощью команды условного перехода Jxxи команды безусловного переходаJMP.
2.1 Циклы со счетчиком
В свою очередь циклы с постусловием делятся на циклы с постоянным и переменным кол-вами повторений
LOOP –цикл с постоянным кол-вом повторений
Команда |
Синтаксис |
Действие |
LOOP |
LOOP <метка> |
СХ является счетчиком повторений, LOOP декрементирует СХ, и если СХ0, то IP= <метка>; если же СХ=0,тогда IP= IP+1. CХ- беззнаковое число, <метка> расположена в диапазоне -127128. |
LOOPZLOOPNZ –цикл с переменным кол-вом повторений
Команда |
Синтаксис |
Действие |
|
LOOPE/ LOOPZ (Сино- нимы) |
LOOPE <метка> |
Цикл, пока равно, но не более СХ раз. СХ является счетчиком повторений, LOOPЕ сначала проверяет флаг ZF: если ZF=1, то декрементируется СХ , и если СХ0, то IP= <метка>; если же ZF=0,тогда IP= IP+1 вне зависимости от СХ. CХ- беззнаковое число, <метка> расположена в диапазоне -127128. |
|
LOOPNE/ LOOPNZ (Сино-нимы) |
LOOPNE <метка> |
Цикл, пока не равно, но не более СХ раз. СХ является счетчиком повторений, LOOPNЕ сначала проверяет флаг ZF: если ZF=0, то декрементируется СХ , и если СХ0, то IP= <метка>; если же ZF=1,тогда IP= IP+1 вне зависимости от СХ. CХ- беззнаковое число, <метка> расположена в диапазоне -127128. |
Общим недостатком LOOPLOOPZLOOPNZявляется ограничение на длину диапазона в пределах -127128 байт.
Пример 1.Граф-схема цикла со счетчиком (рис.1)
Рис.1
имеет следующий шаблон на Ассемблере:
movcx,m;m- кол-во повторений
met:……………
push cx
……………
pop cx
loopmet
Примечание: При необходимости использования в теле цикла регистраCXего содержимое сохраняется в стеке, а перед командойLOOP– обязательно восстанавливается из стека.Metявляется адресом (меткой) перехода. Символ “:” - служебный, обозначающийпрямой ближний переход, т.е. переход в пределах текущего сегмента кода. Следовательно,TASMрезервирует подmet8 бит.