Лабораторная работа №1 «Архитектура ЭВМ и система команд». Архитектура эвм и вычислительных систем
Скачать 0.54 Mb.
|
9.3.3. Содержание отчета 1. Формулировка варианта задания. 2.Граф схема алгоритма решения задачи. 3. Распределение памяти (размещение в ОЗУ переменных, программы и необходимых констант). 4. Программа. 5. Значения исходных данных и результата выполнения программы. 9.3.4. Контрольные вопросы 1. Как организовать цикл в программе? 2. Что такое параметр цикла? 3. Как поведет себя программа, приведенная в табл. 9.7, если в ней будет отсутствовать команда wr 31 по адресу 014? 4. Как поведет себя программа, приведенная в табл. 9.7, если метка m1 будет поставлена по адресу 005? 007? Федеральное агентство по культуре и кинематографии Федеральное государственное образовательное учреждение среднего профессионального образования «Сергиево-Посадский киновидеотехнический колледж» Рассмотрено на заседании предметной комиссии «___» ____________________ 200__г. Председатель предметной комиссии _______________________________ Утверждено на заседании методического кабинета «___» ____________________ 200__г. Председатель методического кабинета _________________________________ Лабораторная работа № 4 «Подпрограммы и стек» По учебной дисциплине «Архитектура ЭВМ и вычислительных систем» Выполнил: Студент ____ курса Группы_____ _______________________ Принял: преподаватель _______________________ Сергиев Посад 2007 г В программировании часто встречаются ситуации, когда одинаковые действия необходимо выполнять многократно в разных частях программы (например, вычисление функции sin x). При этом с целью экономии памяти не следует многократно повторять одну и ту же последовательность команд — достаточно один раз написать так называемую подпрограмму (в терминах языков высокого уровня — процедуру) и обеспечить правильный вызов этой подпрограммы и возврат в точку вызова по завершению подпрограммы. Для вызова подпрограммы необходимо указать ее начальный адрес в памяти и передать (если необходимо) параметры — те исходные данные, с которыми будут выполняться предусмотренные в подпрограмме действия. Адрес подпрограммы указывается в команде вызова call, а параметры могут передаваться через определенные ячейки памяти, регистры или стек. Возврат в точку вызова обеспечивается сохранением адреса текущей команды (содержимого регистр ГС) при вызове и использованием в конце подпрограммы команды возврата, которая возвращает сохраненное значение адреса возврата в 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, то управление передается на метку M. Эту команду следует ставить в конце тела цикла, метку M — в первой команде тела цикла, а в регистр R помещать число повторений цикла. 9.4.1. Пример 4 Даны три массива чисел. Требуется вычислить среднее арифметическое * максимальных элементов. Каждый массив задается двумя параметрами: адресом первого элемента и длиной. Очевидно, в программе трижды необходимо выполнить поиск максимального элемента массива, поэтому следует написать соответствующую подпрограмму. Параметры в подпрограмму будем передавать через регистры: R1 — начальный адрес массива, R2 — длина массива. рассмотрим конкретную реализацию этой задачи. Пусть первый массив начинается с адреса 085 и имеет длину 14 элементов, второй— 100 и 4, третий— 110 и 9. Программа будет состоять из основной части и подпрограммы. Основная программа задает параметры подпрограмме, вызывает ее и сохраняет результаты работы подпрограммы в рабочих ячейках. Затем I осуществляет вычисление среднего арифметического и выводит результат на устройство вывода. В качестве рабочих ячеек используются регистры общего назначения R6 и R7 — для хранения максимальных элементов массивов. Подпрограмма получает параметры через регистры R1 (начальный адрес массива) и R2 (длина массива). Эти регистры используются подпрограммой в качестве регистра текущего адреса и счетчика цикла соответственно. Кроме того, R3 используется для хранения текущего максимума, a R4 — для временного хранения текущего элемента. Подпрограмма возвращает результат через аккумулятор. В табл. 9.9 приведен текст основной программы и подпрограммы. Обратите внимание, цикл в подпрограмме организован с помощью команды JRNZ, а модификация текущего адреса — средствами постинкрементной адресации. Таблица 9.9. Программа примера 4
9.4.2. Задание 4 Составить и отладить программу учебной ЭВМ для решения следующей задачи. Три массива в памяти заданы начальными адресами и длинами. Вычислить и вывести на устройство вывода среднее арифметическое параметр этих массивов. Параметры определяются заданием к предыдущей лабораторной работе (см. табл. 9.8), причем соответствие между номерами вариант заданий 3 и 4 устанавливается по табл. 9.10. Таблица 9.10. Соответствие между номерами заданий
|