Рижский Технический университет Лабораторные работы по основам микропроцессорной техники Даугавпилс - 1991 г -1- КРАТКОЕ ОПИСАНИЕ ПОДГОТОВКА УМК К РАБОТЕ УЧЕБНОГО МИКРОПРОЦЕССОРНОГО КОМПЛЕКТА 1. Установите кнопку "~" в отжатое состояние. 2. Подключите УМК к сети переменного тока 220 В 50 Гц. 3. Переключатель "РВ/ШГ" установите в состояние "РБ". 4. Включите УМК, нажав кнопку "~". 5. Нажмите кнопку "СБ". При этом в крайней левой позиции дисплея должен появиться знак "-". После чего УМК готов к работе. ПОРЯДОК РАБОТЫ I. Описание клавиатуры. Управляйте работой УМК с помощью директив, вызываемых с клавиатуры пульта. Клавиатура состоит из. 24 клавиш. Из них 8 клавиш директивные, а 16 информационные. Директивные клавиши служат для вызова директив и имеют следующие обозначения: "П" - чтение и изменение содержимого памяти; "РГ" - чтение и изменение содержимого регистров микропроцессора; "ОТ" - передача управления программе пользователя; "КС" - определение контрольной суммы массива памяти; "ЗК" - заполнение массива памяти константой; "ПМ" - перемещение массива памяти в адресном пространстве; "_" - клавиша пробела служит для разделения нескольких переменных при вводе; "ВП" - выполнить (означает конец директивы). . Информационные клавиши служат для ввода чисел в шеснадца-тиричном коде. При неправильной работе с клавиатурой в крайней правой позиции дисплея индицируется знак "?". 2. Индикация и изменение содержимого памяти. Для индикации содержимого ячейки памяти последовательно нажмите клавиши: "П" XI X2 X3 X4 "_", где XI Х2 Х3 Х4 - шестнадцатеричный адрес нужной ячейки. В качестве адреса фиксируются последние введенные 4 цифры. На дисплее при этом появится введенный адрес и содержимое ячейки памяти с этим адресом. Если необходимо изменить содержимое этой ячейки памяти, то следует набрать новое содержимое и нажать клавишу "_". В качестве нового содержимого фиксируются 2 последние цифры. После этого новое содержимое запишется в память, а на экране высветится адрес следующей ячейки и ее содержимое. Если же содержимое ячейки памяти менять не следует, то новое содержимое не вводится, а сразу нажимается клавиша "_" Когда все нужные ячейки памяти просмотрены и изменены нужно нажать клавишу "ВП". При этом прекращается действие директивы "П". 3. Индикация и изменение содержимого регистров. Нажмите клавишу "РГ", а затем идентификатор регистра. Идентификаторами регистров являются символы: А - регистр А в - регистр в с - регистр с D - регистр D Е - регистр Е н - регистр н L - регистр L F - регистр условий SL - младший байт указателя стека SH - старший байт указателя стека PL - младший байт счетчика команд PH - старший байт счетчика команд Ответом на ввод идентификатора регистра является индика- -2- ция содержимого указанного регистра. Для изменения содержимого регистра наберите новое значение. После этого нажмите клавишу "_" и можно вводить идентификатор следующего регистра. При необходимости перехода к следующему регистру без изменения Содержимого индицируемого, не набирая новых данных, нажмите клавишу "_". для завершения работы директивы нажмите клавишу "ВП". 4. Передача управления программе пользователя. Нажмите последовательно следующие клавиши: "СТ" АДРЕС1 "_" АДРЕС2 "_" АДРЕСЗ "ВП", где АДРЕС1 - начальный адрес программы; АДРЕС2 и АДРЕСЗ - адреса выполнения прерывания программы . Производится передача управления программе по адресу АД-РЕСГ. АДРЕС2 и АДРЕСЗ воспринимаются как адреса до которых должна выполняться программа, и должны находиться в пределах границ ОЗУ. Если они отсутствуют, то выполнение программы не прерывается. 5. Пошаговое выполнение программ пользователя. Имеется две разновидности пошагового выполнения программы: поцикловый режим и покомандный режим. Поцикловый режим в данных работах не используется. Для вызова пошагового режима: - установите переключатель "РБ/ШГ" в состояние "Ж1". При этом происходит подключение световой индикации; - переключатель "КМ/ЦК" установите в состояние "КМ"; - передайте управление выполняемой программе. После этого на световой индикации отобразятся начальный адрес программы, данные по этому адресу и содержимое регистра состояния. Для выполнения очередной команды программы нажмите кнопку "ШГ". -3- КРATКОЕ ОПИСАНИЕ УЧЕБНОЙ МИКРОЛАБОРАТОРИИ "МИКРОЛАБ" ПОРЯДОК РАБОТЫ 1. Органы управления и контроля. Все органы управления прибора расположены на плате. Назначение каждой клавиши приведено ниже. СБРОС - сброс системы и возврат к монитору в любой момент времени;' АД+ - приращение адреса на единицу и считывание данных из памяти; АД— уменьшение адреса на единицу и считывание данных из памяти; УСТ.АД. - установка адреса и считывание данных из памяти; ЗП - Запись данных в память и приращение адреса на единицу; BOЗBP - возвращение к выполнению программы, начатой по команде ПУСК; ПУСК - выполнение программы с индицируемого адреса; 0-9, А - F - ввод данных в шестнадцатеричном коде; ВВОД и ВЫВОД - ввод данных с магнитофона и вывод данных на магнитофон ( в лабораторных работах не используются ). 2. Устройство индикации. Выходным устройством, служащим для визуального наблюдения за внутренним состоянием системы, являются восемь восьмисегментных индикатора. На них индицируются входные данные, адреса памяти, данные памяти, содержимое регистров и флагов ЦП. Левые четыре индикатора являются индикаторами адресного регистра (MAP) и служат для вывода адреса. Правые четыре индикатора являются индикаторами регистра данных (ИРД) и служат для вывода данных. 3. Индикация и изменение содержимого памяти. Наберите с помощью клавиш данных нужный адрес памяти. При этом этот адрес индицируется на ИРД (правые четыре индикатора). После набора нужного адреса нажмите клавишу УСТ.АД. При этом адрес записывается в ИАР (левые четыре индикатора). Данные из ячейки памяти с адресом, соответствующим ИАР, высвечиваются в двух крайних правых позициях ИРД. Данные, высвечиваемые в этих позициях ранее, сдвигаются на две позиции влево. Если данные по набранному адресу менять не нужно, то для перехода к следующему адресу нажмите кнопку АД+. При этом в ИАР появится следующий адрес, а в крайних правых позициях ИРД появится содержимое этого адреса. При нажатии на клавишу АД- на индикаторах высвечивается предыдущий адрес и его содержимое. Если данные в текущем адресе нужно изменить, то наберите новые данные и нажмите клавишу ЗП. При этом новые данные записываются в память по текущему адресу, а на дисплей выводится следующий адрес и его содержимое. -4- 4. Индикация и изменение содержимого регистров. Индикация и изменение содержимого регистров осуществляется путем индикации и изменения содержимого определенных ячеек памяти.. Ниже приведены адреса ячеек памяти, используемых для временного хранения значений регистров. 83ЕВ - аккумулятор; 83ЕА - флаговый регистр; 83Е9 - B-регистр; 83Е8 - C-регистр; 83Е7 - D-регистр; 83Е6 - Е-регистр; 83Е5 - H-регистр; 83Е4 - L-регистр; 83ЕЗ - указатель стека (старший байт); 83Е2 - указатель стека (младший байт); 83EI - программный счетчик (старший байт); 83Е0 - программный счетчик (младший байт). Для изменения содержимого регистра измените содержимое соответствующей ячейки памяти. Новое содержимое будет записано в регистр при запуске программы пользователя или при выполнении очередного шага в пошаговом режиме. 5. Передача управления программе пользователя. Для запуска программы установите в MAP ее начальный адрес и нажмите клавишу ПУСК. Программа пользователя может оканчиваться командами HLT или JMP 0008. Команда HLT останавливает работу процессора. После ее выполнения нужно нажать клавишу СБРОС. Команда JMP 0008 передает управление программе Монитор, управляющей системой. После ее выполнения система ждет новых команд. После выполнения команд HLT и JMP 0008 содержимое регистров процессора изменяется, а содержимое ОЗУ пользователя остается прежним. 6. Работа в пошаговом режиме. Для работы в пошаговом режиме переключатель "АВТ/ШАГ" установите в положение "ШАГ". Запуск программы производится обычным образом. Но выполнится только одна команда программы. На MAP высветится адрес следующей команды. На двух левых индикаторах ИРД высветится содержимое аккумулятора, а на двух правых - содержимое регистра флагов. Перед выполнением следующего шага можно просмотреть и изменить содержимое регистров и ячеек памяти, если это требуется. Следующая команда выполняется после нажатия на клавишу ВОЗВР. -5- ЛАБОРАТОРНАЯ РАБОТА №1 ВВОД И ВЫПОЛНЕНИЕ ПРОГРАММЫ 1. Цель работы. - освоить порядок ввода программ в УМК и "Микролаб", ее модификации и выполнения; - освоить запись информации в двоичной и шеснадцатиричной системах счисления; - ознакомиться с записью программ на языке ассемблера. 2. Описание лабораторной установки. Работа может проводится на УМК или "Микролабе" без дополнительных устройств. 3. Домашняя подготовка. 3.1. Ознакомиться с представлением чисел в двоичной и шестнадцатеричной системах счисления. 3.2. Ознакомиться с принципами управления дисплеями УМК и "Микролаба"(См. Приложение I). 3.3. Ознакомиться с записью программ на языке ассемблера. 3.4. Изучить назначение клавиш на клавиатурах УМК и "Микролаба". 3.5. Продумать действия по включению микропроцессорных комплектов, вводу в их ОЗУ кодов и выполнению введенных программ. 4. Рабочее задание. 4.1. Ввести в оперативную память следующую программу: а) для УМК 0600 0802 0804 0806 0808 3E D3 3Е D3 76 22 F8 06 F9 MVI OUT MVI OUT HLT А,22 P8 А,06 F9 MVI STA STA MVI STA STA STA STA STA STA HLT А,06 83F9 83FF А,00 83F8 83FA 83FB 83FC 83FD 83FE б) для "Микролаба" 8000 8002 8005 8008 800А 800D 8010 8013 8016 8019 801C 3Е 32 32 3Е 32 32 32 32 32 32 76 06 Р9 FF 00 F8 FА FВ FC FD FЕ 83 83 83 83 83 83 83 83 4.2. Выполнить введенную программу. В результате выполнения программы на дисплее должна вывестись цифра "1" на двух индикаторах. Запишите номера этих индикаторов, считая слева. -6- 4.3. Составьте семисегментный код высвеченной цифры, пользуясь приложением I. Найдите этот код в программе. 4.4. Составьте семисегментный код знака, указанного преподавателем. Измените программу так, чтобы на дисплей выводился этот знак. Проверьте работу измененной программы. 4.5. Измените программу так, чтобы знак высвечивался в индикаторах, указанных преподавателем (См. Приложение I). 4.6. Составьте программу для высвечивания на дисплее двух различных знаков, указанных преподавателем. а) для УМК: Программа может иметь следующую структуру: - 4 команды для первого знака, выводимого в первый индикатор; - блок из трех команд очистки регистров дисплея 3Е 00 D3 F8 D3 F9 MVI А,00 OUT F8 OUT F9 - 4 команды для высвечивания второго знака на втором индикаторе; - 3 команды очистки; - переход к началу программы С3 00 08 JMP 0800 б) для "Микролаба" структура программы аналогична первоначальной. -7- ЛАБОРАТОРНАЯ РАБОТА N2 МОДИФИКАЦИЯ ПРОГРАММ 1. Цель работы. Получить навыки по программированию на языке ассемблера 2. Описание лабораторной установки. В лабораторной работе используется УМК, к которому подключено устройство вывода информации - восемь светодиодов или "Микролаб" без дополнительных устройств. 3. Домашняя подготовка. 3.1. Изучить приведенную ниже программу и уяснить действия, выполняемые каждой командой (См. Указания и методические рекомендации). 3.2. Продумать, как нужно изменить программу, чтобы в результате ее выполнения на устройстве вывода наблюдался эффект одиночного "бегущего огня". 3.3. Продумать, как изменить программу, чтобы она работала с другого начального адреса. 0160 0162 0164 0166 0168 016А 016С 016D 0170 0171 0174 0175 0176 данные aдpecl адрес2 3Е D3 3Е D3 06 0Е 0D C2 05 С2 07 3С С3 данные адрес1 01 адрес2 FF 64 6С 01 6А 01 66 01 для УМК 90 93 91 Исходная MVI OUT MVI М1: OUT MVI М2: MVI M3: DCR JNZ DCR JNZ RLC INR JMР программа A, данные ; программирование адрес1 ; интерфейса А,01 ; загрузка позиции aдpec2 ; индикации B,FF ; блок С,64 ; команд С ; создания МЗ ; задержки В ; на время М2 ; индикации ; сдвиг влево А ; увеличение (А) на 1 M1 ;индикация следующего ; состояния для "Микролаба" 81 FB F9 4. Рабочее задание. 4.1. Ввести в ОЗУ исходную программу с начального адреса из таблицы вариантов и проверить ее работу. 4.2. Внести в программу такие изменения, чтобы она действовала согласно вашему варианту (См. таблицу вариантов). В таблице вариантов указаны два последовательных состояния индикаторов и начальный адрес программы для УМК и "Микролаба" . 5. Указания и методические рекомендации. Рассмотрим текст программы. Первые две команды производят программирование интерфейса (См. Приложение 3). Затем в аккумулятор -8- заносится код, определяющий какие позиции светодиодного индикатора должны светиться. Здесь этот код равен 01 (в двоичном виде 00000001). Это означает, что светиться должен только один правый светодиод. Далее следует команда вывода этого кода через интерфейс на светодиодный индикатор. Чтобы состояние индикатора какое-то время сохранялось неизменным в программе создана задержка времени. Для создания задержки программа имеет два вложенных цикла. Перед началом внешнего цикла в регистр В заносится число FF16 = 25510, а перед началом внутреннего цикла в регистр С заносится число 6416 = 10010. Далее содержимое регистра С уменьшается на единицу. Если результат не равен О, то содержимое регистра С снова уменьшается на единицу. Таким образом внутренний цикл выполняется 100 раз. Когда же ТАБЛИЦА ВАРИАНТОВ адрес "Микролаб" N индикация I 10000000 01000000 0800 8000 2 11000000 01100000 0820 8020 3 11000000 00110000 0840 8040 4 01111111 10111111 0860 8060 5 10100000 01010000 0880 8080 6 00011011 00110110 08A0 80A0 7 00000001 00000010 08C0 80C0 8 00001111 00011110 08E0 80E0 9 00110011 01100110 0900 8100 10 00000001 00000100 0920 8120 УМК содержимое регистра С станет равным нулю, уменьшается на единицу содержимое регистра В и вновь 100 раз будет выполнен внутренний цикл. Это будет продолжаться до тех пор, пока содержимое регистра В не станет равным нулю. Таким образом внутренний цикл будет выполнен 25 500 раз. В течение этого времени выведенная на светодиоды информация не меняется. После задержки командой RLC единица из правого разряда сдвигается на одну позицию влево, а командой INR А к содержимому аккумулятора добавляется единица, тем самым появившийся в правой позиции 0 заменяется на I. После этого код из аккумулятора вновь выводится на -9- индикатор. Теперь уже будут светиться два правых светодиода. Когда таким образом единицами будут заполнены все разряды числа, очередная команда циклического сдвига RLC уже не приведет к появлению нуля в правом разряде. А последующее увеличение числа 11111111 на единицу даст в итоге нули во всех разрядах и весь описанный процесс начнется с начала. -10- ЛАБОРАТОРНАЯ РАБОТА N3 АРИФМЕТИЧЕСКИЕ И ЛОГИЧЕСКИЕ КОМАНДЫ МИКРОПРОЦЕССОРА 1. Цель работы. Изучить арифметические и логические команды микропроцессора. 2. Описание лабораторной установки. В работе используется УМК с устройством вывода информации из восьми светодиодов или "Микролаб" без дополнительных устройств. 3. Домашняя подготовка. 3.1. Изучить основные арифметические и логические команды микропроцессора. 3.2. Теоретически исследовать ход выполнения приведенной программы. Перепишите программу в протокол. Определите состояние аккумулятора после выполнения процессором каждой команды и запишите его рядом с каждой командой в двоичной и шестнадцатиричной формах. Исследуемая программа MVI ОUТ MVI OUT ORI OUT MOV OUT ADD OUT SUI OUT CMA OUT ANI OUT ORA OUT INR OUT HLT данные1 aдpecl адрес2 для УМК 90 93 91 А, данные1 адрес1 A, данные2 адрес2 11 адрес2 В,А RLC aдpec2 В aдpec2 05 адрес2 aдpec2 F0 aдpec2 В aдpec2 A aдpec2 для "Микролаба" 81 FВ F9 В качестве данных2 взять последние две цифры Вашего студенческого билета. Считать их двухзначным шестнадцатиричным числом. -11- 4. Рабочее задание. 4.1. Перевести программу из мнемонической записи в машинные коды. Для этого воспользуйтесь Приложением 2. 4.2. Введите программу в ОЗУ. 4.3. Запустите программу в пошаговом режиме. После выполнения каждой команды OUT сравнить состояние светодиодов с двоичным числом, определенным при домашней подготовке. В случае несоответствия найти и устранить ошибку. 5. Указания и методические рекомендации. Для выполнения программы в пошаговом режиме на УМК нужно нажать кнопочный переключатель "РБ/ШГ", после чего запускается директивой СТ. Для выполнения очередной команды надо нажать кнопку "ШАГ". Для выполнения программы в пошаговом режиме на "Микролабе" тумблер "АВТ-ШАГ" устанавливается в положение "ШАГ". Затем устанавливается начальный адрес программы. Программа запускается командой "ПУСК". Теперь после каждого нажатия кнопки "ВОЗВР" выполняется одна команда. -12- ЛАБОРАТОРНАЯ РАБОТА N4 СЛОЖЕНИЕ И ВЫЧИТАНИЕ МНОГОБАЙТОВЫХ ЧИСЕЛ 1. Цель работы. Ознакомиться с принципами работы с многобайтовыми числами. 2. Описание лабораторной установки. В работе используется УМК или "Микролаб" без дополнительных устройств. 3. Домашняя подготовка. 3.1. Изучить программу сложения многобайтовых чисел. 3.2. Продумать, как изменить программу для вычитания многобайтовых чисел и сложения двоично-десятичных чисел. 4. Рабочее задание. 4.1. Выполнить вручную действия по сложению и вычитанию двух шестнадцатеричных чисел и сложению двух десятичных чисел, указанных преподавателем. 4.2. Перевести программу в машинные коды. 4.3. Ввести в ОЗУ программу сложения многобайтовых чисел. 4.4. Ввести в ОЗУ заданные шестнадцатеричные числа, запустить программу и определить результат вычислений. Сравнить его с засчитанным вручную. 4.5. Внести в программу изменения, необходимые для выполнения операции вычитания двух многобайтовых чисел и повторить пункт 4.4. 4.6. Внести в программу изменения, необходимые для выполнения операции сложения чисел в двоично-десятичном коде. Ввести в ОЗУ заданные десятичные числа и запустить программу. Сравнить результат с рассчитанным вручную. Программа Сложения многобайтовых шестнадцатеричных чисел LXI B,N1 LXI Н,N2 ORA А M1: LDAX В ADC М STAX В DCR D JZ M2 INX В INX Н JMP M1 M2: HLT ; загрузить адрес N1 в регистры ВС ; загрузить адрес N2 в регистры HL ; очистить бит переноса ; загрузить в аккумулятор байт из ячейки N1 ; сложить с байтом из ячейки N2 и с переносом NOP ; запомнить результат по адресу N1 ; определить число оставшихся байтов ; прекратить вычисления, если (D) = 0 ; адрес следующего байта 1-го числа ; адрес следующего байта 2-го числа ; перейти к сложению следующих байтов N1 и N2 - начальные адреса операндов. Их можно выбирать произвольно в адресном пространстве ОЗУ ( для УМК 0800 - 0BFF, для "Микролаба" 8000 - 83С6 ). Нужно лишь следить, чтобы области памяти, где хранятся коды команд и два многобайтовых числа не пересекались. Перед запуском программы в регистр D должно быть записано число байтов -13- операндов. 5. Указания и методические рекомендации. При работе с микропроцессором часто оказывается, что длина слов, с которыми он оперирует, недостаточна для достижения нужной точности вычислений. 8-разрядные микропроцессоры позволяют использовать числа в диапазоне от -128 до +127. Очевидно, что для большинства задач такой диапазон неприемлем. Используя два байта, получим диапазон от -32 768 до +32 767. В этом случае ошибка представления чисел оценивается ± 0.0015%. Однако, иногда требуется еще более высокая точность. Такую точность можно достичь, используя числа, представленные необходимым числом байт. Для действий над многобайтовыми числами необходимы специальные программы. Подобная программа исследуется в данной работе. Сложение многобайтовых чисел проводится поэтапно. Сначала складываются младшие байты чисел. Результат сложения нужно запомнить в памяти. Затем складываются следующие по старшинству байты чисел. При этом нужно учитывать, что при сложении младших байтов мог возникнуть перенос. То есть сложение нужно производить еще и с признаком переноса. Результат этого сложения тоже запоминается и осуществляется сложение следующих байтов. Эти операции продолжаются пока не будут сложены все байты чисел. Сложение производится командой ADC, которая осуществляет сложение двух байтов с признаком переноса. Так как при сложении младших байтов никакого переноса еще быть не может, признак переноса очищается командой ORA А. Младшие байты складываемых чисел помещаются в ячейки с адресами N1 и N2. Следующие байты этих чисел занимают ячейки с более старшими адресами. Для вычитания многобайтовых чисел можно использовать эту же программу, но вместо команды сложения ADC использовать команду вычитания SBB. Для сложения двоично-десятичных чисел после каждого сложения нужно проводить операцию десятичной коррекции. Эта операция осуществляется командой DAA, которая добавляет число 6 к младшей тетраде ( 4 бита ) результата, если ее значение больше 9 или был перенос из младшей тетрады в старшую. Затем то же самое команда DAA проделывает со старшей тетрадой результата. Перед сложением или вычитанием чисел в регистр D поместить количество байт операндов. В УМК для этого можно воспользоваться директивой "РГ". Например запись числа 5 в регистр D осуществляется нажатием следующих клавиш: РГ D 05 ВП В "Микролабе" такой директивы нет. Здесь количество байт можно занести в регистр D программным путем. В этом случае первой командой программы должна быть команда MVI D, данные где данные - количество байтов многобайтовых операндов. Другой способ занести в нужный регистр данные описан в Кратком описании "Микролаба". -14- ЛАБОРАТОРНАЯ РАБОТА N5 РАБОТА С МАССИВАМИ ДАННЫХ 1. Цель работы. Получить навыки в написании программ на языке ассемблера по заданному алгоритму. Освоить работу с массивами данных. 2. Описание лабораторной установки. В работе используется УМК или "Микролаб" без дополнительных устройств. 3. Домашняя подготовка. 3.1. Изучить алгоритм программы нахождения максимального числа из массива. 3.2. Составить программу на языке ассемблера для нахождения максимального числа в массиве. 3.3. Изучить алгоритм программы суммирования массива данных. 3.4. Составить программу на языке ассемблера для суммирования массива данных. 4. Рабочее задание. 4.1. Перевести программу нахождения максимального числа в массиве данных в машинные коды. 4.2. Ввести в ОЗУ коды команд и данные и выполнить программу. Проверить результат. 4.3. Определить вручную сумму чисел массива. 4.4. Перевести программу суммирования массива данных в машинные коды. 4.5. Ввести программу в ОЗУ и запустить ее на выполнение. Проверить результат. 5. Указания и методические рекомендации. Часто при работе с микропроцессором приходится иметь дело с обработкой массива данных. В данной работе исследуются две операции с массивами : нахождение максимального числа в массиве и суммирование членов массива. Первая составленная программа должна найти максимальное число в массиве из известного числа байт и занести его в ячейку с адресом N2. Сам же массив располагается в ячейках, начиная с адреса N1. Поиск максимального числа осуществляется пересылкой первого числа массива данных из памяти в аккумулятор с последующим его сравнением с остальными числами массива. Как только появляется число, которое больше числа в аккумуляторе, то это число пересылается в аккумулятор и продолжается сравнение уже этого числа с числами, размещенными в массиве за ним. -15- Алгоритм программы, решающей эту задачу может выглядеть следующим образом: 1) Организовать счетчик циклов. Для этого можно использовать любой регистр, кроме аккумулятора и пары HL, которую удобно использовать для косвенной адресации членов массива. Следует учесть, что в выбранный регистр нужно занести число на единицу большее числа данных в массиве. 2) Организовать косвенную адресацию. Занести в пару HL адрес начала массива. 3) Переслать в аккумулятор байт из ячейки памяти, адрес которой в HL. 4) Уменьшить на единицу число в счетчике циклов. 5) Если число в счетчике равно 0 перейти к пункту 10. 6) Увеличить адрес данных. 7) Сравнить содержимое регистра со следующим байтом данных. Для сравнения можно использовать команду СМР М. Если данные в памяти больше чем содержимое аккумулятора, то бит переноса устанавливается этой командой в "1". 8) Если (А) меньше данных, перейти к пункту 3. 9) Переход к пункту 4. 10) Переслать максимальное число из аккумулятора в память. 11) Конец программы. Вторая программа должна просуммировать все числа в массиве, начальный адрес которого N1. Определено, что в массиве М чисел, и их сумма не превышает двух байтов. Сумму нужно разместить в 2-х рядом расположенных ячейках памяти с начальным адресом N2. Известное число членов массива дает возможность организовать циклы суммирования, создав для этого счетчик циклов (например, регистр С). Для хранения младшего байта промежуточных сумм и конечной суммы выгодно использовать аккумулятор, а для хранения старшего байта один из регистров общего назначения (например, регистр В). Данные следует суммировать последовательно с младшим байтом суммы и при каждом суммировании определять отсутствие или наличие переноса. При наличии переноса старший байт суммы следует увеличить на единицу. Для пересылки данных из памяти в аккумулятор целесообразно использовать косвенную адресацию при помощи регистровой пары HL. Алгоритм программы может выглядеть следующим образом: 1) Обнулить регистр хранения младшего байта суммы. 2) Обнулить регистр хранения старшего байта суммы. 3) Организовать косвенную адресацию данных. 4) Сложить данные с младшим байтом промежуточной суммы. 5) Если нет переноса, перейти к пункту 7. 6) Увеличить старший байт суммы на единицу. 7) Увеличить адрес данных. 8) Уменьшить число в счетчике циклов. 9) Если счетчик циклов не равен 0, то перейти к п.4. 10) Переслать младший байт суммы в память. 11) Переслать старший байт суммы в память. -16- ЛАБОРАТОРНАЯ РАБОТА N6 УМНОЖЕНИЕ ДВОИЧНЫХ ЧИСЕЛ 1. Цель работы. Закрепить навыки написания программ на языке ассемблера. 2. Описание лабораторной установки. В работе используется УМК или "Микролаб" без дополнительных устройств. 3. Домашняя подготовка. 3.1. Изучить методы умножения двоичных чисел, рассмотренные в п.5. 3.2. Составить программы на языке ассемблера, реализующие оба метода. 4. Рабочее задание. 4.1. Перевести написанные программы в машинные коды. При этом начальные адреса программ выбрать по собственному усмотрению. 4.2. Ввести в ОЗУ коды команд первой программы и произвести умножение двух чисел, указанных преподавателем. 4.3. Произвести умножение тех же чисел вручную и сравнить результаты. 4.4. Ввести в ОЗУ коды команд второй программы, произвести умножение и проверить результат. 5. Указания и методические рекомендации. У большинства микропроцессоров, широко используемых в различных устройствах, в системе команд нет команды умножения. В таких случаях, при необходимости умножать числа, составляют специальные программы. Существует много различных алгоритмов умножения двоичных чисел. В данной работе предлагаются для изучения два из них. Рассмотрим первый, самый простой из всех существующих алгоритмов умножения чисел. Этот алгоритм выражается в сложении нескольких одинаковых чисел. Например, три умножить на пять значит найти сумму пяти одинаковых чисел равных трем. Т.е. 3*5 = 3 + 3 + 3 + 3 + 3. Программа, реализующая такой алгоритм, имеет наименьшую длину и довольно быстро работает, если множитель небольшой. Процесс умножения по такому алгоритму имеет следующую последовательность действий: 1) Обнуление суммы; 2) Анализ множителя. Если множитель = 0, то конец вычисл.; 3) Прибавить к сумме множимое; 4) Отнять от множителя единицу; 5) Анализ множителя. Если множитель не равен 0, то переход к пункту 3. Составленная программа должна быть рассчитана на умножение однобайтных чисел. При этом результат может быть двухбайтовым числом. Поэтому для сложения рекомендуется использовать команду двухбайтного сложения DAD. Второй алгоритм - один из алгоритмов умножения путем сложения и сдвига. Чтобы понять суть этого алгоритма сначала рассмотрим как умножение проводится вручную. Пусть нужно умножить число 000100012 (1710) на 000011002 (1210). -17- Вычисления будут выглядеть 00010001 00000000 -------00000000 00010001 00010001 00000000 00000000 00000000 00000000 --------------000000011001100 следующим образом: множимое 00001100 множитель первое частичное произведение второе частичное произведение третье частичное произведение четвертое частичное произведение пятое частичное произведение шестое частичное произведение седьмое частичное произведение восьмое частичное произведение сумма При умножении получено восемь частичных произведений, поскольку множитель содержит 8 разрядов. Первые два частичных произведения включают только нули, так как первые два разряда множителя равны 0. Третье частичное произведение -копия множимого. Разница между ними заключается лишь в том, что копия сдвинута относительно множимого на два двоичных разряда влево, поскольку для получения этого частичного произведения в качестве множителя используется значение третьего разряда. Четвертое частичное произведение также является копией множимого, смещенной относительно последнего на три двоичных разряда влево. Частичные произведения с пятого по восьмое состоят только из нулей, так как соответствующие множители, участвующие в формировании произведений, - двоичные нули. Сложение всех частичных произведений в данном примере не сопровождается переносом, однако его возникновение не исключено. Результат с учетом возможного переноса в старший разряд может занимать 16 позиций. Перечислим основные правила умножения путем сдвига и сложения: 1. Формирование первого частичного произведения. Если значение первого разряда множителя равно 0, то и результат равен 0, если значение этого разряда равно I, то результат является копией множимого. 2. Правило сдвига. При использовании очередного разряда множителя для формирования частичного произведения производится сдвиг множимого на один разряд влево. 3. Правило сложения. Каждый раз, когда значение разряда множителя равно I, к результату необходимо прибавить множимое, расположенное в позиции, определенной правилом сдвига. 4. Определение результирующего произведения. Искомое произведение есть результат выполнения всех операций сдвига и сложения. Алгоритм программы, реализующей этот метод, может быть следующим: 1) Обнуление суммы частичных произведений; 2) Анализ сомножителей. Если хоть один из сомножителей равен 0, то конец вычислений; 3) Анализ очередного разряда множителя. Если он не равен О, то к сумме частичных произведений прибавить множимое; 4) Сдвиг множимого влево на один разряд; 5) Проверка конца вычислений. Если не конец, то переход к п.3. При умножении восьмиразрядных чисел множимое и сумма частичных произведений должны храниться в двухбайтовых регистровых парах, так -18- как их длина в процессе вычислений может оказаться 16 бит. Рекомендуется следующим образом использовать регистры: (С) множитель, (DE) - множимое, (HL) - сумма частичных произведений. Для сдвига влево двухбайтового числа у данного процессора нет специальной команды. Здесь можно воспользоваться тем свойством двоичных чисел, что для них умножение на 2 (т.е. сумма с самим собой) аналогично сдвигу влево на один разряд. Поэтому сдвиг числа в регистровой паре DE можно осуществить следующей последовательностью команд: XCHG; DAD H; XCHG. Анализировать очередной разряд множителя можно следующим образом. Произвести сдвиг его вправо через признак переноса. При этом младший разряд множителя запишется в признак переноса. Анализировать же признак переноса можно просто командами JC или JNC ЕСЛИ произвести такой сдвиг еще раз, то теперь признак переноса будет содержать значение второго разряда множителя. Таким образом можно проанализировать все разряды множителя. Проверку конца цикла можно делать разными способами. Первый способ это организовать в неиспользуемом регистре (например, регистре В) счетчик числа проведенных сдвигов влево множимого. Для этого в регистр В следует занести число разрядов множителя и после каждого сдвига влево множимого уменьшать счетчик на единицу. Вычисления следует продолжать до тех пор, пока в счетчике не окажется 0. Другой способ проверки конца вычислений заключается в проверке на ноль множителя. После каждого сдвига вправо множитель уменьшается (для этого перед сдвигом нужно очищать признак переноса С, т.к. в старший разряд множителя будет записываться содержимое признака переноса). После анализа старшего разряда множителя, множитель становится равным нулю. -19- ПРИЛОЖЕНИЕ I УПРАВЛЕНИЕ ДИСПЛЕЕМ 1. Семисегментный код. В МП комплектах УМК и "Микролаб" в качестве дисплея используется набор из семисегментных индикаторов. В УМК набор из шести, а в "Микролабе" из восьми индикаторов. Вид символа, выводимого на индикаторе, задается байтом данных, в котором указывается, какие сегменты должны светиться. Каждый бит этого байта соответствует определенному сегменту индикатора. Это соответствие показано на Рис.П.1.1. Сегмент светится в том случае, когда соответствующий ему бит установлен в "1". Например, надо высветить букву "А". Для этого должны светиться сегменты a,b,c,e,f,g. Байт данных в этом случае будет иметь вид: 01110111B = 77Н. 2. Выбор индикатора. Выбор индикатора для высвечивания символа в УМК и "Микролабе" осуществляется по разному. В УМК для управления дисплеем имеются два порта. В один из них, с адресом F9, выводится байт, содержащий семисегментный код высвечиваемого символа. Байт, выведенный в порт с адресом F8 определяет, в каких индикаторах должен быть выведен этот символ. Соответствие между битами байта выводимого в порт F8, и номерами индикаторов показано на Рис.П.1.2. Символ выводится на данный индикатор, если соответствующий этому индикатору бит установлен в "I". Например, надо высветить символ в 1-й и 3-й индикаторы. Тогда байт выводимый в порт F8 будет иметь вид: 00000101B = 05Н. Чтобы в каждом индикаторе вывести свой символ, надо сначала первый символ вывести в первый индикатор, затем его погасить. Вывести второй символ во второй индикатор, погасить его и т.д. После вывода последнего символа погасить его и вернуться к первому символу. То есть символы выводятся по очереди друг за другом. Но, так как скорость смеш символов довольно большая, глаз видит непрерывное свечение различных символов. В "Микролабе" каждому индикатору соответствует ячейка памяти, где хранится семисегментный код, управляющий свечением сегментов данного индикатора. Информация из этих ячеек посылается на индикаторы при помощи специальной схемы. Соответствие адреса ячейки памяти номеру индикатора показано на Рис.П.1.3. Рис. П.1.1. Соответствие битов семисегментного кода сегментам индикатора. Например, символ надо вывести в 1-й и 3-й индикаторы, для этого семисегментный код данного символа надо занести в ячейки 83F8 и 83FА. -20- Рис. П.I.2. Соответствие битов кода номерам индикаторов УМК. номер индикатора слева направо 1 2 3 4 5 6 7 8 адрес ячейки памяти 83F8 83Р9 83FA 83FВ 83FС 83FD 83FЕ 83FF Рис. П.1.3. Соответствие номеров индикаторов "Микролаба" ячейкам памяти. -21- ПРИЛОЖЕНИЕ 2 СИСТЕМА КОМАНД МИКРОПРОЦЕССОРА КР580ВМ80 В этом приложении собрана информация о мнемокодах, свойствах и кодах команд. Приняты следующие условные обозначения: r,r1,r2 - один из регистров A,B,C,D,E,H,L,M. (Следует помнить, что регистр М в действительности регистром не является. Это ячейка памяти, адрес которой хранится в регистровой паре HL); rp адрес порт данные (А) (r) (rp) ((HL)) PC PCH,PCL rh,rl (С) (F) в - одна из регистровых пар BC,DE,HL или SP; адрес памяти (2 байта); адрес порта внешнего устройства (I байт); I байт данных (для команды LXI 2 байта); содержимое аккумулятора; содержимое регистра; содержимое пары регистров; содержимое ячейки памяти, адрес которой находится паре регистров HL, т.е. содержимое регистра M; программный счетчик; старший и младший байты программного счетчика; старший и младший байты пары регистров; признак переноса; содержимое регистра признаков. -22- Команды пересылки данных и ввода-вывода. MOV r1,r2 пересылка из регистра в регистр; (r1) <— (r2); Коды команд MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV А,А А,В А,С A,D A,E A,H A,L A,M E,A E,B E,C E,D E,E E,H E,L E,M 7F 78 79 7А 7B 7C 7D 7E 5F 58 59 5A 5B 5C 5D 5E MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV В,А В,В В,С B,D B,E B,H B,L B,M H,A H,B H,C H,D H,E H,H H,L H,M MVI r,данные 47 40 41 42 43 44 45 46 67 60 61 62 63 64 65 66 MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV С,А С,В С,С C,D C,E C,H C,L C,M L,A L,B L,C L,D L,E L,H L,L L,M 4F 48 49 4A 4B 4C 4D 4E 6F 68 69 6A 6B 6C 6D 6E MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV D,A D,B D,C D,D D,E D,H D,L D,M M,A M,B M,C M,D M,E M,H M,L 57 50 51 52 53 54 55 56 77 70 71 72 75 74 75 загрузка регистра константой; (r) <— данные; Коды команд MVI MVI MVI MVI A, данные B, данные C, данные 3E 06 0E MVI MVI MVI D, данные Е, данные H, данные 16 1E 26 MVI L, данные MVI M, данные LXI rp,данные загрузка пары регистров; (rp) <— данные; Коды команд LXI B,данные 01 LXI H,данные 21 LXI D,данные 11 LXI SP,данные 31 LXI STA адрес 32 STAX В 02 STAX D 12 LDA адрес 3A LDAX В 0A LDAX D 1A пересылка из аккумулятора в память; (адрес) <— (А); пересылка из аккумулятора в память; ((ВС)) <— (А); пересылка из аккумулятора в память; ((DE)) <— (А); пересылка из памяти в аккумулятор; (А) <-- (адрес); пересылка из памяти в аккумулятор; (А) <-- ((ВО); пересылка из памяти в аккумулятор; (А) <-- (<DE).); 2E 36 -23- SHLD адрес 22 LHLD адрес 2А XCHG ЕВ IN порт DB OUT порт D3 пересылка содержимого регистров HL в память; (адрес) <— (L); (адрес+1) <— (H); пересылка из памяти в пару регистров HL; (L) <- (адрес); (H) <— (адрес+1); обмен между регистровыми парами HL и DE; (HL) <--> (DE); ввод из порта; (А) <— (порт); вывод в порт; (порт) <— (А); Арифметические команды. ADD r сложение содержимого регистра с аккумулятором; (А) <-- (А) + (r); Коды команд ADD ADD A ADD В 87 80 ADD С ADD D 81 82 ADD E ADD H 83 84 ADD L ADD M 85 86 ADC r сложение содержимого регистра с аккумулятором и с признаком переноса; (А) <— (А) + (r) + (C); Коды команд ADС ADC А ADC В SUB r 8Р 88 ADC С ADC D 89 8А ADC Е ADC Н 8В 8С ADC L ADC M 8D 8E вычитание содержимого регистра из аккумулятора; (А) <— (А) - (r); Коды команд SUB SUB А SUB В SBB r 97 90 SUB С SUB D 91 92 SUB E SUB H 93 94 SUB L SUB M 95 96 вычитание из аккумулятора содержимого регистра и признака переноса; (А) <-- (А) -,(r) - (C); Коды команд SBB SBB A SBB В 9F 98 SBB С SBB D 99 9А SBB Е SBB Н 9В 9С SBB L SBB M 9D 9E -24- ADI данные C6 сложение аккумулятора с константой; (А) <-- (А) + данные; ACI данные СЕ сложение аккумулятора с константой и с признаком переноса; (А) <— (А) + данные + (C); SUI данные D6 вычитание из аккумулятора константы; (А) <— (А) - данные; SBI данные DE вычитание из аккумулятора константы и признака переноса; (А) <-- (А) - данные - (с); INR r инкремент (увеличение на 1) регистра; (r) <— (r) + 1; Коды команд INR INR A INR В DCR r 3С 04 INR С INR D 0С 14 INR Е INR Н 1С 24 INR L INR М 2C 34 декремент (уменьшение на I) регистра; (r) <— (r) - 1; Коды команд DCR DCR A DCR В INX rp 3D 05 DCR С DCR D 0D 15 DCR E DCR H 1D 25 DCR L DCR M 2D 35 инкремент пары регистров; (rp) <— (rp) + 1; Коды команд INX INX В DCX rp 03 INX D 13 INX H 23 INX SP 33 DCX SP 3B декремент пары регистров; (rp) <— (rp) - 1; Коды команд DСX DCX В 0B DCX D 1B DCX H 2B DAD rp сложение содержимого пары регистров с со держимым пары HL; (HL) <— (HL) + (rp); Коды команд DAD DAD В DAA 27 сложения; 09 DAD D 19 DAD H 29 DAD SP десятичная коррекция аккумулятора после 39 -25- Логические команды. ANA r логическое "И" аккумулятора с регистром; (А) <-- (А) ∩ (r); Коды команд ANA ANA А ANA В ORA r А7 А0 ANA С ANA D A1 A2 ANA E ANA H A3 A4 ANA L AHA M A5 A6 логическое "ИЛИ" аккумулятора с регистром; (А) <— (A) U (r), Коды команд ORA ORA A ORA В XRA r B7 В0 ORA С ORA D B1 В2 ORA Е ORA Н В3 В4 ORA L ORA М B5 В6 исключающее "ИЛИ" аккумулятора с регистром; (А) <-- (А) * (r); XRA A AF XRA B A8 Коды команд XRA XRA C A9 XRA E AB XRA D AA XRA H AC XRA L AD XRA M AE СМР r сравнение аккумулятора с регистром (содержимое аккумулятора не изменяется); (А) - (r); СМР А СМР В ВF В0 СМР С СМР D Коды команд СМР B1 СМР Е В3 ВA СМР Н В4 CMP L СМР М ВD В6 ANI данные E6 логическое "И" аккумулятора с константой; (А) <-- (А) ∩ данные; ORI данные F6 логическое "ИЛИ" аккумулятора с константой; (А) <— (A) U данные; XRI данные ЕЕ исключающее "ИЛИ" аккумулятора с константой; (А) <— (А) * данные; CPI данные FE сравнение аккумулятора с константой (содержимое аккумулятора не изменяется); (А) -(r); СМА 2F инвертирование аккумулятора; CMC 3F инвертирование признака переноса; STC 37 установка признака переноса в 1; RLC 07 циклический сдвиг влево; (А0) <-- (А7) (С) <-- (А7); RRC 0F циклический сдвиг вправо; (А7) <— (А0) (С) <— (А0); -26- RAL 17 циклический сдвиг влево через признак переноса; (С) <— (А7) (АО) <— (С); RAR 1F циклический сдвиг вправо через признак переноса; (C) <— (А0) (А7) <— (C); Команды передачи управления и специальные команды. JMP адрес C3 безусловный переход; (PC) <— адрес; JNZ адрес С2 переход, если был ненулевой результат, т.е. в регистре признаков бит Z = 0; JZ адрес СА переход, если был нулевой результат, т.е. в регистре признаков бит Z = 1; JNC адрес D2 переход, если не было переноса, т.е. в регистре признаков бит C = 0; JC адрес DA переход, если был перенос, т.е. в регистре признаков бит с = I; JP0 адрес Е2 переход, если результат содержит нечетное число единиц, т.е. в регистре признаков бит Р = 0; JPE адрес ЕА переход, если результат содержит четное число единиц, т.е. в регистре признаков бит Р = 1; JP адрес F2 переход, если результат положительный, т.е. в регистре признаков бит S = 0; JM адрес FA переход, если результат отрицательный, т.е. в регистре признаков бит S = 1; CALL адрес CD безусловный вызов подпрограммы; (РC) <— адрес, ((SP)-1) <— (РСН), ((SP)-2) <-- (PCL), (SP) <— (SP)-2; CNZ адрес С4 вызов подпрограмм, если был ненулевой результат, т.е. в регистре признаков бит z=I; CZ адрес CC вызов подпрограммы, если был нулевой результат, т.е. в регистре признаков бит Z=0; CNC адрес D4 вызов подпрограммы, если не было переноса, т.е. в регистре признаков бит с = 0; CC адрес DC вызов подпрограммы, если был перенос, т.е. в регистре признаков бит с = I; GP0 адрес Е4 ВЫЗОВ подпрограммы, если результат содержит нечетное число единиц, т.е. в регистре признаков бит P = 0; СРЕ адрес ЕС вызов подпрограммы, если результат содержит четное число единиц, т.е. в регистре признаков бит P = 1; СР адрес F4 вызов подпрограммы, если результат положительный, т.е. в -27- регистре признаков бит S=0; CМ адрес FC вызов подпрограммы, если результат отрицательный, т.е. в регистре признаков бит S=I; RET C9 безусловный возврат из подпрограммы; (PCL) <— ((SP)), (РСН) <— ((SP)+1), (SP) <-- (SP)+2; RNZ C0 возврат из подпрограммы, если был ненулевой результат, т.е. в регистре признаков бит Z = 1; RZ C8 возврат из подпрограммы, если был нулевой результат, т.е. в регистре признаков бит Z = 0; RNC D0 возврат из подпрограммы, если не было переноса, т.е. в регистре признаков бит с = 0; RC D8 возврат из подпрограммы, если был перенос, т.е. в регистре признаков бит с = I; RP0 E0 возврат из подпрограммы, если результат содержит нечетное число единиц, т.е. в регистре признаков бит P = 0; RPE E8 возврат из подпрограммы, если результат содержит четное число единиц, т.е. в регистре признаков бит P = 1; RP F0 возврат из подпрограммы, если результат положительный, т.е. в регистре признаков бит S = 0; НМ F8 возврат из подпрограммы, если результат отрицательный, т.е. в регистре признаков бит S = 1; RST n вызов подпрограммы прерываний; ((SP)-1) <-- (РСН), ((SP)-2) <— (PCL), (SP) <-- (SP)-2, (PC) <— 8 * n; Коды команд RST RST 0 RST 1 C7 CF RST 2 RST 3 D7 DF RST 4 RST 5 17 EF RST 6 RST 7 F7 FF PGHL E9 загрузка программного счетчика содержимым регистров HL; (РС) <-- (HL); E1 FВ разрешение прерываний; D1 F3 запрещение прерываний; HLT 76 останов; NOP 00 нет операции; -28- Команды с обращением к стеку PUSH rp занесение в стек содержимого пары регистров; ((SP)-1) <-- (rh), ((SP)-2) <-- (rl), (SP) <— (SP)-2; Коды команд PUSH PUSH В C5 POP rp PUSH D D5 PUSH H E5 PUSH PSW F5 выборка из стека и загрузка пары регистров; (rl) <— ((SP)), (rh) <— ((SP)+1, (SP) <-- (SP)+2; Коды команд POP POP В C1 XTHL SPHL POP D D1 POP H E1 POP PSW F1 Е3 обмен между вершиной стека и парой регистров HL; (L) <--> ((SP)), (Н) <--> ((SP)+1; F9 загрузка указателя стека содержимым пары HL. Команды, устанавливающие признаки результатов признаки команды r r r PSW ADC r SBB r DAA CPI данные ADI ACI SUI SBI данные данные данные данные все признаки (C) = 0 ANA XRA r r ORA r ORI данные ANI XRI данные данные все признаки, кроме C INR r DCR r только C RLC STC все признаки ADD SUB CMP POP RRC CMC RAL DAD rp RAR -29- ПРИЛОЖЕНИЕ 3 ПРОГРАММИРОВАНИЕ МИКРОСХЕМЫ ПАРАЛЛЕЛЬНОГО ИНТЕРФЕЙСА КР580ВВ55 Микросхема КР580ВВ55 является программируемым параллельным интерфейсом. Она может использоваться для связи микропроцессорной системы с различными внешними устройствами. Микросхема имеет три восьмиразрядных порта (регистра) ввода-вывода - А, В, С и регистр управления. Порт С состоит из двух четырехразрядных портов. Микросхема может работать в трех режимах - 0, 1 и 2. Режимы 1 и 2 в данных работах не используются и поэтому здесь не рассматриваются. В режиме 0 каждый порт может независимо от остальных настраиваться на ввод или на вывод информации. Для настройки микросхемы на один из трех режимов и для настройки портов на ввод или вывод используется управляющее слово, которое вводится в регистр управления командой OUT адрес. Адрес регистра управления параллельного интерфейса в УМК 93Н, а в "Микролабе" - FBH. Использование каждого разряда управляющего слова показано на Рис.П.3.1. Рис. П.3.1. Управляющее слово микросхемы КР580ВВ55 в режиме О. Например, управляющее слово 1001 0000 (9ОН) настраивает порт А на ввод данных в микропроцессор, а остальные порты на вывод. Каждый порт имеет свой адрес и доступен через команда OUT и IN. В УМК к порту В подсоединены светодиоды. Адрес этого порта 91H. В "Микролабе" светодиоды подсоединены также к порту В, адрес его - F9H. -30- СОДЕРЖАНИЕ Краткое описание учебного микропроцессорного комплекта .............. Краткое описание учебной микролаборатории "Микролаб" ................ Лабораторная работа №1. Ввод и выполнение программы ................. Лабораторная работа №2. Модификация программ ........................ Лабораторная работа №3. Арифметические и логические команда микропроцессора ..................................................... Лабораторная работа №4. Сложение и вычитание многобайтовых чисел .... Лабораторная работа №5. Работа с массивами данных ................... Лабораторная работа №6. Умножение двоичных чисел .................... Приложение 1. Управление дисплеем ................................... Приложение 2. Система команд микропроцессора КР580ВМ80 .............. Приложение 3. Программирование микросхемы параллельного интерфейса КР580ВВ55 ........................................................... I 4 7 9 12 14 17 20 25 27 37