ТОП 10:

Практическая работа 9. Программирование цикла с переадресацией



.

ЦЕЛЬ РАБОТЫ

Приобретение навыков работы с регистрами процессора. и памятью.

ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ

  1. Прочитать методические указания 1, 2
  2. Разобрать приведенные примеры 1, 2
  3. Выполнить задания к работе 1 и 2
  4. Ответить на контрольные вопросы 1, 2

Оформите отчет, который должен содержать:

- титульный лист (см. приложение);

-постановку задачи;

-формулировка варианта задания.

-размещение данных в ОЗУ.

-программа в форме таблицы

-последовательность состояний регистров ЭВМ при выполнении программы в режиме Шаг для одного значения аргумента.

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

МЕТОДИЧЕСКИЕ УКАЗАНИЯ 1.

Программирование цикла с переадресацией

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

ПримерЗ

Разработать программу вычисления суммы элементов массива чисел С], С2,..., С„ . Исходными данными в этой задаче являются: п — количество суммируемых чисел и Сх, С2,..., С„ — массив суммируемых чисел. Заме­тим, что должно выполняться условие п > 1, т. к. алгоритм предусматривает, по крайней мере, одно суммирование. Кроме того, предполагается, что сумми­руемые числа записаны в ОЗУ подряд, т. е. в ячейки памяти с последователь­ными адресами. Результатом является сумма S.

 
 

Составим программу для вычисления суммы со следующими конкретными параметрами: число элементов массива— 10, элементы массива расположены в ячейках ОЗУ по адресам 040, 041, 042,..., 049. Используемые для решения задачи промежуточные переменные имеют следующий смысл: At — адрес числа С,, i е {l, 2,..., 10}; ОЗУ( At) — число по адресу At, S — текущая сум­ма; к — счетчик цикла, определяющий число повторений тела цикла.

Распределение памяти таково. Программу разместим в ячейках ОЗУ, начиная с адреса 000, примерная оценка объема программы — 20 команд; промежу­точные переменные: Аг — в ячейке ОЗУ с адресом 030, к — по адресу 031, S — по адресу 032. ГСА программы показана на рис. 9.2, текст программы с комментариями приведен в табл. 9.7.

Адрес Команда Примечание
RD #40 Загрузка начального адреса массива 040
WR 30 в ячейку 030
RD #10 Загрузка параметра цикла к = 10 в ячейку 031
WR 31  
RD #0 Загрузка начального значения суммы S = 0
WR 32 в ячейку 032
Ml: RD 32 Добавление
ADD @30 к текущей сумме
WR 32 очередного элемента массива
RD30 Модификация текущего
ADD #1 адреса массива
WR 30 (переход к следующему адресу)
RD 31 Уменьшение счетчика
SUB #1 (параметра цикла)
WR 31 на1
JNZ Ml Проверка параметра цикла и переход при к ■*■ 0
RD 32 Вывод
OUT результата
HLT Стоп

Задание 3

1. Написать программу определения заданной характеристики последовательности чисел С1, С2,..., Сп . Варианты заданий приведены в табл. 9.8.

2. Записать программу в мнемокодах, введя ее в поле окна Текст программы.

3. Сохранить набранную программу в виде текстового файла и произвести ассемблирование мнемокодов.

4. Загрузить в ОЗУ необходимые константы и исходные данные.

Отладить программу

