Лабораторная работа. Лапик Наталья Владиславовна Старший преподаватель Тюмень Тюмгнгу 2016 Попова Н. В., Лапик Н. В. Изучение лабораторного микропроцессорного комплекта и решения простейших задач методические указания
![]()
|
формату(Рисунок 9), что возможно при выделении определенного стандартного места для хранения первого операнда и результата. Обычно для этой цели используется специальный регистр центрального процессора (ЦП), известный под названием аккумулятора, поскольку здесь аккумулируется результат. 13 Операция Адрес Код операции й или й операнд Рисунок 9 - Одноадресный формат команды Применение единственного регистра для хранения одного из операндов и результата является ограничивающим фактором, поэтому помимо аккумулятора часто используют и другие регистры ЦП. Так как число регистров в ЦП невелико, для указания одного из них в команде достаточно иметь сравнительно короткое адресное поле. Соответствующий формат носит название полутораадресного или регистрового формата(Рисунок 10). Операция Адреса Код операции Регистр й операнд Рисунок 10- Полутораадресный формат команды Наконец, если для обоих операндов указать четко заданное местоположение, а также в случае команд, не требующих операнда, можно получить нулъадресный формат команды(Рисунок 11). Операция Код операции Рисунок 11 - Нульадресный формат команды В таком варианте адресная часть команды вообще отсутствует или не задействуется. Выбор адресности команд. При выборе количества адресов в адресной части команды обычно руководствуются следующими критериями емкостью запоминающего устройства, требуемой для хранения программы временем выполнения программы эффективностью использования ячеек памяти при хранении программы. Адресность и емкость запоминающего устройства Емкость запоминающего устройства для хранения программы Е А можно оценить из соотношения K A A R N E , (1.1) 14 где N A - количество программ в программе R K - разрядность команды, А - индекс, указывающий адресность команд программы. При выборе количества адресов по критерию емкость ЗУ» предпочтение следует отдавать одноадресным командам. Адресность и время выполнения программы. Время выполнения одной команды складывается из времени выполнения операции и времени обращения к памяти. Для трехадресной команды последнее суммируется из четырех составляющих времени выборки команды выборки первого операнда выборки второго операнда записи в память результата. Одноадресная команда требует двух обращений к памяти выборки команды выборки операнда. Как видно, на выполнение одноадресной команды затрачивается меньше времени, чем на обработку трехадресной команды, однако для реализации одной трехадресной команды, как правило, нужно три одноадресных. Хотя этого недостаточно, чтобы однозначно отдать предпочтение тому или иному варианту адресности. Определяющим при выборе является тип алгоритмов, на преимущественную реализацию которых ориентирована конкретная ЭВМ. Возможные типы алгоритмов условно разделим натри группы последовательные параллельные комбинированные. Двухадресные команды в плане времени реализации алгоритмов занимают промежуточное положение между одноадресными и трехадресными. Несколько лучшие показатели дают полуторадресные команды, в которых, с одной стороны, сохраняются преимущества одноадресных команд для последовательных алгоритмов, ас другой - повышается эффективность реализации параллельных и комбинированных алгоритмов. Любая микроЭВМ может делать только то, что ей предписывает человек. Программа для микроЭВМ - это последовательность команд, которые микроЭВМ распознает ив соответствии с этим выполняет определенные действия. Каждая команда инициирует выполнение определенного действия. 15 Каждая микроЭВМ способна воспринимать и выполнять точно определенный для нее набор команд. Количество и тип команд изменяются в зависимости от возможностей и назначения микроЭВМ. Различают три основных уровня программирования 1) программирование в машинных кодах 2) программирование в кодах языка Ассемблера 3) программирование на языках высокого уровня. Программирование в машинных (двоичных) кодах - трудоемкая и сложная для человека задача. Будучи языком цифр, он неудобен для описания вычислительных процессов, требует от программиста больших усилий при написании и отладке программ. К достоинствам данного вида программирования можно отнести следующее для написания программ требуется лишь знания системы команд конкретной микроЭВМ, а для выполнения написанных таким образом программ микроЭВМ не нуждается нив каком дополнительном программном обеспечении. Кроме того, при использовании машинного языка можно достигнуть максимальной гибкости в реализации технических возможностей микроЭВМ. Для упрощения процесса написания, отладки и чтения программы используют мнемонический (символический) код. Каждую машинную команду представляют простым трех- или четырехбуквенным мнемоническим символом. Мнемонические символы значительно легче связать с машинными операциями, потому что их можно выбрать таким образом, чтобы они напоминали названия команд. Программу, написанную в мнемонических кодах, необходимо транслировать в машинные коды. Сделать это можно двумя способами вручную с помощью таблицы соответствия системы команд для конкретной микроЭВМ (приложение 3) или специальной программой, называемой Ассемблером. Ассемблер сравнивает каждую мнемоническую команду со списком команд и заменяет ее двоичным эквивалентом. Такой процесс получил название программной трансляции. Язык Ассемблера, получивший свое название от имени программы, преобразующей программу на таком языке, в машинные коды, имеет ряд преимуществ. Он позволяет, наряду с программированием в машинных кодах, гибко и полно реализовать технические возможности микроЭВМ. В тоже время, использование языка Ассемблера избавляет программиста от трудоемкой работы с машинными двоичными кодами. Язык Ассемблера является машинно-зависимым (машинно- ориентированными, следовательно, отражает аппаратурные особенности той микроЭВМ, для которой создан. Поэтому программы, составленные с использованием языка Ассемблера (или машинного языка, обладают наименьшей мобильностью по отношению к различным микроЭВМ. 16 Большей мобильностью обладают программы, составленные на алгоритмических языках высокого уровня (например Фортран, Бейсик, ПЛМ, Паскаль, Ада, СИ и др, занимающих верхнее положение в иерархии языков программирования. Будучи приближенными к привычной математической нотации ив ряде случаев обеспечивая естественную форму описания вычислительных процессов, они достаточно просты и удобны в программировании, ноне всегда позволяют в полной мере реализовать технические возможности ЭВМ. Кроме того, результирующие машинные программы, получаемые после трансляции программ с алгоритмических языков, обычно менее эффективны сточки зрения объема и быстродействия, по сравнению с программами, написанными в кодах языка Ассемблера ив машинных кодах. Применение языков высокого уровня предполагает обязательное наличие транслятора, представляющего собой сложный программный комплекс. Выполнение команд микропроцессором Микропроцессор КРИКА имеет фиксированный набор команд. Работа микропроцессора по реализации каждой команды программы основана на принципе микропрограммного управления. То есть, каждая команда реализуется как некоторая последовательность микрокоманд (или микроопераций), приводящая к требуемому результату. Считываемая из памяти микропроцессором команда, точнее ее восьмиразрядный двоичный код (код операции, поступает в регистр команд, где и хранится в течение времени ее выполнения. По результату дешифрирования кода операции происходит формирование последовательности микроопераций, процесс выполнения которой и определяет все последующие операции по выполнению считанной команды. При этом выполнение отдельных микроопераций синхронизируется сигналами тактового генератора. В микропроцессоре выполнение каждой команды можно разбить наряд основных операций. Время, отведенное на выполнение операции обращения к памяти или устройству ввода-вывода, составляет машинный цикл. Следовательно, процесс выполнения команды состоит из стольких машинных циклов, сколько обращений к памяти или к устройствам ввода- вывода требуется для ее выполнения. Каждая команда в зависимости от ее вида может занимать от одного до пяти машинных циклов. В свою очередь, каждый машинный цикл может состоять из 3 - 5 машинных тактов. Под машинным тактом подразумевается интервал времени, соответствующий одному периоду тактовых импульсов. 17 На рисунке 12 приведена временная диаграмма команды LDA (Загрузить данные в аккумулятор из ячейки памяти, адрес которой находится во втором и третьем байте команды. Данная команда состоит из четырех машинных циклов С - выборка команды (код команды помещается в регистр команд С - обращение к памяти (восемь младших разрядов адреса выбираются из памяти и помещаются в регистр Z); С - обращение к памяти (восемь старших разрядов адреса выбираются из памяти и помещаются в регистр W); С - аккумулятор загружается данными из памяти по адресу, содержащемуся в регистровой паре WZ. В свою очередь первый машинный цикл С команды LDA состоит из четырех машинных тактов Т , Та машинные циклы С , Сиз трех. Рисунок 12 - Временная диаграмма команды LDA Система команд микропроцессора КР580ВМ80А представлена 244 кодами операций. Все команды можно классифицировать потрем основным признакам по длине команды по виду адресации к данным по функциональному признаку. По длине команды делятся на однобайтовые, двухбайтовые и трехбайтовые. Двухбайтовые и трехбайтовые команды в памяти занимают соответственно две или три последовательно расположенные ячейки. При этом первый байт всегда отводится под код операции, а второй или второй и третий байты содержат либо данные, либо адрес, по которому они находятся в памяти. По функциональному признаку все команды могут быть разделены на пять групп команды пересылки данных арифметические команды логические команды команды переходов команды управления и работы со стеком. 18 К группе команд пересылки данных относятся команды, пересылающие содержащиеся в них данные в регистры или в память, команды пересылки данных между регистрами микропроцессора и между регистрами и памятью. В мнемонике команд регистр-приемник указывается вслед за символическим кодом команды, а через запятую - регистр-источник (прил. 2). Например команда MOV M, A - пересылает данные из регистра А аккумулятора) в ячейку памяти по адресу указанному в регистровой паре HL. Арифметические команды предназначены для выполнения арифметических операций над данными, хранящимися в регистрах и ячейках памяти. Все команды этой группы оказывают влияние назначения разрядов флагового регистра, так как при их выполнении меняются знаки используемых чисел, возникают сигналы переноса, появляются нулевые результаты и т.п. Логические команды служат для выполнения логических (или булевых) операций над данными, содержащимися в регистрах, ячейках памяти, атак же над флагами регистров. К ним относятся следующие операции инверсия (НЕ, логическое суммирование (ИЛИ, логическое умножение (И, суммирование по модулю 2, сравнение, сдвиг, дополнение дои до 2. Как и команды предыдущей группы, все логические команды оказывают влияние на флаги состояния. Система команд микропроцессора КР580ВМ80А позволяет использовать следующие виды адресации регистровая косвенная регистровая прямая непосредственная неявная. Регистровая адресация. В случае регистровой адресации операнд отыскивается во внутреннем регистре микропроцессора. Регистровые адресации всегда являются одно байтовыми, потому что они не требуют адресов и данных вне микропроцессора. Примером таких команд являются команды МОV A,D (переслать содержимое регистра D в регистр A); MOV H,L (переслать содержимое регистра L в регистр Н. Косвенная регистровая адресация. При этом способе адресации пара регистров HL указывает на адрес операнда в памяти. Примером являются такие команды, как MOV А,М (переслать 19 содержимое ячейки памяти, адрес которой находится в паре HL, в аккумулятор MOV M,D и т.п. При этом способе адресации могут также использоваться регистровые пары ВС и DE. B этом случае будут использоваться команды STAX YZ сохранение содержимого аккумулятора в памяти, адрес которой находится в паре YZ) и LDAX YZ (загрузка в аккумулятор содержимым ячейки памяти, адрес которой находится в паре YZ). Прямая адресация. В случае прямой адресации ой и 3-ий байт команды прямо указывает на адрес операнда в памяти (то. адрес данных следует за кодом операции. Этим адресом может быть адрес памяти (LDA 22FFH,STA 50DDH и т.п) а также номер порта ввода/вывода (IN E4H,OUT Непосредственная адресация. В случае непосредственных команд операнд следует сразу же за кодом операции. Примером являются MVI А,1ЗН; LXI H,80AAH; LXI D,7F00H и т.п. Неявная адресация. Этот метод используется, если ненужно искать данные или адреса в других регистрах микропроцессора, памяти или устройствах ввода/вывода. Все события происходят внутри микропроцессора. Примером являются СМА 2 ВЫПОЛНЕНИЕ ЛАБОРАТОРНОЙ РАБОТЫ №1 Этапы цикла выполнения программы включают в себя принцип цикличности. 1. Процессор выставляет число, хранящееся в регистре счетчика команд, на шину адреса и отдаёт памяти команду чтения. 2. Выставленное число является для памяти адресом. Память, получив адрес и команду чтения, выставляет содержимое, хранящееся поэтому адресу, на шину данных и сообщает о готовности. 3. Процессор получает число с шины данных, интерпретирует его как команду (машинную инструкцию) из своей системы команд и исполняете. Если последняя команда не является командой перехода, процессор увеличивает на единицу (в предположении, что длина каждой команды равна единице) число, хранящееся в счётчике команд в результате там образуется адрес следующей команды. Выполнение программы осуществляется на языке Assembler Assembler — язык программирования низкого уровня, 20 представляющий собой формат записи машинных команд, удобный для восприятия человеком. Команды языка ассемблера один в один соответствуют командам процессора и, фактически, представляют собой удобную символьную форму записи (мнемокод) команд и их аргументов. Также язык ассемблера обеспечивает базовые программные абстракции связывание частей программы и данных через метки с символьными именами и директивы. Язык программирования низкого уровня, представляющий собой формат записи машинных команд, удобный для восприятия человеком. Команды языка ассемблера один в один соответствуют командам процессора и, фактически, представляют собой удобную символьную форму записи (мнемокод) команд и их аргументов. Язык ассемблера обеспечивает базовые программные абстракции связывание частей программы и данных через метки с символьными именами и директивы. Директивы ассемблера позволяют включать в программу блоки данных (описанные явно или считанные из файла повторить определённый фрагмент указанное число раз компилировать фрагмент по условию задавать адрес исполнения фрагмента, менять значения меток в процессе компиляции использовать макроопределения с параметрами и др Задача № 1 Записать в регистр А однобайтовое число Ни проинвертировать его. Результат операции оставить в аккумуляторе На каждую задачу в 1 лабораторной работе составляется алгоритм. Пример алгоритма приведен на рисунке 13 . Рисунок 13- Алгоритм выполнения задачи 1 21 Программа оформляется в виде адреса код команды Примечание 0800 ЕМ Занесение байта данных в накопитель 0801 47 0802 2F СМА Инвертируем содержимое накопителя 0803 76 HLT Конец программы Перед вводом программы в память МП требуется перевести программу с языка ассемблер в машинные коды и назначить каждому коду, либо операнду (операндами называются данные используемые в командах программы) адрес ячейки памяти в ОЗУ МП-системы. Выбранные адреса должны соответствовать ОЗУ МП. В противном случае при загрузке программы в память МП можно потерять часть или все данные. Для перевода программы с языка ассемблер в машинные коды требуется выполнить следующие действия 1. для каждой команды, представленной в строке 3 таблицы 1, требуется подобрать машинный код, представляющий собой код операции , соответствующей выбранной команде (приложение 1); 2. определить операнды (данные, следующие за мнемокодом операции 3. определить соответствие последовательных адресов памяти для каждой команды и операнда. Каждая команда, используемая в МП КР, имеет определенный формат. В соответствии с этим операции делятся на однобайтные, двухбайтные и трехбайтные. Однобайтные операции не содержат дополнительных операндов. Двухбайтные содержат один байт операнд, трехбайтные имеют двухбайтные операнды. Эмулятор позволяет написание программ на языке ассемблер использовать системы команд МП КР580ВМ80А их отладку и выполнения в шаговом режиме Следует учесть, что при записи трехбайтной команды в ОЗУ МП- системы, сначала следует код, затем младший бай и только потом старший байт данных Для подготовки УМК к работе требуется выполнить следующие действия 1. На рабочем столе выбрать иконку и открыть е. 22 2. Выбираем установочную область памяти 3. Включаем компилятор Компилятор транслятор, который осуществляет перевод всей исходной программы в эквивалентную ей результирующую программу на языке машинных команд (микропроцессора или виртуальной машины. 4. Осуществляем набор команд в компиляторе всегда начинаем работу с org 0800, заканчиваем hlt ). После ввода программы нажимаем на иконку Compile, если все верно, то высвечивается иконка Compile Ok. 5. Осуществить Старт с заявленного адресате. начало программы. 6. Просмотр выполнения программы (Регистры, адрес. 23 2.1 Задания к 1 лабораторной работе Результат выполнения программ представить в виде таблице 2.1. Таблица 2.1 Результат выполнения программы Число по адресу Н Число по адресу 0901/902H Число по адресу Н Содержимое А Состояние битов регистра F S= Z= AC= P= С 1. Разработать программу которая вычитает однобайтовые числа, расположены в регистрах В и Н, результат помещает в регистр С. Числа заносятся программно. 24 2. Поменять содержимое регистровых пар Е и Н местами. Числа в регистры заносим программно. 3. Разработать программу которая записывает в регистр САН, в регистр В 16 Ни производит сложение, результат помещает в регистр В. 4. Сложить содержимое ячейки памяти, с адресом Ни содержимое ячейки памяти, с адресом Н. Результат поместить в регистр В. 5. Уменьшить содержимое регистровой пары Е на содержимое регистровой пары Н. Числа в регистровые пары заносим программно. результат поместить в регистровую пару Е. 6. Поменять регистровые пары Ни ВС местами. Числа в регистровые пары заносим программно. 7. Написать программу, увеличивающую содержимое ячейки памяти по адресу Н на Ни размещающую результат в ячейку памяти по адресу 0901. 8. Написать программу сложения двух двухбайтовых чисел, одно из которых расположено в памяти, начиная с адреса 0900Н,другое с адреса Н. Результат разместить в памяти с адреса Н. Перед выполнением программы записать по исходным адресам двухбайтовые числа, указанные преподавателем. 9. Заменить в прог.4. команду сложения содержимого аккумулятора с регистром В (ADD В) командой сравнения СМР В. Ввести программу в память УМК. Записать в ячейку памяти по адресу Н число большее, чем по адресу Н. Запустить программу на выполнение. После выполнения проанализировать результат выполнения . 10. Записать по адресу Н числом е н ь шее, чем по адресу Н. (п) 11. Записать по адресам Ни Н два одинаковые числа. Запустить программу на выполнение. Исследовать результат выполнения (п. 12. Заменить в программе 4 команду ADD В на команды INR A,DCR A, ADD A, ANA A, ORA A, XRA А. Исследовать результат выполнения, содержимое аккумулятора и флагового регистра F. Результат представить в виде таблицы 2.2. |