Методические указания для практических занятий по дисциплине мдк. 02. 01
Скачать 7.37 Mb.
|
Подпрограмма и стек Использование стековой памяти оказалось весьма эффективным при построении компилирующих и интерпретирующих программ: программ, использующих многократные вычисления алгебраических функций и нестандартные арифметические операции; программ с обработкой операндов с последовательным размещением. Принцип работы стековой памяти поясняется рисунком 7. Рисунок 7 Работа стековой памяти осуществляется по правилу: "последним записан - первым считан". Так, вначале записывается в стек (рисунок 7а) число Х1. Затем число Х1 сдвигается вверх при записи числа Х2 в стек. Тем самым любое записываемое число Хi сдвигает массив "вверх" и размещается в нижней ячейке. При чтении считывается содержимое самой "нижней "ячейки, а весь оставшийся массив чисел сдвигается "вниз". Размещая и считывая двоичные коды в указанном порядке, легко организовать поиск последнего записанного кода или организовать последовательную обработку кодов Хn,. . .,Х1. Однако микрооперация сдвига массива требует значительных аппаратных затрат. С целью упрощения стековой памяти используют специальный реверсивный счетчик-указатель стека SP. При использовании SP не требуется микрооперация сдвига массива, достаточно перемещения возбуждения "вверх" или "вниз" выходных шин с дешифратора адреса. Так, при записи счетчик декрементируется SP-1 и число через шину данных записывается "вверх"(в сторону младших номеров шин DC), при чтении число сначала считывается, затем устанавливается адрес следующего операнда (SP 1) для возможного считывания. При записи (считывании) двухбайтных операндов в восьмиразрядную память последовательно инкрементируется (декрементируется) дважды SP 2. При этом запись (считывание) осуществляется побайтно в две соседние ячейки : в М(SP),М(SP 1) - при считывании, в М(SP-1), М(SP-2) - при записи . Содержимое ячеек М(SP) и М(SP 1) определяет информацию в вершине стека (SГ), которая загружается в РОН при чтении стековой памяти. Использование стековой памяти. Часто в основной программе одни и те же операции (умножение, деление, сортировка массива и др.) выполняются многократно с различными данными. Целесообразно также нестандартные операции оформлять в виде программ, которые в основной программе использовать в виде подпрограмм, в свою очередь , подпрограмма так же может использовать при работе другие программы выполнения некоторых операций и т.д. В результате закон (порядок) работы ЭВМ может включать несколько вложенных друг в друга программ. 116 Для организации вычислительного процесса с применением подпрограмм используется стековая область ОЗУ. Эта область резервируется программистом для осуществления прерываний при вызове подпрограмм. При этом "низ" стека фиксируется установкой его адреса в SP командой SPHL (в УОУ монитор устанавливает автоматически SP=83Е0) и, начиная с этого адреса, "вверх" (SP-1) размещаются промежуточные данные и коды адресов команд основных программ, которые должны выполняться вслед за выполнением подпрограмм. Для обращения к подпрограмме используется команда CALL аа и её модификации. Эти команды загружают в РС адрес аа начальной команды подпрограммы, а текущий адрес команды основной программы запоминается стековой памятью. Для возвращения вычислений из подпрограммы к следующей за CALL команде в подпрограмме используется команда RET и её модификации. Эта команда возвращает из стековой памяти в РС код адреса этой команды . Рисунок 8. Подпрограмма перевода числа в аккумуляторе в дополнительный код Следует отметить, что подпрограмма выполняет вычисления в процессоре с использованием набора тех же РОН, что и программа, поэтому, если данные основной программы, полученные в РОН перед выполнением подпрограммы, необходимы для вычислений после выполнения подпрограммы, их следует запомнить и восстановить, для чего перед обращением к подпрограмме данные заносятся в стековую память командами PUSH RP, а после её выполнения восстанавливаются командами POP RP. Практическая работа №21. Ознакомление с учебной микро-ЭВМ «Электроника-580» (проектироваочные программы) Цель работы: изучить правила составления и записи программ на микро-ЭВМ «Электроника-580». 117 Теоретическая часть. При написании программ для УОУ «Электроника-580» нужно вручную переводить язык Ассемблер на машинный язык. Затем машинный код с клавиатуры вводится в заданную область памяти УОУ и производится отладка программы. Для перевода программы, записанной с использованием мнемоники языка Ассемблер, на машинный язык следует использовать таблицу 2. Эта таблица, составленная в матричном виде, содержит в качестве элементов матрицы мнемонические обозначения команд УОУ. При использовании таблицы для определения кода команды необходимо найти в нем мнемоническое изображение команды УОУ. Это изображение находится на пересечении столбца и строки, которые определяют соответственно старший и младший разряды машинного кода. Например, изображение команды LDA находится на пересечении столбца 3 и строки А; следовательно, машинный код команды LDA имеет вид 3А, а для команды загрузки аккумулятора MVI машинный код равен 3Е. Пример 1. Программа загрузки и инвертирования содержимого аккумулятора. Допустим, необходимо загрузить аккумулятор числом В4 в Н-коде, затем инвертировать это число и разместить результат в ячейку памяти с адресом 8200. Программа СМА1 на языке Ассемблер приведена в табл. 1. Последняя в программе команда HLT предназначена для останова при работе в пошаговом режиме. Для работы в непрерывном режиме эта команда должна быть заменена на команду RST4. Программа СМА1 в машинных кодах и на языке Ассемблер приведена в табл.2. Из неё видно, что двухбайтовая команда загрузки аккумулятора MVI В4 размещается в ячейках памяти 8201 и 8202. Трёхбайтовая команда пересылки СТА размещена в трёх ячейках 8204, 8205 и 8206, причём в двух последних ячейках записывается адрес ячейки 8200, в которую отсылается результат выполнения операции инвертирования. Заметим, что запись этого адреса в последовательно расположенные ячейки 8205 и 8206 производится начиная с младшего байта, т.е. в ячейку 8205 записывается байт 00, а затем в ячейку 8206 – байт 82. Таблица 1 Программа СМА1 загрузки и инвертирования содержимого аккумулятора на языке ассемблер (вариант 1) М-код Операци я Комментарий MVI A, B4 Загрузить в аккумулятор число В4 в Н-коде CMA Инвертировать содержимое аккумулятора STA 8200 Поместить содержимое аккумулятора в ячейку памяти с адресом 8200 HLT Остановить Таблица 2 Адрес Н- код М-код Операн д Комментарий 8200 Ячейка памяти для приёма результата 8201 3E MVI А,В4 Загрузить в аккумулятор число В4 из второго байта команды 8202 B4 8203 2F CMA Инвертировать содержимое аккумулятора 8204 32 STA 8200 Поместить содержимое 118 аккумулятора в ячейку памяти 8200 8205 00 8206 82 8207 76 HLT Остановить МП В рассмотренной выше программе при записи в аккумулятор (команда MVI) и память (команда STA) используется прямой способ адресации, когда адрес данных, участвующих в операции, следует в команде за кодом операции. В целях освоения способов косвенной адресации полезно рассмотреть другой вариант программы решения этой же задачи, приведенный в табл.3. Второй вариант содержит большее число команд и, кроме того, он требует предварительной записи исходных данных в выделенную для этого ячейку памяти 8208. Команда LXI H? 8208 в программе СМА2 использует фактически два адреса. Первый адрес (символ Н) включён непосредственно в команду и определяет регистровую пару HL. Однако в этой регистровой паре нет операнда, как при прямой адресации, а содержится адрес ячейки памяти, в которой находится операнд (в данном случает В4). Аналогичный способ адресации применен в командах MOV A, M и MOV M,A. Таблица 3 Программа СМА2 загрузки и инвертирования содержимого аккумулятора (вариант 2) М-код Операн д Комментарий LXI Н, 8208 Записать в регистровую пару HL число 8208 (адрес данных В4) MOV А,М Загрузить в аккумулятор число из ячейки памяти с адресом, указанным в HL CMA Инвертировать содержимое аккумулятора INX Н Увеличить на 1 адрес в HL MOV М,А Переслать число из аккумулятора по адресу, указанному в HL HLT остановить МП Таблица 4 Программа СМА2 в машинных кодах и на языке Ассемблер Адрес Н- код М-код Операнд Комментарий 8208 Ячейка памяти для предварительной записи числа В4 8209 Ячейка памяти для приёма результата 820А 21 LXI H, 8208 Загрузить в регистровую пару HL число 8208 820В 08 820С 82 820D 7E MOV А,М Загрузить в аккумулятор число из ячейки памяти с адресом 8208 820E 2F CMA Инвертировать содержимое А 820F 23 INX Н Инкремент адреса в HL 8210 77 MOV М,А Переслать число из А в память по адресу 8209 8211 76 HLT Остановить МП 119 Таблица 5 Программа СЛАМ сложения трёх чисел на Ассемблере М-код Операнд Комментарий LXI H, 8212 Загрузить 8212 (адрес первого слагаемого) в HL MOV А,М Поместить первое слагаемое из ячейки памяти в аккумулятор INX Н Инкрементировать содержимое пары HL ADD М Сложить число из ячейки памяти, адрес которой указан в HL, с содержимым аккумулятора INX Н Инкрементировать содержимое пары HL ADD М Сложить число из ячейки памяти, адрес которой указан в HL, с содержимым аккумулятора INX Н Инкрементировать содержимое пары HL MOV М,А Поместить сумму, содержащуюся в аккумуляторе, в ячейку памяти, адрес которой указан в паре HL HLT Остановить МП Таблица 6 Программа СЛАМ в машинном коде и на Ассемблере Адрес Н- код М-код Операн д Комментарий 8212 Адреса ячеек памяти для предварительной записи слагаемых ОF, 09 и 06 8213 8214 8215 Ячейка памяти для приёма суммы 8216 21 12 82 LXT Н, 8212 Загрузить адрес слагаемого OF, равный 8212, в пару HL 8217 7Е MOV А,М Поместить первое слагаемое OF в А 8218 23 INX Н Инкрементировать пару HL до 8213 8219 86 ADD М Сложить число 09 из ячейки 8213 с содержимым А, равным OF 8220 23 INX Н Инкрементировать пару HL до 8214 8221 86 ADD Н Сложить число 06 из ячейки 8214 с содержимым А, равным сумме OF+09 8222 23 INX Н Инкрементировать пару HL до 8215 8223 77 MOV М,А Поместить сумму OF+09+06 из А в ячейку памяти с адресом 8215 8224 76 HLT Остановить МП Таблица 7 Варианты заданий для составления программ СМА1, СМА2 и СЛАМ № Начальный адрес программы Данные для СМА1,2 Слагаемые для СЛАМ СМА1 СМА2 СЛАМ 1 2 3 1 1 2 3 8400 8428 8450 8478 8408 8430 8458 8480 8412 843A 8462 848A 6A 5 4E 59 07 44 B6 CE 1В АО 05 6С С2 09 61 43 120 84AO 84C8 8500 8528 8550 8578 85AO 85C8 8600 8628 8650 8678 86AO 86C8 8700 8728 8750 8778 87AO 87C8 84A8 84DO 8508 8530 8558 8580 85F8 85DO 8608 8630 8658 8680 85A8 86DO 8708 8730 8758 8780 87A8 87DO 84B3 84DA 8512 853A 8562 858A 85B3 85DA 8612 863A 8662 868A 86B3 86DA 8712 873A 8762 878A 87B3 87DA A4 E8 4A B7 CB 76 9A C7 A6 E9 3B 87 C9 B4 49 E5 OC 95 C6 B9 3B A4 O8 1C 2A 4B 07 3A 08 6C 2E 17 3A 07 5B 05 1E 4C 07 15 29 05 С1 ОА 4В 01 В5 1В 7В СВ 1А 09 45 6В 06 А6 06 2Е В5 АО ОС 27 14 54 ОЕ В2 1С 09 24 3А С3 У4 С4 15 А2 22 5А 09 16 3Е Примечание: адреса и исходные данные для программ представлены в шестнадцатиричном коде; при составлении программ исходные данные и результаты следует размещать в начале выделенного для данной программы части адресного поля. П Р И М Е Р 2. Программа сложения трёх чисел. Рассмотрим пример сложения содержимых трёх последовательных ячеек памяти и размещения их суммы в четвёртой. Версия на Ассемблере представлена в табл.5, а запись программы в машинных кодах – в табл.6. Исходные данные для этой программы предварительно заносятся в ячейки памяти с адресами 8212,8213,8214 (числа OF, 09 и 06 соответственно), а для результата резервируется ячейка с адресом 8215. Для приведенных трёх чисел сумма в Н-коде равна EI. Порядок выполнения работы В процессе домашней подготовки. 1.Выбрать из табл. 7 исходные данные для составления программы СМА1, СМА2 и СЛАМ. 2.Составить программы СМА1, СМА2 и СЛАМ на Ассемблере и в машинном коде, используя для кодирования команд табл.2 В учебной лаборатории. 1.Подготовить УОУ «Электроника-580 к работе, соблюдая следующие правила: -запрещается работать с УОУ при снятом кожухе и задней панели; -запрещается включать УОУ в сеть, не подключив заземления к клеммам 2 земля»; -нажимать на клавиши следует без чрезмерных усилий, чётко фиксируя фазы нажатия и отпускания клавиши. 2.Произвести загрузку программы СМА1 по табл.4 из примера 1 в режиме ОТЛАДКА. Для записи первой команды МVI А, В4 в ячейки 8201 и 8202 требуется нажать клавиши ADDR 8201 MEM ЗЕ NEXT В4 В указанной последовательности нажатие клавиши NEXT приводит к переходу от адреса 8202 к адресу 8203. Дальнейший ввод данных согласно последовательности NEXT 2F NEXT 32 NEXT 00 82 NEXT 76 завершает загрузку программы. 3.Выполнить программу СМА1 в пошаговом режиме, для чего 3.1.Установить начальный адрес программы 8201 последовательным нажатием клавиш ADDR 8201, контролируя запись по индикаторам АДРЕС и ДАННЫЕ; 121 3.2.Нажатием клавиши STEP выполнить первую команду программы; после этого на индикаторах АДРЕС байта следующей команды СМА (т.е. 8203), а на индикаторах ДАННЫЕ отобразится Н-код этой команды; 3.3.Повторить п.3.2 для выполнения остальных команд программы, наблюдая за показаниями индикаторов; 3.4.Проверить результат выполнения операции инвертирования величины В4, для чего произвести чтение информации в ячейке памяти 8200 нажатием клавиш ADDR 8200. 4.Загрузить и выполнить собственную программу CMAI. 5.Произвести загрузку и выполнить программу СМА2 по табл.6 из примера 1. 6.Загрузить и выполнить собственную программу СМА2 7.Произвести загрузку и выполнить программу СЛАМ из примера 2. 8.Загрузить и выполнить собственную программу СЛАМ. Предварительно необходимо в первые три ячейки выделенного для этой программы адресного поля записать значения слагаемых из табл.7. Содержание отчёта 1.Исходные данные и программы СМА1, СМА2 и СЛАМ на Ассемблере и машинном языке. 2.Тест-программа проверки функционирования ОЗУ на Ассемблере. Контрольные вопросы 1.С какой целью осуществляется мультиплексирование ЩД? 2.Перечислите все программно-недоступные регистры МП с указанием их назначения. 3.Составьте программу загрузки регистра В константой 5А с последующим сложением с содержимым 9Е аккумулятора. 4.Какую информацию содержит первый байт команды? Второй? Третий? 5.Объясните работу стека в МП-системе. 6.Какую функцию выполняет схема десятичной коррекции в АЛУ? 7.Объясните назначение всех управляющих выводов в МП. 8.С какой целью используется ПДП? 9.Каким образом осуществляется адресация РОН? 10.Составьте программу логического сложения чисел В9 и 4Е. 11.Объясните работу всех командных клавиш УОУ. 12.Какую информацию и с какой целью фиксирует регистр признаков АЛУ? 13.Объясните характер выполнения всех возможных операций в АЛУ. 14.В каком случае изменяется содержимое программного счётчика. 15.Почему передача управляющих сигналов в МП-системе осуществляется с квитированием? 16.Составьте программу вычисления (в пошаговом режиме) арифметической прогрессии, если разность прогрессии равна 2А, а первый член ряда – 8000 в Н-коде. 17.Какая наибольшая ёмкость памяти может быть адресована 16 адресными линиями? 18.Как изменится содержимое FF регистровой пары HL после инкрементирования? 19.Определите слово состояния программы и слово состояния процессора. 20.В чём отличие косвенной адресации от прямой? 21.Составьте программу приёма в МП константы 6А из порта 04 и выдачи в порт В5 утроенного значения этой константы. Практическая работа №22. Работа на учебной микро-ЭВМ (разработка архитектуры МП). Цель работы: н аписать на языке ассемблера микропроцессора КР580ВМ80А программу, реализующую вычисления по заданному арифметическому выражению. Оттранслировать программу в машинные коды и выполнить ее отладку на УОУ "Электроника-580". 122 Практическая часть. Пример программы к практической работе. Пусть необходимо составить программу, реализующую следующую функцию: Так как ассемблер является языком низкого уровня, т.е. его команды оперируют непосредственно со структурными элементами микропроцессорной системы, программист перед началом составления программы вычислений должен знать, в какой форме будут представлены входные и выходные переменные, по каким адресам ОЗУ они будут размещены. Из задания к лабораторной работе видно, что исходные переменные X, Y и результат вычислений Z являются числами со знаком, поэтому они представляются в дополнительном коде. Длина их не превышает одного байта. Расположим переменные Х и Y в ОЗУ по адресам 8300Н и 8301Н соответственно. Результат Z после окончания вычислений разместим в ОЗУ по адресу 8300Н, т.е. на месте исходной переменной X. Создание программы начнем с составления алгоритма, соответствующего порядку вычислений при нахождении значения заданной функции. В общем случае алгоритмы решения задач на компьютере могут составляться в несколько этапов – со все более подробной их детализацией. На заключительном этапе алгоритм составляется с учетом особенностей его конкретной реализации на той или иной микро-ЭВМ, с учетом особенностей системы команд микропроцессора. В нашем случае задача очень простая и сразу же может быть разработан максимально подробный алгоритм, ориентированный на систему команд микропроцессора КР580ВМ80А. Адрес 8300Н используется в ходе выполнения программы несколько раз, сначала – для считывания переменной Х, а после окончания вычислений – для занесения значения Z. Поэтому для упрощения обращения к ячейке памяти с этим адресом занесем его в регистровую пару HL, наиболее удобную для организации косвенной регистровой адресации. Умножение на целое число в функции реализуется путем многократного сложения. Так как данные представляются в дополнительном коде, то для получения абсолютной величины значения Y-25, в случае, если оно отрицательно, используются операции инверсии и добавления единицы. После составления алгоритма записывается соответствующая программа на языке ассемблера. Полученные алгоритм решения задачи и текст программы с необходимыми комментариями приведены ниже. Команды, на которые в программе есть переходы, помечены метками ADR1, ADR2 и FIN. При отладке программы на УОУ “Электроника-580” завершающей программу командой является RST 4, которая выполняет функцию “возврат к монитору”. Получение машинных кодов команд программы при работе на УОУ “Электроника-580” осуществляют вручную с помощью таблицы команд. Альтернативный вариант трансляции – использование программы кросс-ассемблера AVMAC85. Листинг трансляции рассматриваемой программы также приведен ниже. В нем показан пример введения и использования символьной константы CH1, которой присваивается с помощью команды транслятора EQU значение 17. Начальный адрес размещения рассматриваемой программы в памяти программ отладочного устройства определяется равным 8200H с помощью команды транслятора ORG. Длина полученного кода программы составляет 28 байт. Первая команда LXI H, 8300H трехбайтная и занимает три ячейки памяти, причем во второй ячейке размещается младший байт, а в третьей – старший байт числа 8300H. Далее следуют две однобайтные команды, потом – двухбайтная команда ADI CH1, занимающая ячейки 8205H и 8206H, причем во второй ячейке размещается константа CH1=17=11H. Далее опять следует однобайтная команда и т.д. В командах переходов при трансляции вместо символических адресов –меток подставляются соответствующие им конкретные физические адреса памяти – 8212H, 821AH и 821BH. Так как переходы в примере выполняются вперед по программе, то при ручной трансляции этих команд физические адреса переходов еще неизвестны, и необходимо 123 зарезервировать две ячейки памяти под второй и третий байты команды перехода. Затем, когда процесс трансляции дойдет до команды, на которую выполняется переход, и становится известным физический адрес ее размещения в памяти, зарезервированные под этот адрес байты могут быть заполнены. После ввода в память УОУ программы в машинных кодах необходимо подготовить и ввести в соответствующие ячейки памяти исходные переменные примера. Далее проводится отладка программы – проверка правильности ее функционирования. Отладка программы может быть также выполнена с помощью отладчика-симулятора AVSIM85. Для рассмотренной программы были получены следующие результаты контрольного примера: При X1=-4=FCH, Y1=-8=F8H - Z=21H=33; При X2=21=15H, Y2=-8=F8H - Z=3BH=59. |