Номер варианта Характеристика последовательности чисел С,, С2,..., С„
Количество четных чисел
Номер минимального числа
Произведение всех чисел
Номер первого отрицательного числа
Количество чисел, равных С}
Количество отрицательных чисел
Максимальное отрицательное число
Номер первого положительного числа
Минимальное положительное число
Номер максимального числа
Количество нечетных чисел
Количество чисел, меньших С{
Разность сумм четных и нечетных элементов массивов
Отношение сумм четных и нечетных элементов массивов

Примечание.Под четными (нечетными) элементами массивов понимаются элементы масси­вов, имеющие четные (нечетные) индексы. Четные числа — элементы массивов, делящиеся без остатка на 2.

Содержание отчета

1. Формулировка варианта задания.

2. Граф-схема алгоритма решения задачи.

3. Распределение памяти (размещение в ОЗУ переменных, программы и не­
обходимых констант).

4. Программа.

5. Значения исходных данных и результата выполнения программы.

9.3.4. Контрольные вопросы

1. Как организовать цикл в программе?

2. Что такое параметр цикла?

3. Как поведет себя программа, приведенная в табл. 9.7, если в ней будет отсутствовать команда wr 31 по адресу 014?

4. Как поведет себя программа, приведенная в табл. 9.7, если метка mi будет поставлена по адресу 005? 007?

Практическая работа №9-10 Работа со стековой памятью. (Ассемблер)

ЦЕЛЬ РАБОТЫ

Приобретение навыков работы со стековой памятью. (Ассемблер)

ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ

1. Прочитать задания к работе

4. Оформите отчет, который должен содержать:

-титульный лист (см. приложение);

-постановку задачи;

- описание пошагового исполнения;

- отчет о полученном результате

МЕТОДИЧЕСКИЕ УКАЗАНИЯ

ПОДПРОГРАММЫ И СТЕК

В программировании часто встречаются ситуации, когда одинаковые дейст­вия необходимо выполнять многократно в разных частях программы (напри­мер, вычисление функции sin*). При этом с целью экономии памяти не сле­дует многократно повторять одну и ту же последовательность команд — дос­таточно один раз написать так называемую подпрограмму (в терминах языков высокого уровня — процедуру) и обеспечить правильный вызов этой подпро­граммы и возврат в точку вызова по завершению подпрограммы.

Для вызова подпрограммы необходимо указать ее начальный адрес в памяти и передать (если необходимо) параметры — те исходные данные, с которыми будут выполняться предусмотренные в подпрограмме действия. Адрес под­программы указывается в команде вызова call, а параметры могут переда­ваться через определенные ячейки памяти, регистры или стек.

Возврат в точку вызова обеспечивается сохранением адреса текущей коман­ды (содержимого регистра PC) при вызове и использованием в конце подпро­граммы команды возврата ret, которая возвращает сохраненное значение ад­реса возврата в PC.

Для реализации механизма вложенных подпрограмм (возможность вызова подпрограммы из другой подпрограммы и т. д.) адреса возврата целесообраз­но сохранять в стеке. Стек ("магазин") — особым образом организованная безадресная память, доступ к которой осуществляется через единственную ячейку, называемую верхушкой стека. При записи слово помещается в вер­хушку стека, предварительно все находящиеся в нем слова смещаются вниз на одну позицию; при чтении извлекается содержимое верхушки стека (оно при этом из стека исчезает), а все оставшиеся слова смещаются вверх на одну позицию. Такой механизм напоминает действие магазина стрелкового ору­жия (отсюда и второе название). В программировании называют такую дис­циплину обслуживания LIFO (Last In First Out, последним пришел — первым вышел) в отличие от дисциплины типа очередь— FIFO (First In First Out, первым пришел — первым вышел).

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

В стек можно поместить содержимое регистра общего назначения по команде push или извлечь содержимое верхушки в регистр общего назначения по команде pop. Кроме того, по команде вызова подпрограммы call значение программного счетчика PC (адрес следующей команды) помещается в вер­хушку стека, а по команде ret содержимое верхушки стека извлекается в PC. При каждом обращении в стек указатель SP автоматически модифицируется.

В большинстве ЭВМ стек "растет" в сторону меньших адресов, поэтому пе­ред каждой записью содержимое SP уменьшается на 1, а после каждого из­влечения содержимое SP увеличивается на 1. Таким образом, SP всегда ука­зывает на верхушку стека.

Цель настоящей лабораторной работы — изучение организации программ с использованием подпрограмм. Кроме того, в процессе организации циклов мы будем использовать новые возможности системы команд модели ЭВМ, которые позволяют работать с новым классом памяти — сверхоперативной (регистры общего назначения — РОН). В реальных ЭВМ доступ в РОН зани­мает значительно меньшее время, чем в ОЗУ; кроме того, команды обраще­ния с регистрами короче команд обращения к памяти. Поэтому в РОН разме­щаются наиболее часто используемые в программе данные, промежуточные результаты, счетчики циклов, косвенные адреса и т. п.

В системе команд учебной ЭВМ для работы с РОН используются специаль­ные команды, мнемоники которых совпадают с мнемониками соответствую­щих команд для работы с ОЗУ, но в адресной части содержат символы реги­стров RO—R9.

Кроме обычных способов адресации (прямой и косвенной) в регистровых командах используются два новых — постинкрементная и преддекрементная (см. табл. 8.5). Кроме того, к регистровым относится команда организации цикла JRNZ R,M. По этой команде содержимое указанного в команде регист­ра уменьшается на 1, и если в результате вычитания содержимого регистра не равно 0, то управление передается на метку м. Эту команду следует ставить в конце тела цикла, метку м — в первой команде тела цикла, а в регистр R по­мещать число повторений цикла.

Пример

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

Параметры в подпрограмму будем передавать через регистры: R1 — началь­ный адрес массива, R2 — длина массива.

Рассмотрим конкретную реализацию этой задачи. Пусть первый массив на­чинается с адреса 085 и имеет длину 14 элементов, второй— 100 и 4, тре­тий— 110 и 9. Программа будет состоять из основной части и подпрограм­мы. Основная программа задает параметры подпрограмме, вызывает ее и со­храняет результаты работы подпрограммы в рабочих ячейках. Затем осуществляет вычисление среднего арифметического и выводит результат на устройство вывода. В качестве рабочих ячеек используются регистры общего назначения R6 и R7 — для хранения максимальных элементов массивов. Подпрограмма получает параметры через регистры R1 (начальный адрес мас­сива) и R2 (длина массива). Эти регистры используются подпрограммой в качестве регистра текущего адреса и счетчика цикла соответственно. Кроме того, R3 используется для хранения текущего максимума, a R4 — для вре­менного хранения текущего элемента. Подпрограмма возвращает результат через аккумулятор. В табл. 9.9 приведен текст основной программы и под­программы. Обратите внимание, цикл в подпрограмме организован с по­мощью команды jrnz, а модификация текущего адреса— средствами пост­инкрементной адресации.

Программа примера

 

Команда Примечания  
Основная программа  
RD #85 Загрузка  
WR R1 параметров  
RD #14 первого  
WR R2 массива  
CALL M Вызов подпрограммы  
WR R6 Сохранение результата  
RD #100 Загрузка  
WR R1 параметров  
RD #4 второго  
WR R2 массива  
CALL M   Вызов подпрограммы
WR R7   Сохранение результата
RD #110   Загрузка
WR Rl   параметров
RD #9   третьего
WR R2   массива
CALL M   Вызов подпрограммы
ADD R7   Вычисление
ADD R6   среднего
DIV #3   арифметического
OUT   Вывод результата
Подпрограмма MAX  
HLT   Стоп
M: RD @R1   Загрузка
WR R3   первого элемента в R3
L2: RD @R1+   Чтение элемента и модификация адреса
WR R4   Сравнение
SUB R3   и замена,
JS LI   если R3 < R4
MOV R3,R4    
LI: JRNZ R2,L2   Цикл
RD R3   Чтение результата в Асе
RET   Возврат
         

Задание

Составить и отладить программу учебной ЭВМ для решения следующей за­дачи. Три массива в памяти заданы начальными адресами и длинами. Вычис­лить и вывести на устройство вывода среднее арифметическое параметров этих массивов. Параметры определяются заданием к предыдущей лаборатор­ной работе (см. табл. 9.8), причем соответствие между номерами вариантов заданий 3 и 4 устанавливается по табл. 9.10.

 

Номер варианта задания 4
Номер строки в табл. 9.9

Содержание отчета

Формулировка варианта задания.

Граф-схема алгоритма основной программы.

Граф-схема алгоритма подпрограммы.

Распределение памяти (размещение в ОЗУ переменных, программы и необходимых констант).

Тексты программы и подпрограммы.

Значения исходных данных и результата выполнения программы.

Контрольные вопросы

Как работает команда mov R3, R7?

Какие действия выполняет процессор при реализации команды call?

Как поведет себя программа примера 4, если в ней вместо команд call m использовать команды jmp m?

После начальной установки процессора (сигнал Сброс) указатель стека SP устанавливается в 000. По какому адресу будет производиться запись в стек первый раз, если не загружать SP командой wrsp?

Как, используя механизмы постинкрементной и преддекрементной адресации, организовать дополнительный стек в произвольной области памяти, не связанный с SP?


 







Последнее изменение этой страницы: 2016-07-14; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.228.10.64 (0.012 с.)