16
Вобычных ОЗУ нет возможности перемещать слова между ячейками, поэтому при организации стека перемещается не массив слов относительно неподвижной верхушки, а верхушка относительно неподвижного массива. Под стек отводится некоторая область ОЗУ, причем адрес верхушки хранится в специальном регистре процессора – указателе стека SP.
Встек можно поместить содержимое регистра общего назначения по команде PUSH или извлечь содержимое верхушки в регистр общего назначения по команде POP. Кроме того, по команде вызова подпрограммы CALL значение программного счетчика PC (адрес следующей команды) помещается в верхушку стека, а по команде RET содержимое верхушки стека извлекается в PC. При каждом обращении в стек указатель SP автоматически модифицируется. В большинстве ЭВМ стек "растет" в сторону меньших адресов, поэтому перед каждой записью содержимое SP уменьшается на 1, а после каждого извлечения содержимое SP увеличивается на 1. Таким образом, SP всегда указывает на верхушку стека.
Цель настоящей лабораторной работы – изучение организации программ
сиспользованием подпрограмм. Кроме того, в процессе организации ЦИКЛОВ мы будем использовать новые возможности системы команд модели ЭВМ, которые позволяют работать с новым классом памяти – сверхоперативной (регистры общего назначения – РОН). В реальных ЭВМ доступ к РОН занимает значительно меньшее время, чем к ОЗУ; кроме того, команды обращения к регистрам короче команд обращения к памяти. Поэтому в POН размещаются наиболее часто используемые в программе данные, промежуточные результаты, счетчики циклов, косвенные адреса и т. п. В системе команд учебной ЭВМ для работы с РОН используются специальные команды, мнемоники которых совпадают с мнемониками соответствующих команд для работы с ОЗУ, но в адресной части содержат символы регистров R0–R9.
Кроме обычных способов адресации (прямой и косвенной) в регистровых командах используются два новых – постинкрементная и преддекрементная. Кроме того, к регистровым относится команда организации цикла JRNZ R,M. По этой команде содержимое указанного в команде регистра уменьшается на 1, и если в результате вычитания содержимого регистра не равно 0, то управление передается на метку М. Эту команду следует ставить в конце тела цикла, метку
17
М – в первой команде тела цикла, а в регистр R помещать число повторений цикла.
Пример
Даны три массива чисел. Требуется вычислить среднее арифметическое их максимальных элементов. Каждый массив задается двумя параметрами: адресом первого элемента и длиной.
Очевидно, в программе трижды необходимо выполнить поиск максимального элемента массива, поэтому следует написать соответствующую подпрограмму.
Параметры в подпрограмму будем передавать через регистры: R1 – начальный адрес массива, R2 – длина массива.
Рассмотрим конкретную реализацию этой задачи. Пусть первый массив начинается с адреса 085 и имеет длину 14 элементов, второй – 100 и 4, третий – 110 и 9. Программа будет состоять из основной части и подпрограммы. Основная программа задает параметры подпрограмме, вызывает ее и сохраняет результаты работы подпрограммы в рабочих ячейках. Затем осуществляет вычисление среднего арифметического и выводит результат на устройство вывода. В качестве рабочих ячеек используются регистры общего назначения R6 и R7 – для хранения максимальных элементов массивов. Подпрограмма получает параметры через регистры R1 (начальный адрес массива) и R2 (длина массива). Эти регистры используются подпрограммой в качестве регистра текущего адреса и счетчика цикла соответственно. Кроме того, R3 используется для хранения текущего максимума, a R4 – для временного хранения текущего элемента. Подпрограмма возвращает результат через аккумулятор. В табл. 8 приведен текст основной программы и подпрограммы. Обратите внимание, цикл в подпрограмме организован с помощью команды JRNZ, а модификация текущего адреса – средствами пост-инкрементной адресации.
|
|
18 |
|
|
|
Таблица 8 |
|
|
|
Текст программы примера |
|
|
|
|
|
|
Команда |
Примечания |
|
|
|
|
|
|
1 |
2 |
|
|
|
|
|
|
|
Основная программа |
|
|
|
|
|
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 R1 |
параметров |
|
|
RD #9 |
третьего |
|
|
WR R2 |
массива |
|
|
CALL M |
Вызов подпрограммы |
|
|
ADD R7 |
Вычисление |
|
|
ADD R6 |
среднего |
|
|
DIV #3 |
арифметического |
|
|
OUT |
|
Вывод результата |
|
HLT |
|
Стоп |
|
|
|
Подпрограмма MAX |
|
M: |
RD @R1 |
Загрузка |
|
WR R3 |
первого элемента в R3 |
|
|
L2: RD @R1+ |
Чтение элемента и модификация адреса |
|
|
WR R4 |
Сравнение |
|
|
|
|
|
|
SUB |
R3 |
и замена, |
|
|
|
|
|
JS L1 |
если R3 < R4 |
|
|
|
|
|
|
MOV R3,R4 |
|
|
|
|
|
|
|
LI: JRNZ R2,L2 |
Цикл |
|
|
|
|
|
|
RD R3 |
Чтение результата в Асс |
|
|
|
|
|
|
RET |
|
Возврат |
|
|
|
|
|
19
Задание на лабораторную работу
Составить и отладить программу учебной ЭВМ для решения следующей задачи. Три массива в памяти заданы начальными адресами и длинами. Вычислить и вывести на устройство вывода среднее арифметическое параметров этих массивов. Параметры определяются заданием к предыдущей лабораторной работе.
Требования к содержанию отчета
Отчет по лабораторной работе должен содержать следующие разделы:
1.Формулировка варианта задания.
2.Граф-схема алгоритма основной программы.
3.Граф-схема алгоритма подпрограммы.
4.Распределение памяти (размещение в ОЗУ переменных, программы и необходимых констант).
5.Тексты программы и подпрограммы.
6.Значения исходных данных и результата выполнения программы.
Контрольные вопросы
1.Как работает команда MOV R3, R7?
2.Какие действия выполняет процессор при реализации команды CALL?
3.Как поведет себя программа примера, если в ней вместо команд CALL M использовать команды JMP M?
4.После начальной установки процессора (сигнал Сброс) указатель стека SP устанавливается в 000. По какому адресу будет производиться запись в стек первый раз, если не загружать SP командой WR SP?
5.Как, используя механизмы постинкрементной и преддекрементной адресации, организовать дополнительный стек в произвольной области памяти, не связанный с SP?
20
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
Основная литература
1. Хорошевский В. Г. Архитектура вычислительных систем [Текст] : доп. М-вом образования и науки Рос. Федерации в качестве учеб. пособия для студентов высш. учеб. заведений / В. Г. Хорошевский. - Изд. 2-е, перераб. и доп. - М. : МГТУ им. Н. Э. Баумана, 2008. - 520 с.
Дополнительная литература
2. Юдина Н. Ю. Вычислительные машины, системы и сети [Электронный ресурс]: учебное пособие / Н.Ю.Юдина; ВГЛТА.- Воронеж, 2014.- 220 с. - ЭБС ВГЛТУ.