МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ «КРЫМСКИЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ имени В.И.ВЕРНАДСКОГО» ФИЗИКО-ТЕХНИЧЕСКИЙ ИНСТИТУТ Кафедра компьютерной инженерии и моделирования Дмитренко П.С. Лабораторный практикум по дисциплине «Системное программирование» для студентов 2 курса дневной формы обучения направления подготовки 09.03.01, 09.03.04 образовательно-квалификационного уровня «бакалавр» Симферополь, 2020 Рекомендовано к печати заседанием кафедры компьютерной инженерии и моделирования протокол № 5 от 15.01.2020 Рекомендовано к печати: Учебно-методическим советом Физико-технического института (структурное подразделение) ФГАОУ ВО «КФУ им. В.И.Вернадского» протокол № 6 от 28.02.2020 Составитель: Дмитренко П.С. ассистент кафедры компьютерной инженерии и моделирования. ВВЕДЕНИЕ Настоящие указания учебно – методического пособия включают в себя описания лабораторных работ по дисциплине «Системное программирование» студентов направления подготовки 09.03.01 «Информатика и вычислительная техника» и 09.03.04 «Программная инженерия». В практикум включены работы, в которых рассматриваются базовые понятия программирования на язке Ассемблер и в мнемокодах на простейших архитектурах. 1. 2. 3. 4. Требования к студентам по подготовке, выполнению и отчету по лабораторным работам (практическим занятиям, семинарам и.т.д.) : Студент посещает лабораторное занятие ознакомившись с теоретическим материалом по данной теме, для выполнения лабораторных работ. В начале занятия преподаватель проверяет подготовку к лабораторной работе и оценивает ее. Студенты, не показавшие достаточных теоретических знаний к выполнению работы не допускаются. Содержание отчета к каждой лабораторной описано в соответствующем подпункте каждой работы. Порядок сдачи лабораторной работы: Студент предоставляет преподавателю отчет определенного образца, описывает ход работы и проделанные действия, отвечает на контрольные вопросы и вопросы по ходу выполнения работы или на вопросы, определяющие уровень теоретической подготовки. Для самоконтроля и подготовки студентов к практическим работам описание каждой из них содержит большое количество вопросов и задач. Некоторые вопросы требуют более глубокой проработки теоретического материала и умения применять его в нестандартных условиях. СОДЕРЖАНИЕ Лабораторная работа № 1 5 Лабораторная работа № 2 13 Лабораторная работа № 3 17 Лабораторная работа № 4 21 Лабораторная работа № 5 30 Приложение 1 39 Приложение 2 43 Приложение 3 45 Приложение 4 47 Лабораторная работа №1 на тему «Изучение и исследование микропроцессорного тренажера» Цель: 1. Практически закрепить знание теоретических сведений об архитектуре микропроцессоров серии КР580; 2. Изучить команды загрузки регистров МП КР580ИК80А и пересылки данных между ними; 3. Привить практические навыки написания программ и программирования операции загрузки регистров микропроцессоров и пересылки данных между ними. 1. Краткие теоретические сведения Микропроцессор (МП)-устройство, выполняющее функции программной обработки информации, аналогичные функциям центрального процессора обычной ЭВМ, и реализованное в одной схеме большой степени интеграции (БИС-полупроводниковая микросхема, которая имеет 500 или больше элементов) или в виде модуля, содержащего несколько БИС. Микросхема КР580ИК80А представляет собой однокристальный восьмиразрядный микропроцессор с фиксированной системой команд, который предназначен для применения в устройствах обработки данных и схемах управления в качестве центрального процессорного элемента. Микропроцессор конструктивно помещен в пластиковый корпус с 40 выводами. Основными функциональными узлами микропроцессора являются: - АЛУ; - устройство управления и синхронизаци; - блок регистров общего назначения (РОН); - вспомогательные регистры; - регистр признаков условий (или регистр флажков); - исходные буфера данных и адрес. МП работает с восьмиразрядными словами данных (байтами), а для задания адреса памяти используется шестнадцать разрядов (два байта). Формат данных интерпретируется как: целое положительное число без знака в прямом коде в диапазоне от 0 до 255 (в десятичной системе исчисления); число со знаком в дополнительном коде. Диапазон изменения чисел от +127 до 128 в десятичной системе исчисления; двухразрядное двоично-десятичное число без знака в диапазоне от 0 до 99 в десятичной системе исчисления; логический байт данных; допускается представление чисел в двухбайтовом формате в прямом или дополнительном коде. Диапазон изменения чисел при этом от +32767 до -32786 в десятичной системе исчисления. Арифметические операции выполняются по правилам двоичной арифметики над числами в дополнительном коде. Арифметические операции над двоично-десятичными числами поддерживаются только одной командой – командой десятичной коррекции после сложения DAA. Необходимость коррекции обусловлена тем, что сложение двоично-десятичных чисел производится на двоичном сумматоре с использованием кода « с избытком 6». Для выполнения вычитания этих чисел необходимо сформировать дополнительный код, который образуется как ( 99 –вычитаемое +1), выполнить двоичное сложение, затем - команду DAA. Логические операции выполняются по правилам двоичной логики. Результат операции представляется числом в соответствующем формате и байтом признаков результата (флажков). S Z X A X P X C C Пять признаков (остальные три разряда фиксированы) устанавливаются в зависимости от результата выполнения операции: Бит знака S устанавливается в соответствии со старшим битом D7 результата. Бит нуля Z устанавливается в "I", если результат равен 0; в противном случае сбрасывается в "0". Бит четности Р устанавливается в "I", если число единиц в результате четно; в противном случае сбрасывается в "0". Бит переноса С устанавливается в "I", если в результате выполнения операции сложения возникает перенос из старшего разряда или при вычитании перенос не возникает (происходит заем); в противном случае обнуляется. Бит вспомогательного переноса АС устанавливается в "I" при появлении переноса из третьего в четвертый разряд результата при выполнении сложения и вычитания. Используются при обработке двоично-десятичных чисел. Форматы команд зависят от типа команд и способа адресации. Код операции представляется одним байтом. В случае прямой адресации к памяти используется адрес длиной 16 бит (т.е. максимальная емкость памяти 65536 байтов). Длина команды может быть 1, 2 или 3 байта. Многобайтные команды хранятся в соседних ячейках памяти и адресуются по первому байту, младший байт располагается по меньшему адресу. Формат команды определяется кодом операции. Адресация памяти в микропроцессоре КР580ИК80А задается в коде операции и использует следующие способы. Прямая: используется для адресации однобайтовых слов данных и двухбайтовых адресов, содержащихся в памяти или внешнем устройстве. Прямой адрес указывается во втором или во втором и третьем байтах команды. Прямая регистровая: используется для адресации одно- и двухбайтовых слов, содержащихся во внутренних регистрах процессора, и указывается в байте кода операции. Косвенная регистровая: используется для адресации байтов данных в памяти. Косвенный адрес содержится в паре регистров процессора (адресных указателях), указываемых в байте кода операции. Непосредственная: используется в двух- или трехбайтовым форматом команд. Байт2 (или байты 2 и 3) непосредственно содержат данные (операнд или адрес, заносимый в регистр). Cтековая: используется для косвенной адресации двухбайтовых слов данных или адресов, находящихся в области памяти, отведенный под стек. Адрес определяется по содержимому регистра указателя стека (SP). Сложности при программировании связаны также с ограниченным числом регистров и их малой разрядностью, что приводит к большому количеству операций пересылок. Эти недостатки приводят к увеличению объема памяти, необходимого для хранения программ, и времени их выполнения, так как приходится использовать подпрограммы, последовательно-параллельную обработку, большое количество пересылок. В микропроцессоре КР580ИК80А программнодоступными являются 8-битовые регистры A,B,C,D,E,H,L; 16-битовые - слово состояния PSW (регистры А и F), пары регистров B,D,H, обозначаемые по первому регистру пары BC,DE,HL соответственно, указатель стека SP и программный счетчик РС, а также отдельные признаки регистра F (см.рис.5). Система команд микропроцессора содержит 78 команд и может быть разбита на следующие группы: 1. группа команд пересылки, осуществляющих передачу информации между регистрами (11 команд); 2. группа арифметических команд (14 команд); 3. группа логических команд (15 команд); 4. группа команд передачи управления (29 команд); 5. группа команд работы со стеком, ввода-вывода и управления регистрами процессора (9 команд). Выделим наиболее общие закономерности их использования. 1. Арифметические и логические операции разрешены только между аккумулятором и байтом данных или между аккумулятором и любым регистром. 2. Аккумулятор и регистровая пара HL являются единственными регистрами, которые могут быть непосредственно загружены в память. 3. Аккумулятор является единственным регистром, который может быть инвертирован, сдвинут, косвенно загружен в память с использованием регистровых пар ВС и DE или использован в командах ввода/вывода (IN, OUT). 4. Регистровая пара HL является единственной, содержимое которой может быть передано в счетчик команд (команда PCHL) или указатель стека (команда SPHL). 5. Регистровая пара НL может использоваться как аккумулятор двойной длины при сложении 16разрядных чисел (команда DAD). 6. Содержимое регистровых пар HL и DE можно менять местами (команда HCHG). 7. Отдельные команды могут применяться для специальных функций. Команды XRA А или SUB А обнуляют аккумулятор. Команды ANA А или ORA А очищают флаг переноса, а команда ADD А выполняет логический сдвиг аккумулятора влево. 8. Команды увеличения (уменьшения) на 1 регистров INR (DCR) действуют на все флаги, за исключением флага переноса. Команды увеличения (уменьшения) на 1 регистровых пар INX (DCX) не оказывают влияния на флаги. 9. В стек или из стека могут быть переданы только регистровые пары. Одной из таких регистровых пар является слово состояния микропроцессора, которое содержит аккумулятор (старший байт) и флаги (младший байт). Команды CALL и RET передают адрес в стек и обратно. 10. При записи 16-разрядных адресов младший байт записывается первым. Недостатками системы команд являются: малая мощность команд. Отсутствуют команды умножения, деления двоичных и двоичнодесятичных чисел, арифметические и логические сдвиги, очистки регистров и так далее, асимметричность: определенные действия закреплены за фиксированными регистрами, различное воздействие однородных команд на флаги регистра признаков, поэтому необходимо контролировать формирование необходимых признаков по описанию команды ограниченное количество способов адресации. Отсутствие индексного, базового, относительного способов адресации существенно усложняет программирование, ориентация на обработку 8- и 16-разрядных данных. Команда загрузки регистров общего назначения Синтаксис команд загрузки регистров общего назначения (РОН) в общем виде представляется форматом MVI R, K где R-идентификатор регистров общего назначения A, B, C, D, E, H, L. K-операнд, т. е. число или константа; Эта команда двухбайтовая и в первом байте содержится код операции (КОП), а во втором байте- операнд. Она использует прямой регистровый и непосредственный методы адресации и выполняется за 2 машинных цикла, на которые растрачивается 7 тактов. Команда манипуляции 16-тиразрядными данными Синтаксис команд манипуляции 16-тиразрядными данными в общем виде предоставляется форматом LXI R,KHKL где R-идентификатор первого регистра (B, D или H) регистровых пар BC, DE, HL KH-старший, а KL-младший байт 16-тиразрядного операнда; Команда трехбайтовая, в первом байте- КОП, во втором- младшие, а в третьем- старшие 8 разрядов операнда. Она использует прямой регистровый и непосредственный методы адресации и выполняется за 3 машинных цикла, на которые растрачивается 10 тактов. В памяти всегда располагается сначала младший, а потом- старший байт операнда. Команда пересылки Синтаксис команды пересылки из одного регистра в другой в общем виде представляется форматом MOV R1,R2 где R1- идентификатор регистра- получателя, т. е. регистра, в который пересылается информация; R2- идентификатор регистра- источника информации, т. е. регистра, из которого информация берется для передачи. В качестве регистров R1 и R2 могут использоваться аккумулятор А и регистры общего назначения B, C, D, E, H и L. Команда MOV является однобайтовой и использует прямую регистровую адресацию. Она выполняется за 1 машинный цикл, составляющий 5 тактов. Команда загрузки регистра указателя стека Для записи информации в регистр указателя стека SP используют две команды: LXI SP,KHKL-непосредственной загрузки; SPHL-косвенной загрузки; SP- идентификатор регистра указателя стека; KH, KL- старший и, соответственно, младший байты операнда. Особенности команды LXI рассмотрены выше. Команда SPHL является однобайтовой и использует неявный метод адресации. Она выполняется за 1 машинный цикл, составляющий 5 тактов. По команде SPHL регистр указателя стека SP загружается содержимое регистровой пары H. Поэтому, чтобы в регистр указателя стека поместить операнд, его необходимо вначале расположить в регистровой паре H. Команда загрузки счетчика команд По команде загрузки счетчика команд, синтаксический формат которой имеет вид PCHL в счетчик команд PC записывается содержимое регистровой пары Н. Поэтому перед загрузкой счетчика необходимо предварительно в регистровую пару Н поместить требуемый адрес, и только затем можно выполнить команду PCHL. PCHL- команда безусловного перехода по адресу, хранимому в регистровой паре Н. Является однобайтной , использует неявный метод адресации и выполняется за 1 машинный цикл, составляющий 5 тактов. 2. Порядок выполнения лабораторной работы Для выполнения лабораторной работы необходимо выполнить следующие действия: 1. Запишите в память микропроцессора с начального адреса 800 последовательность команд (программу), представленную в таблице 2.1. Воспользуйтесь для этого командой просмотра и модификации содержимого ячеек памяти системной программы МОНИТОР. 2. Выполните последовательность команд (программу) посредством команды СТ800 80Е ВП выполнения программы пользователя. По окончании выполнения программы в адресной части дисплея должен отобразиться адрес останова 80Е 16, а в информационной- символ «-». Нажмите клавишу ЗП и переведите УМК в режим приема команд. 3. Просмотрите содержимое РОН, используя команду РГ просмотра и модификации содержимого регистров системной программы «МОНИТОР»(клавиша РГ)В регистрах должна содержаться следующая информация: А=0016, В=0116,C=0216, D=0316, E=0416, H=0516, L=0616 Таблица 1 Последовательность команд загрузки РОН операндом (константой, числом) 4. Адрес Команда Код команды Загружаемый операнд 800 MVI A,0 3E 00 00 802 MVI B,1 06 01 01 804 MVI C,2 0E 02 02 806 MVI D,3 16 03 03 808 MVI E,4 1E 04 04 80А MVI H,5 26 05 05 80С MVI L,6 2E 06 06 Для загрузки 16-тиразрядных данных выполните действия, представленные в таблице 2. Таблица 2 Программа манипуляции 16-тиразрядными данными Адрес Команда Код команды Загружаемый операнд 800 LXI B,3132 01 32 31 3132 803 LXI D,3334 11 34 33 3334 806 LXI H,3536 21 36 35 3536 После выполнения этой программы содержимое регистров должно выглядеть следующим образом: B=3116, C=3216, D=3316,E=3416, H=3516, L=3616. 5. Для пересылки данных из одного регистра в другой выполните программу, приведенную в таблице 3. Таблица 3 Программа пересылки данных Адрес Команда Код команды 800 MVI A,FF 3E FF 802 MOV B,A 47 803 MOV C,B 48 Загружаемый операнд Загрузка аккумулятора Пересылка содержимого аккумулятора в регистр В CB 804 MOV D,C 51 DC 805 MOV E,D 5A ED 806 MOV H,E 63 H E 807 MOV L,H 6С LH После выполнения этой программы в регистрах должно содержаться одно и то же число FF. 6. Для выполнения команд непосредственной и косвенной загрузки регистра указателя стека SP запишите в память с начального адреса 80016 код команды, приведенной в таблице 4 и выполните ее посредством команды СТ 800 803 ВП Таблица 4 Программа непосредственной загрузки регистра указателя стекаSP Адрес Команда 800 LXI SP,0810 Код команды Загружаемый операнд 31 10 03 0810 По окончании выполнения программы нажмите клавишу ВП и переведите УМК в режим приема команд. Проверьте содержимое регистра указателя стека. Содержимое старшего байта должно быть SH=0816, а младшего- SL=1016, а младшего SL=1016/ 7. Для косвенной загрузки регистра указателя стека выполните действия, предложенные в таблице 5. Таблица 5 Программа косвенной загрузки регистра указателя стекаSP Адрес Команда 800 LXI H,0830 803 SPHL Код команды 21 30 08 F9 3. Загружаемый операнд Предварительное размещение в регистровой паре Н числа 083016 Загрузка регистра указателя стека SP Задание на самостоятельную работу Задание 1: напишите в табличной форме и выполните программу загрузки РОН согласно индивидуальному заданию. По окончанию выполнения программы проверьте правильность полученных и результатов посредством команды РГ системной программы МОНИТОР. Результаты программирования и выполнения подготовленной последовательности команд оформите в виде, аналогичном таблице 1. Сделайте выводы по работе. Задание 2: напишите в табличной форме и выполните программу загрузки регистровых пар согласно индивидуальному заданию. По окончанию выполнения программы проверьте правильность полученных и результатов посредством команды РГ просмотра и модификации содержимого регистров системной программы МОНИТОР. Результаты программирования и выполнения подготовленной последовательности команд оформите в виде, аналогичном таблице 2. Сделайте выводы по работе. Задание 3: напишите в табличной форме и выполните программу пересылки информации из регистра в регистр, предусмотрев предварительную загрузку регистров- источников данными .согласно индивидуальному заданию. выводы по работе. Проверьте правильность выполнения программ. Сделайте Задание 4: напишите в табличной форме и выполните программу загрузки указателя стека (непосредственной и косвенной) согласно индивидуальному заданию. Задание 5: аналогично с предыдущими заданиями напишите и выполните программу безусловного перехода согласно индивидуальному заданию ( загрузка программного счетчика). 4. Содержание отчета 1. Краткое описание цели работы и результатов самостоятельной подготовки к лабораторному занятию. 2. Тексты программ выполнения лабораторной работы. 3. Протокол работы, отражающий последовательность действий на пульте отладочного устройства при выполнении программ. 5. Контрольные вопросы 1. Что такое микро-ЭВМ? 2. Что такое микропроцессор? Его существенные отличия от микро-ЭВМ 3. Какие основные типы операций он может выполнять? Соответственно, на какие основные группы можно разбить его команды? 4. Какие адреса памяти в УМКотносятся к ПЗУ и ОЗУ? 5. В чем заключается принципиальное отличие ПЗУ от ОЗУ? 6. Что происходит при попытке записи данных в ПЗУ? 7. Сохраняется ли в памяти УМК программа после выключения питания? 8. Что такое флаг? Для чего он используется? 9. Что такое программа-монитор и ее функции? 10. Какой формат могут иметь команды микропроцессора? 11. Какие регистры существуют в микропроцессоре? Определите само понятие регистр. 12. Что такое стек, указатель стека и счетчик команд? 13. Назовите основные типы адресации. Лабораторная работа № 2 на тему «Программирование арифметических операций » Цель работы: изучить команды пересылки данных и арифметические команды, способы адресации данных при выполнении простых программ по нахождению суммы ряда чисел и сложении (вычитании) с переносом (заёмом). 1. Краткие теоретические сведения Арифметические операции микропроцессора КР580ИК80а выполняются с помощью блока арифметико-логического устройства (АЛУ), который предназначен для выполнения арифметических и логических операций над числами в параллельном 8-разрядном двоичном коде, а также операций циклического сдвига. Команды данной группы предназначены для выполнения операций сложения, сложения с переносом, вычитания, вычитания с переносом, инкрементирования, декрементирования и десятичной коррекции аккумулятора. Все эти команды оперируют с данными в памяти и регистрах и используют в той или другой мере все 5 флагов регистра F. Операции вычитания проводятся с использованием дополнительного кода и устанавливают флаг переноса СУ в «1» при наличии переноса при выполнении операции (т. е. если есть заем) и устанавливают флаг переноса СУ в «0» при отсутствии переноса (т. е. если нет займа). Все команды арифметических операций выполняются только с использованием аккумулятора А, в котором обязательно должен находиться один из операндов еще до выполнения команды. Второй операнд необходимо предварительно загрузить: - в один из РОН МП; - в ячейку памяти МП; - записать во второй байт команды. Только после размещения операндов модно выполнять команду арифметической операции. Результат вычислений автоматически, с помощью метода неявной адресации, размещается в аккумуляторе А, а число, хранимое там, стирается. МП КР580ВМ80А выполняет только операции сложения и вычитания с помощью соответствующих команд. Операции умножения и деления осуществляются с помощью специальных подпрограмм, реализованных посредством набора команд сложения, сдвига и других преобразований в соответствии с известными правилами, изученными в разделе «Математические разделы ЭВМ» 1.2 Примеры выполения арифметических операций Рассмотрим процесс программирования выражения (A)=(A)+(B)+(M)+1 Здесь и далее под (A), (B), (M) будем понимать содержимое регистра-аккумулятора А, регистра В и некоторой ячейки памяти М. Вполне очевидно, что перед выполнением выражения исходные данные нужно поместить в аккумулятор А, регистр В и ячейку памяти М. При этом адрес ячейки памяти перед реализацией выражения следует заранее поместить в регистровую пару Н. Реализовывать заданное выражение будем в том порядке, в котором оно записано. Программа, реализующая сложение 8-мибайтовых чисел приведена в таблице 2. Таблица 1 Программа последовательного сложения чисел Адрес Мнемокод команды Код команды 800 MVI A, 45 802 MVI B, AB LXI H, 900 809 MVI M, 0E ADD B 3E 45 06 AB 21 00 09 36 0E 80 80А ADD M 86 80В INR A 3C 804 807 Комментарий Результат Выполнения команды (A)=4516 Загрузка числа 4516 в аккумулятор Загрузка числа АВ 16 в регистр В (B)=AB16 Загрузка регистровой пары Н адресом ячейки памяти М (H)=0916 (L)=0016 Загрузка числа 0Е16 в ячейку памяти М (M)=0E16 Суммирование содержимого аккумулятора и содержимого регистра В. Результат помещается в аккумулятор. Суммирование содержимого аккумулятора и содержимого ячейки памяти. Результат помещается в аккумулятор Инкрементирование (увеличение на единицу) содержимого аккумулятора. Результат остается в аккумуляторе. Согласно заданию (A)=F016 Согласно формуле (A)=FE16 Согласно формуле (A)=FF16 2. Порядок выполнения лабораторной работы 1. Введите программу из таблицы 1 в память УМК и выполните ее в покомандном режиме посредством команды СТ системной программы МОНИТОР, создавая в ее формате на каждом шаге начальный адрес очередной выполняемой команды и адрес точки останова. В качестве адреса точки останова следует понимать следующий начальный адрес очередной выполняемой команды, которая должна будет выполнена на следующем шаге выполнения программы из таблицы 2. Программная реализация покомандного режима выполнения программы обусловлена необходимостью просмотра в процессе решения задачи содержимого регистров микропроцессора Кр580ИК80А. В пошаговом (покомандном) режиме УМК происходит установка, а не прерывание выполнения программы. Поэтому для временного выхода из выполняемой программы необходимо нажать клавишу управления СБ, что приводит к изменению содержимого регистров микропроцессора ( содержимое ячеек памяти остается постоянным).Дальнейшее выполнение программы становится невозможным. При программной реализации покомандного режима происходит прерывание выполняемой программы, в результате которого возможен просмотр содержимого регистров МП. Их содержимое не будет изменено. 2. Подготовьте программы, реализующие арифметические выражения согласно индивидуальному заданию и составьте их блок- схемы. Решите задачи аналитически, выполняя арифметические операции в том порядке, который определяют заданные выражения. 3. Запишите разработанную программу в память УМК с адреса 800 16 и выполните ее в программно реализованном покомандном режиме посредством команды СТ старта программы пользователя системы «МОНИТОР». 4. На каждом шаге после выполнения очередной команды сравните результат выполнения команд с результатами аналитического решения и сделайте выводы. Определите время выполнения программы в автоматическом режиме. 5. По результатам выполнения лабораторной работы оформите отчет, который должен содержать следующую информацию. 3. Содержание отчета 1. Краткое описание цели работы и результатов самостоятельной подготовки к лабораторному занятию. 2. Тексты программ выполнения лабораторной работы. 3. Протокол, отражающий последовательность действий на пульте отладочного устройства и результаты выполнения команд МП К580ИК80 с записью последовательности нажатых клавиш на пульте отладочного устройства. 4. Контрольные вопросы 1. Что такое команда МП? 2. Что такое система команд МП? 3. Назовите группы команд МП К580ИК80? 4. Из каких частей состоит команда МП? 5. Что такое мнемокод? 6. Назовите способы адресации, используемые в МП К580ИК80А? 7. Для чего служат команды пересылки данных? 8. Назовите значения разрядов регистра признаков МП К580ИК80А? 9. Какие из разрядов формируются при выполнении команды пересылки данных? 10. После выполнения команды пересылки данных MOV С,В сохраняются ли исходные данные в регистре В? 11. Приведите примеры команд пересылки данных с прямой, косвенной, регистровой адресацией. 12. В каких байтах располагаются младшие и старшие разряды адреса в командах, содержащих адрес ячейки памяти? 13. В ячейке памяти с адресом 8314 находится число F4. Какие команды можно применить для записи его в регистр С? 14. В регистре D находится число Е4. Какие команды можно использовать для записи его в ячейку памяти с адресом 8147? 15. В каких регистрах МП К580ИК80 может храниться адрес ячейки памяти? 16. Для чего служат арифметические (логические команды)? 17. Данные, какой длины может обрабатывать МП К580ИК80А? 18. Где хранятся операнды, и куда помещается результат после выполнения арифметических (логических) команд? 19. Какие разряды в регистре признаков формируются при выполнении арифметических (логических) команд? 20. Для чего используются команды положительного и отрицательного приращения (INR, DCR, INX, DCX)? 21. Как выполняется команда сравнения двух чисел? Где формируется результат выполнения этой команды? 22. Как выполняются команды простого и циклического сдвига содержимого аккумулятора? 23. Над содержимым каких программно доступных регистров МП К580ИК80А можно выполнить команду сдвига? Лабораторная работа № 3 на тему «Исследование выполнения логических операций» Цель: 1. Практически закрепить знание теоретических сведений о программировании логических операций микропроцессорами. 2. Изучить команды МП КР580ВМ80А для выполнения логических операций. 3. Привить практические навыки написания и выполнения программ для программирования логических операций в машинных кодах для микропроцессора 1. Краткие теоретические сведения Логические команды предназначены для выполнения операций над переменными по законам булевой алгебры, тестирования и сравнения бит данных (т. е. сравнение с заданной маской бит) и сдвига данных. Все операции логики выполняются с двумя операндами, один из которых всегда находится в аккумуляторе, а результат операции сохраняется в аккумуляторе. Операции сдвига выполняются только над операндами, которые находятся в аккумуляторе, а из всех имеющихся флагов используются только флаги знака Z и переноса CY. Различают два типа команд сдвига: сдвиг циклический и сдвиг с переносом. Примером команды первого типа является команда RLC (сдвиг циклический по левую сторону), если содержимое аккумулятора сдвигается по левую сторону на один разряд. При этом устанавливается в состоянии бита старшего розряда аккумулятора А7, бит младшего розряда аккумулятора А0 и бит переноса CY, что отвечает следующей схеме выполнения команды (Рисунок 1). CY A7 A6 A5 A4 A3 A2 A1 A0 Рисунок 1 Команда циклического сдвига влево Примером команды 2-го типа является команда RAL (сдвиг по левую сторону с перенесом), если проводится сдвиг содержимого аккумулятора на один разряд по левую сторону. При этом бит переноса СУ устанавливается в состояние бита старшего разряду аккумулятора А7, а бит младшего разряда А0 – в состояние бита переноса СУ, что отвечает следующей схеме выполнения команды (рисунок 2 ) и ее условному обозначению. В логических командах используется регистровая, косвенно регистровая и непосредственная адресации CY A7 A6 A5 A4 A3 A2 A1 A0 Аккумулятор 1.2 Пример программирования логических операций Рассмотрим программирование логических операций на примере программной реализации функции алгебры логики А= A B M C D где под A, B, C, D и M понимается содержимое регистров а ( аккумулятора), В, С и ячейки памяти соответственно. Перед выполнением программы, выполняющей необходимые действия, необходимо предварительно разместить в соответствующих регистрах и ячейке памяти нужные данные. Логические операции будем выполнять в той последовательности, в которой они заданы функцией алгебры логики. Последовательность необходимых команд будет выглядеть следующим образом: 1. Размещаем данные в соответствующих регистрах; 2. Заносим адрес ячейки памяти в регистровую пару H; 3. Заносим данные в ячейку памяти; 4. Производим операцию логического сложения содержимого аккумулятора А с содержимым регистра В. Для этого используем команду ORA B. Результат будет помещен в аккумулятор. 5. Следующую операцию производим с помощью команды ORA M- сложения содержимого аккумулятора с содержимым ячейки памяти. результат, как известно, сохраняется в аккумуляторе. 6. Теперь необходимо выполнить логическое умножение содержимого аккумулятора и содержимого регистра С посредством команды ANA C. 7. Сложение по модулю два производим с помощью команды XRA D над операндами, расположенными в аккумуляторе и регистре D . Результат будет помещен в аккумулятор. 8. Заключительным этапом программирования заданного выражения будет выполнение логической операции НЕ (отрицания). Она реализуется путем инвертирования содержимого аккумулятора, где хранится результат выполнения всех предыдущих действий, с помощью команды CMA. Программа, реализующая заданную функцию алгебры логики, приведена в таблице 1. Таблица 1 Адрес Мнемокод команды Код команды 800 MVI A, 25 802 MVI B, 3А 804 MVI С, 2Е 806 MVI D, 16 808 LXI H, 3E 25 06 3A 0E 2Е 16 16 21 Комментарий Загрузка числа 2516 в аккумулятор Результат Выполнения команды (A)=2516 Загрузка числа 3А16 в регистр В (B)=3A16 Загрузка числа 2Е16 в регистр С (C)=2Е16 Загрузка числа 1616 в регистр D (D)=1616 Загрузка регистровой пары Н адресом ячейки памяти М (H)=0916 900 80B MVI M, 28 80D ORA B 00 09 36 28 B0 80E 80F 810 811 ORA M ANA C XRA D CMA B6 A1 AA 2F (L)=0016 Загрузка числа 2816 в ячейку памяти М (M)=2816 Логическое сложение содержимого аккумулятора А с содержимым регистра В Логическое сложение Логическое умножение Сложение по модулю 2 содержимого аккумулятора и регистра D. Инвертирование содержимого аккумулятора. Результат размещается в А. Программирование операции сравнения двоичных чисел: в системе команд микропроцессора КР580ВМ80А предусмотрено три типа команд сравнения: - сравнение содержимого аккумулятора с содержимым регистра; - сравнение содержимого аккумулятора с содержимым ячейки памяти М, адрес которой должен содержаться в регистровой паре Н; - сравнение содержимого аккумулятора А с операндом, который находится непосредственно во втором байте команды. Таким образом, один из операндов должен обязательно находиться в аккумуляторе. Команды сравнения реализуются путем вычитания содержимого регистра, содержимого ячейки памяти или операнда, находящегося во втором байте команды, из содержимого аккумулятора А. При этом содержимое аккумулятора А не изменяется . Результат сравнения отображается в состояниях триггеров регистра F признаков условий: - триггер Р признака четности устанавливается в состояние, соответствующее числу единиц в разности, полученной при сравнении операндов: если число единиц четное- в состояние логической, если нечетное- в состояние логического нуля. - триггер S признака знака устанавливается в состояние, определяемое значением старшего разряда результата вычитания при сравнении операндов; - триггеры Z признака нулевого результата и CY признака переноса из старшего разряда устанавливаются в состояние. Определяемые результатом сравнения (смотрите таблицу 2) Таблица 2 Состояния триггеров Z и CY в зависимости от результата сравнения операндов Результат сравнения Состояние триггера Z CY Равно 1 0 Больше 0 0 Меньше 0 1 2. Задание на лабораторную работу 1. Введите программу из таблицы 1 в память УМК и выполните ее в пошаговом режиме, предусмотрев первую точку останова по адресу 80 с целью проверки правильности загрузки регистров и ячейки памяти М требуемыми данными. В дальнейшем программу выполняйте в программно реализованном пошаговом режиме. Для этого в формате команды СТ системной программы «МОНИТОР» УМК задавайте на каждом шаге в качестве стартового начальный адрес выполняемой команды, а в качестве адреса останова- начальный адрес команды, которую необходимо будет выполнять на очередном шаге. 2. Напишите в табличном виде программу, реализующую функцию алгебры логики согласно индивидуальному заданию и составьте ее блок-схему. Решите задачу аналитически, выполняя логические операции в том порядке, который указывает заданная ФАЛ с учетом принятого приоритета. Введите разработанную программу в память УМК и выполните ее в пошаговом режиме. 3. На каждом шаге выполнения программ путем просмотра содержимого аккумулятора А проверьте совпадение полученного результата с аналитическим, полученным в процессе разработки программы. 4. Определите время выполнения программы в автоматическом режиме работы. 5. Результаты работы программы и время ее выполнения отразите в выводах по работе. 6. Подготовьте программу сравнения содержимого аккумулятора А с содержимым регистра, ячейки памяти и с числом К согласно индивидуальному заданию, составьте ее блок- схему. Программу представьте в табличном виде: Адрес Мнемокод Код команды команды Комментарий Результат решения аналитически P S Z программно CY P S Z 7. В таблицу поместите результаты аналитического решения задачи, полученные CY в часы самостоятельной подготовки, а затем- машинного при выполнении программы на УМК. Проведите сравнительный анализ и сделайте необходимые выводы. В качестве исходных данных возьмите данные из задания 2, разместив их по своему усмотрению в аккумуляторе, заданных регистре и ячейке памяти, во втором байте команды. Определите время выполнения программы в автоматическом режиме. 3. Содержание отчета 1. Краткое описание цели работы и результатов самостоятельной подготовки к лабораторному занятию. 2. Тексты программ выполнения лабораторной работы. 3. Протокол, отражающий последовательность действий на пульте УМК и результаты выполнения команд МП К580ИК80 с записью последовательности нажатых клавиш на пульте УМК Лабораторная работа № 4 на тему «Исследование возможности организации циклов» Цель: 1. Изучить команды МП КР580ВМ80А для выполнения операций условного, безусловного перехода. 2. Практически закрепить знание теоретических сведений о программировании логических, арифметических операций микропроцессора, а также операций условного и безусловного перехода. 1. Общие теоретические сведения Задачи, решаемые на ЭВМ, не сводятся к обработке отдельного элемента данных с помощью одной операции. Напротив, они требуют обработки многих элементов данных (например, массива или блока данных), которые занимают отдельные ячейки памяти. Программа может выполнять одну и ту же операцию над содержимым ячеек, причем выполнять ее многократно с помощью программных циклов. Кроме того, в программах могут встречаться логические разветвления, например, если нужно перейти к определенной части алгоритма при выполнении (или невыполнении) какого-либо условия. В системе команд практически всех микропроцессоров предусмотрено три типа переходов с одного места программы на другое (нарушение последовательного выполнения команд): 1. переход (команда JMP adr микропроцессора КР580ВМ80)- переход к выполнению команды, код которой находится в ячейке памяти с адресом adr. 2. переход к подпрограмме (команда CALL adr микропроцессора КР580ВМ80). 3. возврат из подпрограммы (команда RET микропроцессора КР580ВМ80). Переход к подпрограмме и возврат из нее организуется с участием стека. Стеком называется последовательность ячеек памяти, организованная таким образом, что последнее записанное число считывается первым (стек магазинного типа или типа "последним вошел - первым вышел"). Никакие другие операции, например считывание информации из середины стека не допускаются. Обычно при записи в стек нового числа, оно занимает ячейки памяти с адресами лежащими непосредственно перед концом стека. Таким образом, стек в памяти растет "сверху вниз". Адрес последней занятой стеком ячейки памяти хранится в специальном регистре микропроцессора указателе стека (SP). Стек используется микропроцессором двояким образом: 1. для временного хранения информации, то есть программист может записывать в него данные и извлекать их (команды PUSH rp и POP rp ассемблера МП КР580ВМ80); 2. для организации подпрограмм, при переходе к подпрограмме (по команде CALL adr) в стек автоматически, без участия программиста, записывается адрес команды, следующей за командой вызова подпрограммы. После окончания подпрограммы (команды RET) микропроцессор также самостоятельно извлекает из стека последнее записанное в него число, считает, что это адрес возврата в основную программу и передает управление основной программе начиная с этого адреса. Поскольку в большинстве микропроцессоров (например, в КР580ВМ80) для обеих целей используется один и тот же стек, обращаться с ним нужно с осторожностью. Все эти переходы могут быть как безусловными - они выполняется всегда, так и условными они выполняются только в том случае, когда результат предыдущих арифметической или логической операции отвечает определенным условиям. Сведения о выполнении (или невыполнении) этих условий находятся в регистре флагов (F) или признаков, содержимое которого анализируется микропроцессором при выполнении данных команд. Такими условиями могут быть (для МП КР580ВМ80) нулевой или ненулевой результат (Z или NZ), наличие или отсутствие переноса (C или NC), положительный или отрицательный результат (P или M) и др. Если условный переход не происходит (условие не выполнено), то управление передается команде, следующей за командой перехода. В системе команд некоторых микропроцессоров есть команда программного прерывания, она выполняется аналогично команде перехода к подпрограмме, но адрес вызываемой подпрограммы не присутствует непосредственно в команде, а находится в ячейках памяти с адресом определяемым номером прерывания. 1.1 Команды переходов Команды переходов осуществляются посредством изменения соджержимого счетчика команд PC и, следовательно, изменения нормального последовательного выполнения программы. Команды обеих подгрупп являются 3-х байтовими: первый байт занимает КОП, а второй и третий байты вмещают в себе младшую (LAD) и старшую (HAD) половины адреса точки перехода (то есть адреса, где размещенная следующая команда программы и которая не является последовательно выполняемой командой). Мнемонической (т.е. ассемблерной ) записью команды безусловного перехода является JMP [Address] (т.е JMP [<B3><B2>]), а команд условного перехода J<Condition>[Address]. Последние осуществляют передачу управления (т. е. Выполнение программы) в зависимости от состояния одного из соответствующих разрядов регистра флагов, то есть состояния одного из четырех флагов (Z, S, P и CY). Они устанавливаются по результату выполнения команды (то есть содержимого аккумулятора А), которая задает ту или другую операцию, и имеют такие значения (таблица 1). Таблица 1. № г.г. 1. Обозначение флага Z (zero) 2. 3. 4. S (sing) Значение флага Результат выполнения команды (операции) 0 Если результат операции не равняется 0. 1 Если результат операции равен 0. 0 Если старший бит результата (А7) Операции равен 0. 1 Если старший бит результата(А7) Операции равен 1. 5. P (parity) 6. 7. Если результат операции насчитывает нечетное число 1. Если результат операции насчитывает парное число 1 0 1 CY (carry) 8. Если есть перенос к старшему разряду (при сложении) или перенос из старшего разряда (при вычитании или сравнении). В противном случае. 0 1 Поскольку условие перехода связанно со значением того ли иного флага, а возможных значений существует восемь, то для их кодирования в КОП используются три разряда, а поле кода условия при записи самой команды и его формата указывается как ССС. Мнемоническим обозначением команд условного перехода является J (то есть от JMP) с соответствующим обозначением одной из условий. Имеют место следующие условия перехода и соответствующие им значения поля ССС (таблица 2). Таблица 2 № г.г. Мнемоническое обозначение условия Значение флага Содержание значения флага 1. 2. 3. 4. NZ Z NC C Z=0 Z=1 CY=0 CY=1 Не нуль Нуль Нет переноса Есть перенос 5. 6. PO PE P=0 P=1 Нечетный результат Парный результат 7. 8. P M S=0 S=1 Плюс (положительный) Минус (отрицательный) Если заданное полем ССС условие выполняется, что проверяется по значению соответствующего разряда регистра флагов, то управление передается команде, адрес которой определяется вторым и третьим байтами команды условного перехода, то есть содержимое второго и третьего байтов команды заносится в счетчик команд РС. В случае, если заданная полем ССС условие не выполняется, то ЦП переходит к выполнению следующей по порядку команды, для чего содержимое счетчика команд просто увеличивается на трех единицы. 1.2 Команды вызова подпрограмм Команды вызова, которые могут быть как безусловными (CALL), так и условными (CALL IF), применяются для обращения к подпрограммам, которые размещены вне рабочей области основной памяти. Мнемоническое обозначение команды условного вызова создается объединением символа С (от лица CALL) с одним из мнемонических обозначений условий, которые приведенные в таблице 3. В отличие от команд условного и безусловного перехода команды вызова всегда предусматривают возможность возвращения к прерванной основной программе. Для этого любая команда вызова перед передачей управления подпрограмме заносит в стек адрес возвращения к основной программе. Поэтому старшая половина программного счетчика PCH заносится в стек по адресу (SP)-1, а младшая половина адресаPCL-в стек по адресу (SP)-2, где (SP)- содержимое указателя стека. Само содержимое указателя стека при этом уменьшается на две единицы. Любая подпрограмма всегда должна заканчиваться командой безусловного возвращения RET(RETURN), или командой возвращения по условию (RETURN IF). При выполнении команды возвращение содержимое ячейки памяти, адрес которой в текущий момент времени располагается в указателе стека SP, переписывается в младшую половину счетчика команд РС, то есть PCL. После этого содержимое ячейки памяти, адрес которой на единицу больше текущего содержимого указателя стека SP, переписывается в старшую половину РС то есть РСН, что приводит к формированию в РС адреса возвращения из последней выполненной подпрограммы. При этом содержимое указателя стека увеличивается на две единицы. Команда RST (RESTART) осуществляет повторный запуск МП и используется в операциях с вектором (то есть двоичным кодом) прерываний NNN, где N=0/1. Таким образом RST является командой программных прерываний, число которых равняется восьми. Для выполнения такой команды необходимо указать начальный адрес подпрограммы обработки прерываний данного типа. Этот адрес формирует на основании кода NNN сама однобайтовая команда RST n, где n-номер рестарта (n=0-7), и является аргументом команды. При выполнении команды RST содержимое РС пересылается в стек следующим образом: старшая половина адреса РСН переносится в стек по адресу (SP)-1, а младшая половина адреса PCL-в стековую область памяти по адресу (SP)-2. При этом содержимое указателя стека уменьшается на две единицы. Все эти действия обеспечивают возвращение к основной программе после завершения работы программы по обработке данного прерывания. При выполнении команды RST содержимое программного счетчика РС формируется как шестнадцатиразрядный адрес, который имеет в себе поле NNN в таком виде: (РС)<-8*NNN A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 0 0 0 0 0 0 0 0 0 0 N N N 0 0 0 т.е. адрес равняется коду NNN, умноженному на 8. Этот адрес и является начальным адресом программы обслуживания прерываний данного типа. 1.2 Пример использования команд перехода при выполнении арифметических операций Допустим, необходимо найти сумму ряда чисел. При этом задача состоит в том, чтобы осуществить суммирование нескольких чисел сразу. Эти числа могут представлять собой совокупности входных сигналов, находящихся под управлением системы, число изделий (или число сообщений), изготовленных (или принятых) за определенный промежуток времени. Предположим, что сумма не превышает 25510 и для её хранения достаточно одной 8-битовой ячейки памяти. В программе суммирования ряда чисел для МП К580ИК80 использованы следующие исходные данные и обозначения: В - регистр-счетчик, указатель длины массива NNNN - адрес ячейки памяти, где указана длина массива HL - регистровая пара, адресный указатель данных DDDD - адрес ячейки памяти, где хранится первый элемент 8100 - адрес начала программы Перед выполнением программы исходный ряд чисел заносится с помощью командных клавиш в область памяти, начиная с адреса DDDD (см. Приложение 2). Таблица 1 Программа сложения ряда чисел Адрес Машинный код Метка Мнемокод LDA Комментарий загрузка длины ряда чисел в АКМ 8100 3A 8101 NN 8102 NN 8103 47 MOV B,A 8104 97 SUB A Обнуление аккумулятора 8105 21 LXI H загрузка адресного указателя 8106 DD 8107 DD 8108 86 8109 из ячейки памяти с адресом NNNN загрузка длины ряда чисел в счетчик DDDD в регистровую пару HL ADD M сложение элемента массива с АКМ 05 DCR B уменьшение счетчика 810A CA JZ, M1 сложение элементов массива 810B 11 810C 81 810D 23 INX H 810E C3 JMP, M2 810F 08 8110 81 8111 00 N - длина чисел в байтах M2 закончено? Ml NOP переход к следующему адресу организация цикла окончание программы В - регистр-счетчик, указатель длины чисел DE - регистровая пара, адресный указатель первого слагаемого NNNN - адрес ячейки памяти, где хранится младший байт первого числа HL - регистровая пара, адресный указатель второго слагаемого DDDD - адрес ячейки памяти, где хранится младший байт второго числа 8300 – адрес начала программы В большинстве случаев точность вычислений, обеспечиваемая одной ячейкой памяти, недостаточна. Поэтому рассмотрим арифметику для чисел, занимающих несколько ячеек. Задача состоит в том, чтобы сложить два числа длиной более 8 бит каждое. Исходные числа располагаются в области памяти таким образом, что сначала идут младшие разряды, а затем более старшие. Полученную сумму необходимо поместить в те ячейки памяти, где хранилось первое число. В программе суммирования двух длинных чисел для МП К580ИК80 использованы следующие исходные данные и обозначения: Таблица 2 Программа сложения двух длинных чисел Адрес Машинный код 8300 06 8301 N 8302 11 8303 NN 8304 NN 8305 21 8306 DD 8307 DD 8308 1A 8309 Метка Мнемокод Комментарий MVI B Загрузка счетчика LXI D загрузка адресного указателя Первого числа LXI H загрузка адресного указателя Второго числа М2 LDAX D загрузка операнда в АКМ 8E ADC M сложение с учетом переноса 830А 12 STAX D Запоминание результата сложения 830В 05 DCR B Уменьшение счетчика на единицу 830С CA JZ, M1 сложение закончено? 830D 14 830Е 83 830F 13 INX D переход к следующему байту первого числа 8310 23 INX H переход к следующему байту второго числа 8311 C3 8312 08 JMP, M2 организация цикла 8313 83 8314 00 Ml NOP окончание программы Перед выполнением программы исходные числа F1 и F2, начиная с младшего байта, заносятся последовательно байт за байтом с помощью командных клавиш в ячейки памяти, начиная с адресов NNNN и DDDD соответственно (см. Приложение 4). Микропроцессор КР580ВМ80А не имеет команд умножения, поэтому для выполнения этой математической операции надо составлять программу. Приведенный ниже вариант такой программы работает по следующему алгоритму: Шаг 1: проверить младший бит множителя. Если он равен нулю, перейти к шагу 3, если единице - сложить множимое с промежуточным результатом умножения. Шаг 2: сдвинуть полученный промежуточный результат на один бит влево. Шаг 3: повторять шаги 1 и 2 до тех пор, пока не будут проверены все биты множителя. ;УМНОЖЕНИЕ ;вход в программу: ;А - множитель, DE — множимое, ;результат работы: ;HL - произведение UMNOG: LXI Н,0 ;сброшен промежуточный результат ;****** шаг 3 ****** SHAG3: ORA А RZ ;проверка окончания работы ;если содержимое регистра А равно нулю - умножение закончено;****** шаг 1 ****** RAR ;младший бит множителя в переносе INC SDVIG ;если перенос равен нулю - пропуск сложения DAD D ;сложение множимого и промежуточного результата ;******шаг 2 ****** SDVIG: XCHG DAD H ;сдвиг множимого XCHG JMP SHAG3 В строке с меткой SHAG3 проверка на равенство нулю аккумулятора выполнена при помощи логической операции ИЛИ аккумулятора с самим собой. Эта операция не изменяет содержимое аккумулятора, но устанавливает все признаки. Можно было бы проверить содержимое аккумулятора на равенство нулю при помощи команды CPI 00, но эта команда занимает больше места в памяти и дольше выполняется. Для реализации операции деления существуют несколько алгоритмов, вы можете ознакомиться с ними в литературе по вычислительной технике. Самый простой алгоритм сводится к последовательному вычитанию делителя из делимого, подсчитыванию числа вычитаний, до тех пор пока уменьшающееся каждый раз после очередного вычитания значение делимого не станет равным нулю или меньше нуля. Если значение делимого равно нулю, значит, деление без остатка, и число вычитаний соответствует частному. Если значение делимого меньше нуля, значит, надо вычислить величину остатка. Она вычисляется прибавлением значения делителя к текущему значению делимого. 2. Порядок выполнения лабораторной работы 1. Введите программу из таблицы 1 в память УМК и выполните ее в покомандном режиме посредством команды СТ системной программы МОНИТОР, создавая в ее формате на каждом шаге начальный адрес очередной выполняемой команды и адрес точки останова. В качестве адреса точки останова следует понимать следующий начальный адрес очередной выполняемой команды, которая должна будет выполнена на следующем шаге выполнения программы. 2. Подготовьте программы, реализующие арифметические выражения согласно индивидуальному заданию (приложении 4) и составьте их блок- схемы. Решите задачи аналитически, выполняя арифметические операции в том порядке, который определяют заданные выражения. 3. Запишите разработанную программу в память УМК с адреса 800 16 и выполните ее в программно реализованном покомандном режиме посредством команды СТ старта программы пользователя системы «МОНИТОР». 4. На каждом шаге после выполнения очередной команды сравните результат выполнения команд с результатами аналитического решения и сделайте выводы. Определите время выполнения программы в автоматическом режиме. 5. По заданию преподавателя напишите программу умножения/деления с использованием полученных знаний 6. По результатам выполнения лабораторной работы оформите отчет. 3. Содержание отчета 1. Краткое описание цели работы и результатов самостоятельной подготовки к лабораторному занятию. 2. Тексты программ выполнения лабораторной работы. 3. Протокол, отражающий последовательность действий на пульте отладочного устройства и результаты выполнения команд МП К580ИК80 с записью последовательности нажатых клавиш на пульте отладочного устройства. 3. Контрольные вопросы: 1. Что хранится в указателе стека? 2. Поясните понятия «условный» и «безусловный переход» 3. Назовите используемый признаки перехода 4. Что значит мнемоническая запись команды? 5. В каких регистрах МП К580ИК80 может храниться адрес ячейки памяти? 6. Для чего служат арифметические (логические команды)? 7. Данные, какой длины может обрабатывать МП К580ИК80А? 8. Где хранятся операнды, и куда помещается результат после выполнения арифметических (логических) команд? 9. Какие разряды в регистре признаков формируются при выполнении арифметических (логических) команд? 10. Для чего используются команды положительного и отрицательного приращения (INR, DCR, INX, DCX)? 11. Как выполняется команда сравнения двух чисел? Где формируется результат выполнения этой команды? 12. Как выполняются команды простого и циклического сдвига содержимого аккумулятора? 13. Над содержимым каких программно доступных регистров МП К580ИК80А можно выполнить команду сдвига? 14. Назовите назначение разрядов регистра признаков МП К580ИК80А? 15. По каким условиям записывается 1 в каждый из разрядов регистра признаков МП К580ИК80А? 16. Какие функции выполняют команды перехода? 17. Какие существуют способы изменения последовательности выполнения команд? 18. Как осуществляется выполнение команды перехода? 19. В каких байтах располагаются младшие и старшие разряды в командах перехода? 20. По алгоритму задачи необходимо принять решение "больше". Какими командами можно это реализовать? 21. По алгоритму задачи необходимо принять решение "равно". Какими командами можно это реализовать? 22. Как организуется цикл в системе команд МП К580ИК80А? 23. Какое максимальное число команд имеет параметр цикла? 24. Как организуется работа с массивами? 25. С какой целью следует оставлять "пустые" команды в программе? Лабораторная работа № 5 на тему «Исследование взаимодействия с портами ввода-вывода ( маскирование, «бегущие огни», сканирование клавиатуры, вывод слова)» Цель: 1. Практически закрепить знание теоретических сведений о возможностях взаимодействия МП с портами ввода-выводаопераций микропроцессорами; 2. Привить практические навыки написания сложных программ и программирования различных операций в машинных кодах для микропроцессора. 1. Краткие теоретические сведения У микропроцессора КР580 порт ввода/вывода может быть реализован на программируемом периферийном интерфейсе (микросхема КР580ИК55). Режимы работы микросхемы К580ИК55 задаются при ее начальной установке. Четыре подадресных регистра схемы включают в себя три регистра каналов ввода - вывода данных (А, В, С) и регистр управления. Регистр канала С может быть подразделен на два четырехразрядных регистра ввода - вывода данных, к которым осуществляется доступ как к отдельным независимым регистрам. Имеется возможность подразделения трех каналов на две группы. В этих группах каналы А и В используются для обмена данными с микро-ЭВМ, а отдельные шины канала С - для записи управляющих сигналов. Режимы работы каналов задаются путем записи управляющего слова в регистр управления. 1.2 Пример работы с портами вводы-вывода Пусть порт А будет программироваться как порт ввода- будем считать, что к 3-м его разрядам подключены тумблеры. А к 8 разрядам порта В подключены светодиодные индикаторы. Этот порт будет программироваться как порт вывода, т.е. МП сможет считывать данные с тумблеров и выводить данные на светодиодные переключатели. На рисунке 1 представлена структурная схема программы, которая демонстрирует использование этих портов. ПОРТЫ ВВОДА/ВЫВОДА ПРОГРАММИРОВАНИЕ ИНТЕРФЕЙСА СЧИТАТЬ ДАННЫЕ С ПОРТА ВВОДА ЗАПИСАТЬ ДАННЫЕ В ПОРТ ВЫВОДА Рисунок 1 Структурная схема программы для переписи данных из порта ввода в порт вывода Эта программа ( таблица 1) считывает данные из порта ввода и записывает их в порт вывода.. Таблица 1 Адрес Содержимое 8000 ЗЕ 8001 8002 8003 8004 8005 8006 8007 8008 8009 800А 81 D3 FB DB FA D3 F9 СЗ 04 80 Метка Команда MVIА,81 OUT FB START: IN FA OUT F9 JMP START Чтобы запрограммировать интерфейс, как было предусмотрено (А -порт ввода, В - порт вывода), необходимо подать на него код 81 по адресу FB. Первая комманда MVI А,81 означает загрузку аккумулятора кодом 81. Следующая команда OUT FB записывает содержимое аккумулятора в порт по адресу.FB, т.е. порт (интерфейс) программируется. Далее идет команда IN FA, обеспечивающая запись данных из порта с адресом FA,. присвоенным порту А, в аккумулятор. Команда OUT F9 означает вывод данных из аккумулятора в порт вывода по адресу F9. Поскольку этот адрес в нашем случае присвоен порту В, происходит вывод данных из аккумулятора в порт В (на светодиодные индикаторы). Таким образом, программа пересылает данные из порта ввода в порт вывода. Последняя, команда - переход (JMP). Она завершает цикл, который выполняется непрерывно. Следовательно, данные выходного порта будут соответствовать данным порта ввода во время выполнения программы., МП КР580ИК80 может адресовать до 256 портов ввода и столько же портов вывода. Поэтому для адресации портов достаточно два шестнадцатеричных разряда, а не четыре, как это требуется для памяти. 1.3 Использование логических команд при взаимодействии портов ввода-вывода В основе построения цифровых схем лежит логический вентиль, а наиболее широко используются 4 базовые функции вентиля: «И», «ИЛИ», «НЕ» и «исключающее ИЛИ». Каждая из этих функций может быть реализована программным способом. Для иллюстрации действия логических команд проведем следующий эксперимент: будем вводить данные с переключателей входного порта, затем эти данные преобразуются логическими командами, и результат высветится на светодиодных индикаторах выходного порта. Т. к. микролаборатория имеет только три переключателя входного порта, мы будем наблюдать только за тремя младшими разрядами данных. Таблица 2 Программа, демонстрирующая действие логических команд Адрес 8000 8001 8002 8003 8004 8005 8006 8007 8008 8009 800А 800B 800C 800D Содержимое Метка Команда MVI A, 81 OUT FB START Комментарии Программирование интерфейса КР580ИК55 MVI B, 0A Чтение данных с входного порта в аккумулятор 0000 1010B ANA B OUT F9 A*BA Запись данных в порт вывода JMP START Зацикливание программы IN FA Эта программа считывает данные с переключателей входного порта, а затем объединяет их по «И» с числом 0000 1010. Результат появляется на светодиодных индикаторах. Затем программа возвращается на начало, и процесс бесконечно повторяется, так что можно изменить входные данные и проверить соответствующие выходные. 1.3 Маскирование Типичное применение логических команд- выделение определенных битов слова (маскирование). Для примера предположим, что нам нужно проверить состояние одного из переключателей, подключенных к порту ввода, а состояние остальных- проигнорировать. Алгоритм для программы, проверяющей переключатель, соединенный со вторым битом входного порта будет иметь вид (если ключ замкнут, индикатор загорается и наоборот): - программирование интерфейса; - чтение данных с переключателей; - объединение по схеме «И» аккумулятора и кода 000 0100; - если результат=0, то выключение переключателей, если 0, то включение. В таблице 3 приведен листинг программы. Сначала производится программирование интерфейса, затем считываются данные с входного порта в аккумулятора и в регистр B заносится маскирующее слово. Затем содержимое регистров A и B объединяется по «И». В результате все биты кроме второго приводятся к нулю. Значение второго бита результата будет зависеть от положения переключателя. Программа использует команду JZ перехода, если установлен флаг нуля. Нулевой флаг инициирует, что полный байт (и поэтому бит 2) равен 0. Таблица 3 Адрес 8000 8001 8002 8003 Содержимое Метка Команда MVI A,81 OUT FB Комментарии Программирование интерфейса 8004 8005 8006 8007 8008 8009 800A 800B 800C 800D 800E 800F 8010 8011 8012 8013 8014 8015 8016 8017 8018 8019 START ANA B JZ OFF Чтение данных с переключателей в аккумулятор Запись в регистр B маскирующего слова 0000 0100 Выделение второго бита Проверка аккумулятора на нуль MVI A, FF Включение индикаторов IN FA MVI B,04 ON OUT F9 JMP START OF MVI A, 00 Выключение индикаторов OUT F9 JMP START 1.4 Команды сдвига: «бегущий огонь» Примером использования команд сдвига может быть программа реализации «Бегущего огня». Простейший вариант этой программы может быть представлен следующим алгоритмом: - программируем интерфейс; - заносим в аккумулятор код 1000 0000; - выводим содержимое аккумулятора на индикаторы ( при этом определяем петлю задержки, которая обеспечивает медленное изменение состояния индикаторов. Без нее сдвиг происходил бы настолько быстро, что визуально был бы незаметен). Программа, реализующая этот алгоритм, приведена в таблице 4. Таблица 4 Адрес 8000 8001 8002 8003 8004 8005 8006 8007 8008 8009 800A 800B 800C 800D 800E 800F 8010 8011 8012 8013 8014 8015 8016 8017 Содержимое Метка Команда MVI A, 81 Комментарии Программирование интерфейса OUT FB MVI A, 80 1000 0000А MVI D, 40 Загрузка регистров D и E для организации петли задержки MVI E, FF OUT F9 Вывод данных на индикаторы DCR E JNZ LOOP Е-1Е Если Е0, то переход на LOOPпетлю задержки DCR D JNZ LOOP D-1D Если D0, то переход на LOOP- петлю задержки RRC JMP LOAD Сдвиг данных в аккумуляторе Повторение цикла 2 Процесс разработки сложного программного обеспечения. При разработке сложных программ необходимо придерживаться следующей последовательности: - -определить задачу; - принять решение- разделить на функциональные блоки; - составить алгоритм программы; - написать программу; - испытать и отладить каждую команду; - испытать и отладить полную программу. После определения задачи, выбора метода и разделения программы на модули можно приступить к составлению алгоритмов. Обычно составляется общий алгоритм, в котором каждый модуль программы изображается в виде квадрата. Составляются алгоритмы и для каждого модуля. Пример разработки программного обеспечения: Рассмотрим описание программы контроллера «Бегущие огни». Индикаторы выходного порта (светодиоды) используются как имитаторы «бегущих огней». Контроллер должен регулировать следующую последовательность чередования горения светодиодов: 1. Горят светодиоды 1,4, 7, остальные- погашены. 2. Время горения установленных светодиодов. 3. Горят светодиоды 2, 5, 8, остальные- погашены. 4. Время горения установленных светодиодов. 5. Горят светодиоды 3, 6, остальные- погашены. 6. Время горения установленных светодиодов. 7. Повторение процесса (переход к шагу 1). Выходные индикаторы (светодиоды YD1…YD7) подключаются к шине данных с помощью программируемого интерфейса. В таблице 5 показаны используемые комбинации сигналов имитирования «бегущих огней» на светодиодах. Единица в двоичном коде сигнала означает включенный индикатор. Таблица 5 VD1 1 0 0 VD2 0 1 0 VD3 0 0 1 VD4 1 0 0 VD5 0 1 0 VD6 0 0 1 VD7 1 0 0 VD8 0 1 0 Код 92 16 49 16 24 16 Для работы основной программы необходимо разработать подпрограмму, вызывающую задержку. Простейший способ генерирования задержки может быть описан приведенным ниже алгоритмом: 1. Установка счетчика. 2. Уменьшающий счет. 3. Возврат в основную программу. Однако максимальное время задержки, полученное таким способом, не превышает 1785 мкс. Принцип получения более длительной задержки будет приведен ниже. После составления алгоритмов и определения характеристик можно писать программы. Основная программа последовательности довольно проста (Таблица 6). Таблица 6 Метки Команды SEQ Комментарии Установка горения светодиодов 1, 4, 7 Время горения установленных светодиодов MOV A, 92 MVI D,I CALL DELAY Установка горения светодиодов 2, 5, 8 Время горения установленных светодиодов MOV A, 49 MVI D,I CALL DELAY Установка горения светодиодов 3, 6 Время горения установленных светодиодов MOV A, 24 MVI D,I CALL DELAY Программа последовательности устанавливает в регистр А число 92- код выходных индикаторов, при котором светодиоды 1, 4, 7 горят, а светодиоды 2, 3, 5, 6, 8- погашены. Затем вызывает подпрограмму задержки. Для чего программа последовательности заносит в регистр D величину задержки, после чего вызывается сама подпрограмма задержки. Далее эта последовательность повторяется для других кодов выходных сигналов светодиодов. Разработка подпрограммы задержки: приведена подпрограмма задержки, соответствующая описанному выше алгоритму. Таблица 7 Метки DELAY Команды Комментарии Уменьшающий DCR A Примечание 4 такта счет JNZ DELAY RET Продолжение счета, если содержимое аккумулятора 0 Возврат 7/10 такта 10 тактов Чтобы использовать эту программу, в аккумуляторе устанавливается нужное значение задержки и вызывается программа задержки. Содержимое аккумулятора уменьшается до тех пор, пока не достигает нуля, после чего управление возвращается на программу вызова. Время задержки, полученное при выполнении этой программы, можно проанализировать следующим образом: - в примечаниях указано число синхроимпульсов ( тактов), необходимых для выполнения каждой команды; - для DCR A требуется 4 такта. Для JNZ, в случае выполнения условия требуется 10 тактов, если же условие не выполняется- 7 тактов. Для RET требуется 10 тактов. Для каждого прогона по петле задержки потребуется 4+10=14 тактов. Для последнего прогона потребуется 54+7+10=21 такт. Следовательно, уравнение задержки имеет вид: Задержка=(А-1)*14+21 (тактов) Один такт длится 0.5 мкс. Поэтом уравнение можно переписать следующим образом: Задержка=(А-1)*7 мкс+10.5 мкс где А- начальное содержимое аккумулятора. Самая длинная задержка вызывается установкой аккумулятора в нуль. При первом прогоне по петле задержки содержимое аккумулятора уменьшается и мтановится равным 255. Первоначальная установка в нуль эквивалентна тому, что А=256. Следовательно максимальная задержка: Задержка=(156-1)*7 мкс+10.5 мкс=1795 мкс. Для получения более длительной задержки целесообразно применить команды, воздействующие на пары регистров. Программа, использующая пары регистров, приведена в таблице 8. Таблица 8 Метки DELAY Команды DCX B MOV A, B ORA C JNZ DELAY RET Комментарии Уменьшающий счет Проверка на 0 Повторить до 0 Использование команды DCX B, уменьшающей содержимое пары регистров B,C позволяет увеличить счет задержки до значения 2562=65536. Т. к. эта команда не влияет на нулевой флаг МП, то для этого используется команда ORA C.осле этого может быть выполнена команда JNZ. Время задержки, полученное при выполнении этой программы, определяется по формуле, имеющей вид: задержка=(N-1)*24 +31 (тактов)= Задержка=(N-1)*12 мкс+15.5 мкс. Здесь N-начальное содержимое регистров B, C, максимальная задержка=(65536-1)*12+15.5=0.786 с. Такую задержу можно получить, если первоначально занести 0 в регистры B, C. Для получения задержки организуется счетчик в регистре D. Число, первоначально занесенное в этот регистр, определяет, сколько раз выполняется задержка 0.786 с. Максимальная задержка, полученная таким образом, равна 256* 0.786=201 с. В таблице 9 приведена полная программа задержки. Таблица 9 Метки DELAY LOOP Команды LXI B, 0 DCX B MOV A, B ORA C JNZ LOOP Комментарии Начало счета внутренней петли Петля задержки 0, 786 с 1. DCR D Уменьшение основного счетчика и работа по петле, если 0 RET Команда LXI B, 0 заносит 0 в пару регистров B, C. Далее вырабатывается задержка 0.786 с. Регистр D используется для счета основной петли задержки. Внешняя петля генерирует множество таких задержек. Такая организация называется «вложением». 3. Порядок выполнения лабораторной работы Задание 1: Проведем эксперимент по выполнению программы для передачи данных из порта ввода в порт вывода. 1. Введите программу, указанную в таблице 1 2. Начните выполнение программы с адреса 8000. 3. Поставьте тумблер порта ввода в любое положение. Верхнее положение соответствует 1, нижнее – 0. 4. Посмотрите на светодиоды 2-4, считая справа. Они показывают те же данные, которые установлены на тумблерах порта ввода. 5. Измените положение тумблеров порта ввода. Данные порта вывода должны измениться соответственно. 6. Нажмите кнопку СБРОС. Программа остановится, управление перейдет к монитору. 7. Измените положение тумблеров порта ввода. Данные порта вывода не изменятся, так как введенная программа больше не выполняется. Задание 2: Перевести программу из таблицы 2 в машинные коды ( каждое мнемоническое обозначение должно быть преобразовано в соответствующий КОП и дополнено необходимыми данными ( если нужно). 2. Проверить правильность введенной программы. 3. Установить начальный адрес 8000 и нажать кнопку ПУСК. Программа выполняется. 4. Установить входные переключатель в 1. Индикаторы показывают 000 1010. 5. Изменить положение переключателей и проверить соответствующие выходы. Биты, которые 6. объединяются по «И» с нулями, не зависят от положения переключателей. Нажать кнопку СБРОС для возвращения управления монитору. (заметьте, что переключатели не влияют больше на состояние индикаторов. Замените команду ANA B ( по адресу 8008) командой ORA B. 7. Запустить программу снова. Проанализируйте полученные результаты 8. Замените команду ORA B ( по адресу 8008) командой XRA. Повторите шаг 7. Биты, объединенные по «Исключающему ИЛИ» инвертируются. Результаты занесите в отчет, проанализируйте их, сделайте выводы. Задание 3: 1. 2. 3. Переведите программу из таблицы 3 в машинный код и введите в память. Проверьте правильность ввода. Запустите программу и проверьте, что входные переключатели правильно управляют индикаторами. Все индикаторы зажгутся только в том случае, если включен второй переключатель. Состояние остальных переключателей безразлично. Измените программу, чтобы проверить другой переключатель. Задание 4: 1. Переведите программу из таблицы 4 в машинный код и введите данные в ОЗУ. 2. Проверьте правильность ввода программы и запустите ее. На индикаторах появится эффект «бегущего огня» вправо. 3. Замените команду RRC на RLC. В этом случае наблюдается «бегущий огонь» влево. 4. Можно изменить частоту переключения индикаторов, занося в регистр D различные числа. Заменяя код по адресу 8005 можно изменить комбинацию «зажженных огней». Задание 5: 1. Ввести программу из таблицы 9 в ОЗУ аккумулятора; 2. Удостовериться, что она правильно записана в ОЗУ; 3. Выполнить основную программу, начинающуюся по адресу 8000; 4. Посмотреть на изменение времени «пробежки» огней, изменив время задержки. Для того, чтобы выполнить лабораторную работу, необходимо проанализировать составные части программы, и, пользуясь приведенными алгоритмами, составить общую программу для наблюдения «бегущих огней». Приложение 1 Индивидуальные задания к лабораторной работе №1 Индивидуальные данные к заданию 1. Номер варианта 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 Имена регистра AEBCH B4AHC HABDE CDLEA LEHAD EHCDL DLACB AELDC HACLB BHAED CDEBL EALCB LADBC ADECH LHAEB BLEDH DHLAC LDEHA AHEDC LBDAE DEAHC AEBLC CLDAE HBCLE CBADH LACHD ECHBL BADHL CHLDA HELCB Загружаемые данные 10 23 45 67 89 02 14 56 78 91 3A B7 C8 83 90 0A 0B E6 71 9E 0B 2A 7E 74 84 3E 4B 72 3A FE EF 0F 38 43 75 FF EE A4 33 CC 4A 5B 6C 7E 5F 9F 8E 7D 68 53 23 34 45 56 67 33 44 55 66 77 A1 B2 C3 D4 E5 6E 5D 4C 38 2A FF 2E F4 C8 AA FF EE 88 CC DD 22 33 44 8C EF 41 57 69 80 AF 63 72 84 96 A7 72 84 69 15 17 15 A8 98 5D 5F 28 88 99 00 0A 0B A9 C0 F3 E8 C0 A1 AF E4 3F FA EB C0 B4 11 FF 22 AA 33 CC AE CF 54 F8 80 17 29 36 42 50 25 63 84 A0 FD F8 E7 D6 C3 87 . Индивидуальные данные к заданию 2. Номер варианта 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 Имя регистровой пары B D H B D H B D H B D H B D H B D H B D H B Загружаемый операнд 1023 2014 3AB7 0A1B 0B2A 3E4B E038 EA4B 4A5B 9D8E 2334 3344 A182 6E5D 12E DFEE 2233 4157 5372 7284 15A8 2889 23 24 25 26 27 28 29 30 D H B D H B D H 03A9 C0A1 CAEB AC22 AECF 1729 2563 C8E7 Индивидуальные данные к заданию 3 Номер варианта 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 Регистр источник L H H E E D D C C B B A L E H D E C D B C A B L A H A L L D H C E B D A C L B H A E L C H B E A D L C Данные приемник H E E D D C C B B A A L E H D E C D B C A B L A H L L H D E C D B C A B L A H L E H C E B D A C L B H E7 63 29 CF 22 EB A1 A9 88 A8 84 72 75 33 EE 2E 5D B2 44 34 8C 5B EE 0F 4B 2A 27 28 29 30 H B E A D L B H A A E L D H B A A L Индивидуальные данные к заданию 4 Номер варианта 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 Загружаемые операнды 0867 0902 09D8 0878 0883 09A0 0871 0863 09C4 09EA 083A 09C0 0843 0922 08BB 09E7 097E 0DA1 096C 0888 0956 08EB 0966 08AA 08F4 0823 083B 096E 08C8 0923 08CC 0821 088C 0D37 0980 080A 0896 0833 0915 08F1 085D 09CD 0900 09A3 09F3 0887 0DE4 0927 0984 09DF 0933 0815 09F8 085E 0842 08EA 08A0 0902 09C3 09CA Индивидуальные данные к заданию 5 Номер варианта 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Адрес 800 801 802 803 804 805 806 807 808 809 80A 80B 900 902 90A 1B 87 14 BD 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 80C 80D 80E 80F 810 811 812 813 814 815 816 817 818 819 81C Приложение 2 Индивидуальные задания к лабораторной работе №2 Варианты индивидуальных заданий для программирования арифметических операций над восьмиразрядными двоичными числами. Номер варианта 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 Арифметическое выражение A=A+D-M+116 A=A-B+M-116 C=M-116+C+A A=B-C-M+116 H=A-116+D+M B=A+C-116-M L=H-L+M+116 A=A-B-M+116 E=A+B-M-116 L=M-B+116+E H=D-M+116-B B=E+M-C-116 D=M-L+116-B E=116+B-H+M C=116+M-E-D B=E-116+C-D H=D-M+E-116 D=M-116-B+H E=D-B-116+M C=A+E-116+M B=EB16-D-M+116 D=M-116+AB16+C H=A+M-CA16+116 E=A+E-M-116 L=L+M-116-A C=A-C-116+M E=B+L-116-M A=M-L+116+E L=H+M-E-116 D=A+116-L-M Данные 7A 02 3C B3 63 CE 91 E2 53 C4 3A 1E 87 56 0A 4C 70 64 8F 31 E5 6B 4C 0F 2D AE 41 7D 24 78 DD A0 0F 1E 7B 42 F3 3D 17 A7 53 CD D9 19 3B 9B 2C 43 8E 2D 6A 69 3B 47 B1 07 3F 5B 3E 0C 4A 1C 5D 9A 3F 23 4D 5A 1F A6 03 54 9A 37 4C BD 0A 36 F0 7D 28 A4 3B CF F3 5C 3E Варианты индивидуальных заданий для программирования арифметических операций над шестнадцатиразрядными двоичными числами. Номер варианта 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 Арифметическое выражение HL+BC+DE BC+DE+HL DE+BC+HL HL+DE+BC DE+HL+BC BC+HL+DE HL+HL+BC HL+BC+HL BC+HL+HL HL+HL+DE HL+DE+HL DE+HL+HL BC+BC+HL BC+HL+BC HL+BC+BC DE+DE+BC DE+BC+DE BC+DE+DE BC+BC+DE BC+DE+BC DE+BC+BC DE+DE+HL DE+HL+DE Начальный адрес 9OA 9OC 9OE 910 912 914 916 918 9A0 9A2 9A4 9A6 9A8 9AA 9AC 9AE 9B0 9B2 9B4 9B6 9B8 9BA 9BB Данные 1000 34A0 2200 1010 350A 0202 1100 530A 0022 2113 A035 0B57 2010 AC75 A37B 1911 4607 64C4 1809 5E13 31F8 1707 F0C4 4C6B 1505 14EA BE2D 1303 7742 2E7D 1401 F00A EADF 12A1 24B7 CBEE 111B 71D3 4E3F 137A DC35 487A 1716 B391 4E9C 16AC 34C2 19B9 1009 A6D2 C3E8 10CB 74B3 7396 12AA F370 AE1B 219E C0E3 ABB5 12C8 C1A4 6B8F 148A B113 A9D5 166B 32F3 BD72 24 25 26 27 28 29 30 HL+DE+DE DE+BC+1 HL+1+DE 1+BC+HL DE+HL+1 HL+1+BC 1+BC+DE 9BC 9BE 9C0 9C2 9C4 9C6 9C8 BA8E F1A5 4803 AC01 453E A67B A6C9 2153 41E7 20EC 9C6A F1B3 3F8B 02AC BA86 8F7F EF1A F1B7 9081 57CA B6C4 Приложение 3 Индивидуальные задания к лабораторной работе №3 Варианты индивидуальных заданий для программирования логических операций над восьмиразрядными числами. Номер варианта Функции алгебры логики Данные A=(Av7B16^M)+(B^C) B=M^Cv(A+016vB) C=A+BvCE16^M+L Адрес ячейки памяти 9OA 9OC 9OE 1 2 3 4 D=M^(A+B)^CF16vC 910 16 49 7F B5 5 6 E=9716vA^(M+B)vC 912 914 18 4B 0C B2 1A 40 76 4B 916 918 9A0 1C 4E 09 07 5 50 4E BA 2F 52 BA E2 21 23 25 A3 0E H=AB+M^E816^C L=BvM+C^7F16vA A=MvH^L+(2716^B) 7 8 9 B=BC16AvM+(E^B) 10 43 7A 60 12 54 7C 62 14 47 7E 20 10 11 12 13 14 C=EE16A+BvM H=M(E+6516)^B+C L=(C316vA)+M^HvB 9A2 9A4 9A6 9A8 9AA 15 A=M+B^Av2F16+C 9AC 2A 45 60 1E 16 17 18 19 20 B=M^C816v(A+B)vC C=1C16vA^B+C^M D=(A^M^4516vB)+C E=B+A116+CvM H=AE16vB^C+M 9A1 9A3 9A5 9A7 9A9 10 C4 12 41 34 21 22 L=7716^M^Av(B+C) A=BvC^M+(F716vE) 9B0 9B2 36 07 38 76 23 24 B=C^6A16vA+M+B C=A^Mv(B+5F16)vC 9B3 9B1 3A 6 92 0C 3C 79 BE A4 25 26 D=M^(AA16Va)+BvC E=A+B^CvCC16^M 9B4 9B5 7B C8 20 43 C0 72 B1 55 27 28 H=M+AvBv3516vC 9B9 9B6 C4 F2 71 28 04 3A 21 4C 9B8 9B7 13 49 1C E6 18 4E CA EB D=A1A16+MvB^C E=B+A^C+M^FF16 L=CvAB+M+AF16 A=4116+A+MvB^C B=C16vMvA^(B+C) 29 30 6A 6B 58 5B 29 B2 21 C3 CB 7C 85 86 8F 27 44 46 63 41 96 F8 83 8 0A 23 5F BA EC AB 7E AA C8 12 B6 AC Варианты индивидуальных заданий для программирования логических операций над шестнадцатиразрядными числами. Номер варианта 1 2 Функции алгебры логики BC=BCv0E16vHL DE=BC^HL+DE Данные CAEB E481 C425 6EC1 9432 0438 3 4 5 6 7 HL=(BCvDE)+HL BC=BC^(DEvHL) DE=BCvDE^HL HL=BCvHL+DE BC=BC+DE^HL C412 5513 3402 4AEB C092 8 DE=BC^HL+DE CAB6 9 HL=BCvDE+HL 218C 7063 E2F3 A340 270C 8CB7 97C3 6A3 49AB 2A38 053A 822A 79BE 6783 2B9B 10 BC=BCvE+H AA8F C743 FCB9 11 12 DE=HLvBC^DE HL=HLvDE+BC E769 BC14 A1D7 BA14 3C21 AF0C 13 14 15 BC=HL^DE+BC DE=HLvDE+BC HL=BC+DE^HL CE36 124C 8A4 AB64 2B01 C930 E106 54A2 CC70 16 17 18 19 20 BC=BCvDEvHL DE=BC+DEvHL HL=BC+DE^HL BC=BC+DE^HL DE=BC+DE^HL F544 3272 A0F8 868 B858 92E0 B53A 8552 B632 A612 A 28 4 FF 2A03 1BEA 2FEA 21 22 23 24 25 26 HL=BCvHL^DE BC=BC^HL+DE DE=BCvDEvHL HL=HLvBC^DE BC=HL+BC^DE DE=HLvDE^BC 2EAB ABE4 B467 2BC0 5BF7 02E7 25F1 05 5 4A1 B481 9461 4741 6F74 1353 AEBC C F1 04B8 2BB4 27 28 HL=HL+BC+DE BC=DEvHL^BC 26C7 4521 3EA0 06A7 3401 8AC3 29 30 DE=BCvHL^DE HL=HL+BC+DE 51BE 025C F 24 0CC7 9 67 F8AA Варианты индивидуальных заданий для программирования операций сравнения двоичных чисел. Номер варианта 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 Регистр B C D E H L B C D E H L B C D E H L B C D E H L B C D E H L Адрес ячейки памяти M 9B8 9A2 9B7 9A0 9B6 918 9B9 916 9B5 914 9B4 912 9B1 910 9B0 90E 9A9 90C 9A7 90A 9A5 9A4 89A 89B 89C 89 89E 89F 900 903 Приложение 4 Индивидуальные задания к лабораторной работе №4 Варианты индивидуальных заданий для программирования сложения ряда чисел N п/п NNNN DDDD Исходный ряд чисел 1 8203 832F 12, 23, 1D, 2F, 19, 3D, 0F 2 8132 8263 26, 36, 2F, 3D, 22 3 8233 8553 24, 1A, 29, 31, 42, 0D 4 8317 8400 2E,1D, 35, 27, 1C 5 8267 8154 39, 34, 0D, 1F, 3C, 21 6 8102 8300 34, 24, 45, 2C, 23 7 8430 8521 62, 1D,1C,1A,1E, 24 8 8100 832D A4, IF, 23, 0D 9 8523 8200 17, 25, 3D, 1A, 23, 41 10 8423 8145 27, 2F, 1A, 3D, 09 11 841D 8323 24, 12, 2A, 32, 07, ID 12 8705 8305 21, 36, 18, ЗА, 12, 1E 13 8320 8100 13, 35, 2A, 2D, 2F, 19 14 831F 8053 14, 34, 23, 3В, IF 15 8424 812А 11, 21, 31, 23, 41, 0D 16 8503 8401 ЗА, 24, 4А, 16, 14, 07 17 8204 8312 2F, 2A, 2D, 2C, 2E 18 843F 8700 14, 25, 3А, 2D, 48, OF 19 8303 8500 61,2F, ID, 1A,2D, IF 20 8319 8473 23, 43, 2F,1D, 2E 21 81FA 831С 3А, 3D, 2A, 11, 18, 04 22 8316 8400 31, 08, 3F, 24, 5А, 11 23 8306 8419 11, 45, 34, 43, 1E 24 8003 8520 38, 2F, 4А, 23, 19, 08 25 8302 8408 24, 16, 07, 2F, 41, 2E Варианты индивидуальных заданий для программирования сложения длинных чисел N п/п NNNN DDDD F1 – первое слагаемое F2 - второе слагаемое 1 8165 8231 12A3DE 23D6A8 2 8234 8421 A4E6FF 18D5A4 3 8110 8311 35D6E5 8567Е4 4 8200 8012 AD3312 342ЕА6 5 8234 8500 E6D556 D34520 6 8100 8435 E4A5D2 3F56A5 7 8131 8015 86DE54 9A56D3 8 8310 8200 D46618 341198 9 8402 8300 37Е529 19075D 10 8238 8423 539АЕ7 76D5A3 11 82А4 831F 8D45F1 D3E45C 12 8209 8410 4В56С4 А41209 13 80АЕ 8126 7DAED2 1F549A 14 8239 8100 3FDD24 96F235 15 8450 8502 73550F 23097Е 16 8005 8412 DE5319 1120F8 17 8403 8509 9F5CD7 4980DE 18 8201 8321 9302F4 18DAF3 19 8111 8300 83041F 1EF5D5 20 8415 8500 D63690 2017АЕ 21 8152 8542 350971 5AE6DD 22 82F3 81ED 3290D5 56DEAF 23 854D 8203 4539DE 3216D7 24 8398 82АЕ EF2890 1078DE 25 8502 8124 2605ED 54DEA6