Текст
                    В. Г. Майоров, А. И. Гаврилов
ПРАНТИЧЕЕНИЙ
НУРЕ
ПРОНЕЕЕОРНЫХ
ЕИЕТЕМ

В. Г. Майоров, Д, И. Гаврилов ПРАНТИЧЕЕНИЙ НУРЕ ПРОГРАММИРОВАНИЯ МИНРОПРОНЕЕСОРНЫХ ЕИЕТЕМ Москва «Машиностроение» 1989
ББК 32.973-01 М15 УДК 681.326.32 AlVaKo 23/04/2011 Рецензент канд. техн, наук А. Е. Костин Майоров В. Г., Гаврилов А. И. Ml5 Практический курс программирования микропроцессор- ных систем. — М.: Машиностроение. 1989. — 272 с.: ил. ISBN 5-217-00460-6 Рассмотрены основные принципы и приемы программирования микро- процессорных систем на базе микропроцессоров серии КР580. Дан лабо- раторный практикум для начинающих программистов. Для инженерно-технических работников, занимающихся вопросами разработки и применения микропроцессорных систем в различных отра- слях народного хозяйства, а также для начинающих программистов микро- процессорных систем. 2404040000—040 М 038 (01) 89 —89 ББК 32.973-01 ISBN 5-217-00460-6 (§) Издательство «Машиностроение», 1989
СПИСОК УСЛОВНЫХ ОБОЗНАЧЕНИЙ АЛО цифровых ЭВМ — арифметические и логические основы цифровых вы- числительных машин АЦП — аналого-цифровой преобразователь БИС — большая интегральная схема ВБФ — временная булева функция ВУ — внешнее устройство ДНФ — дизъюнктивная нормальная форма ЗУ — запоминающее устройство ИС — интегральная схема КЛС — комбинационная логическая схема КОП — код операции МЛ — магнитная лента МПС — микропроцессорная система НГМД — накопитель на гибких магнитных дисках НМЛ — накопитель на магнитной ленте ОЗУ — оперативное запоминающее устройство ОС — операционная система ПДП — прямой доступ к памяти ПЗУ — постоянное запоминающее устройство ПКП — приоритетный контроллер прерываний ПЛМ — программируемая логическая матрица ППИ — программируемый параллельный интерфейс ПУ — печатающее устройство РА — регистр адреса РГ — регистр РБФ — рекуррентная булева функция РОН — регистр общего назначения РР — регистр режима РУ — регистр управления РУС — регистр управляющего слова СДНФ — совершенная дизъюнктивная нормальная форма СКНФ — совершенная конъюнктивная нормальная форма СКО — слово команды операции ФАЛ — функция алгебры логики ШД — шина данных ЭЛТ — электронно-лучевая трубка ЯП — ячейка памяти 1*
ПРЕДИСЛОВИЕ Развитие и распространение микропроцессоров, а также микро- контроллеров и микроЭВМ на их основе стимулируют постоянно возрастающий интерес специалистов технического профиля к их изучению и применению. В СССР в настоящее время освоен выпуск более 20 микро- процессорных комплектов на основе БИС. Широкое распростра- нение получил микропроцессор КР580ИК80, что обусловлено его высокими эксплуатационными характеристиками, наличием фик- сированной системы команд, низкой стоимостью, широкой но- менклатурой периферийных БИС. Отечественная промышленность освоила на базе микропроцессора КР580ИК80 серийный выпуск ряда микроЭВМ и микроконтроллеров: В7, СМ1800, «Электро- ника К1-Ю», «Электроника К1-30», «Электроника К1-20», МК-01, МКП1 и др. Системы на базе микропроцессора КР580ИК80 вне- дряются во многих отраслях промышленности, в бытовой тех- нике, применяются для совершенствования учебного процесса в вузах и техникумах. В последние годы в различных издательствах нашей страны был выпущен ряд монографий, учебников и учебных пособий, посвященных построению и применению микропроцессорных си- стем. И поэтому спрос на литературу, связанную с разработкой и проектированием аппаратуры микроконтроллеров, практически удовлетворен. Сейчас основную сложность для пользователей, особенно начинающих, представляет разработка прикладного программного обеспечения микропроцессорных систем. Это свя- зано с тем, что программирование в микропроцессорных устрой- ствах имеет ряд специфических особенностей. В то же время все большее число специалистов вынуждено в той или иной мере заниматься выбором и реализацией алгорит- мов вычисления функций на ЭВМ, а также многими вопросами системного программного обеспечения специализированных микроЭВМ и микроконтроллеров. Поэтому реализация тех воз- можностей, которые открывает применение микропроцессоров, во многом сдерживается отсутствием доступной информационно- справочной литературы, ориентированной на начинающих поль- зователей — разработчиков встраиваемых в приборы микро- процессорных систем и микроЭВМ, учитывающей специфику их программирования, организацию вычислительных работ и т. п. 4
Здесь уместно выделить еще один круг пользователей, пишущих программы на языке ассемблера для современных персональных ЭВМ ЕС1840, «Искра 1030», на которых, как известно, выпол- няются программы, написанные для микропроцессора КР580ИК80. В этих условиях становится необходимым наличие публикаций, которые давали бы ответы на многие специальные вопросы прак- тики программирования, возникающие у специалистов в процессе проектирования и отладки программного обеспечения конкретной микропроцессорной системы. Именно такую направленность имеет настоящая книга. Главная особенность книги заключается в том, что основной акцент в ней смещен в сторону изложения практических вопросов, с которыми приходится сталкиваться в практике программиро- вания микропроцессорных систем. Изучение конкретных про- грамм начинающими пользователями является наиболее быстрым и эффективным путем овладения практическими приемами про- граммирования. В наборе описываемых в книге подпрограмм главный упор сделан на общие задачи, встречающиеся во многих практических случаях. В частности, рассмотрены вопросы кодирования ин- формации в микропроцессорах, в том числе кодирование цифр, чисел, символов команд; разобраны и систематизированы эле- ментарные приемы программирования на языке ассемблера; опи- саны программные модели логических схем и импульсных после- довательностей. Приведены практические варианты монитора, примеры программирования всех кристаллов БИС комплекта КР580ИК80, а также самотестирования аппаратуры МПС и тести- рования передаваемой по линиям связи информации. Значитель- ная часть материала книги посвящена описанию программной реализации арифметических операций и вычислению элементар- ных функций. Особое значение имеет описываемая программная модель программируемого микрокалькулятора, реализованная в программной среде микропроцессора КР580ИК80, что позволяет использовать богатейшую библиотеку программ для микрокаль- куляторов. В книге дана распечатка отлаженной программы — кросс-средств для КР580ИК80 на базе комплекса СПП-02, при- ведены примеры применения программируемых микроконтролле- ров для управления периферийным оборудованием. Авторы надеются, что описанные программы и подпрограммы читатель сможет использовать при решении прикладных задач в качестве исходного материала. Содержание данной книги опирается на курс лекций, чита- емых одним из авторов в Смоленском филиале Московского ордена Ленина и ордена Октябрьской революции энергетического ин- ститута. Предисловие, гл. 1, 2, 4 (кроме п. 5—7), 6, 7 (кроме п. 3) написаны В. Г. Майоровым, остальной текст написан авторами совместно. В гл. 6 приведены программы, подготовленные инж. Д. Е. Зильберманом. 5
ГЛАВА 1 ОСНОВЫ ПРОГРАММИРОВАНИЯ Материал этой главы ориентирован прежде всего на читателя, не имеющего специальной подготовки по основам вычислительной техники. Здесь компактно рассмотрены вопросы кодирования цифр, символов, чисел, команд, необходимых для работы микро- процессорных систем. По мнению авторов, материал этой главы выполняет функции некоторого фундамента при овладении очень интересными при- емами применения языка ассемблера для микропроцессоров во встроенных системах или персональных компьютерах. 1. КОДИРОВАНИЕ СИМВОЛОВ, ЦИФР, ЧИСЕЛ, КОМАНД Микропроцессору понятен лишь один язык — язык двоичных цифр, в то время как в повседневной жизни для записи информа- ции мы используем широкий набор различных символов, цифр, букв. Возникает вопрос, каким образом передать процессору смысл и значение привычной для нас информации. Это можно сделать специальным кодированием информации. Для упрощения работы с информацией часто требуется переходить от одной си- стемы счисления к другой, от одного кода к другому. Такой про- цесс называется кодированием или декодированием. Под системой счисления будем понимать способ представления любого числа с помощью некоторого алфавита символов, называемых цифрами. Существуют различные системы счисления. От их особенностей зависят наглядность представления числа с помощью цифр и сложность выполнения арифметических операций. В настоящем параграфе рассмотрены некоторые системы счисления и кодиро- вания, широко используемые в цифровых вычислительных маши- нах и микропроцессорных системах. Системы счисления В повседневной жизни для человека наиболее привычной является десятич- ная система счисления. В этой системе счисления стандартными символами, ис- пользуемыми для изображения чисел, являются цифры 0, 1,2, 3, 4, 5, 6, 7, 8, 9. Количество различных цифр, употребляемых в системе счислений, называется ее основанием. Для десятичной системы таких цифр, как известно, десять. Для представления чисел по основанию b используется набор символов, количество которых в наборе равно Ь. 6
Например, если 6 = 2, используется набор символов 0, 1; если b = 8, используется набор символов 0, 1,2, 3, 4, 5, 6, 7. Представление чисел с помощью всего лишь двух символов (0, 1) задает двоичную систему счисления, или систему счисления с основанием 2. Вся инфор- мация, обрабатываемая микропроцессором или ЭВМ и содержащаяся в ячейках памяти или регистрах, может быть представлена в виде двоичных чисел, состоя- щих из 0 и 1. Пример записи числа в двоичной системе счисления: 0110010110101001 Каждый разряд в двоичной записи числа называется битом. В качестве примера приведено 16-битовое число. В микропроцессорах вся обрабатываемая информация хранится в виде по- следовательности машинных слов определенного формата. Если запись машин- ного слова содержит восемь битов, принято называть это слово байтом; если имеется последовательность из четырех битов, то ее называют тетрадой. При записи чисел основание системы счисления указывают в виде индекса числа: 13310, 1012. Иногда в качестве указателей системы счисления используют буквы в конце числа: В — двоичные числа. Q — восьмеричные числа, D — десятичные числа, Н — шестнадцатеричные числа. Недостатком двоичной системы счисления является тот факт, что для записи двоичных чисел требуется большое количество разрядов и эти числа трудно чи- таются [15]. Поэтому на практике получило распространение представление чи- сел в виде групп, каждая из которых состоит из меньшего числа разрядов. На- пример, исходное двоичное число 0110010101101110 можно разбить на группы по три разряда: 0 110 010 101 101 ПО и на группы по четыре разряда: ОНО 0101 ОНО 1110 Разбивку двоичного числа на группы выполняют, начиная с младших раз- рядов, а замена этих групп знаками в соответствующей системе счисления дает определенные удобства обращения с длинными числами, позволяет их легко чи- тать и воспроизводить. Для представления двоичных чисел группами по три бита используем, как правило, коды восьмеричной системы счисления, а для представления чисел груп- пами по четыре бита — коды шестнадцатеричной системы (табл. 1). Исходное двоичное число 0110010101101110 в восьмеричной системе счис- ления записывается в виде 062556Q, а в шестнадцатеричной системе счисления — в виде 656ЕН. Можно заметить, что для представления числа в шестнадцатеричной системе счисления требуется меньше цифр. Однако в шестнадцатеричной системе счис- ления для изображения всех цифр не хватает полного набора десятичных цифр и поэтому, чтобы не изобретать изображения новых символов для представления цифр, больших десяти, вводятся символы от А до F (см. табл. 1). Это не буквы в тексте, а числа, над которыми могут производиться все арифметические дей- ствия. В вычислительной технике находит широкое применение смешанное пред- ставление чисел, называемое двоично-десятичной формой записи чисел, или дво- ичным кодированием десятичных цифр (BCD). По используемому основанию (де- сять) двоично-десятичные коды соответствуют обычным десятичным числам. В то же время для их записи используются только двоичные цифры 0 и 1. Двоич- но-десятичная форма записи числа образуется путем замены в десятичном коде каждой десятичной цифры ее четырех раз рядным двоичным эквивалентом (см. табл. 1). 7
Таблица 1 Представление чисел в различных системах счисления Двоично- десятичная форма Двоично- десятичная форма О 1 2 3 4 5 6 7 О 1 10 11 100 101 но 111 о 1 2 3 4 5 6 7 О 1 2 3 4 5 6 7 0000 0001 0010 ООН 0100 0101 оно 0111 8 1000 10 9 1001 11 10 1010 12 11 1011 13 12 1100 14 13 1101 15 14 1110 16 15 1111 17 8 9 А В С D Е F 1000 1001 0001 0000 0001 0001 0001 0010 0001 ООН 0001 0100 0001 0101 Применение двоично-десятичного кодирования объясняется прежде всего тем обстоятельством, что для человека наиболее удобна десятичная система, а для машины — двоичная. Для преобразования кодовых эквивалентов из одной формы в другую требуются определенные аппаратные и программные средства. Оказалось, что объем требуемых преобразований кодов существенно уменьшается при использовании двоично-десятичного кодирования десятичных цифр. Кодирование символов и знаков в микропроцессорах Как известно, микроЭВМ предназначены для обработки не только цифровой, но и текстовой информации, которая может содержать буквы, цифры, математические символы, знаки пре- пинания. В настоящее время разработаны различные системы кодирования текстовой информации. Наиболее широко приме- няются 7- и 8-битные коды обмена информацией КОИ-7 и КОИ-8, которые приведены в шестнадцатеричной системе счисления в табл. 2, 3. Код КОИ-7 позволяет кодировать ‘всего 27 = 128 символов, в том числе 32 буквы русского алфавита, 26 букв латинского алфавита, 10 цифр и 26 символов, используемых для печати, а также символ пробела и специальные символы. В табл. 2 не приведены коды специальных символов (коды 00—20), не пред- назначенные для печати, а используемые для управления дей- ствиями устройств, участвующих в передаче символов. Для букв латинского алфавита справедлив весовой принцип кодирования символов [15], при котором веса кодов букв увели- чиваются на единицу в алфавитном порядке, например: (код для В) = (код для А) + 1; (код для С) = (код для В) + 1 и т. д. Если необходимо расположить список фамилий в алфавитном порядке, то при весовом принципе кодирования эта операция 8
Таблица 2 Представление символов в коде КОИ-7 Код Символ Код Символ Код Символ Код Символ 20 38 8 50 р 68 X 21 ! 39 9 51 Q 69 и 22 ft ЗА 52 R 6А й 23 ЗВ 53 S 6В к 24 Ц ЗС 54 т 6С л 25 % 3D = 55 и 6D м 26 & ЗЕ 56 V 6Е Н 27 / 3F ? 57 W 6F О 28 ( 40 @ 58 X 70 п 29 ) 41 Л 59 Y 71 я 2А 42 в 5А Z 72 р 2В + 43 с 5B I 73 с 2С 44 D 5С \ 74 т 2D 45 Е 5D ] 75 У 2Е 46 F 5Е Л 76 ж 2F / 47 G 5F ъ 77 в 30 0 48 Н 60 ю 78 ь 31 1 49 I 61 А 79 ы 32 2 4А J 62 Б 7А 3 33 3 4В К 63 С 7В ш 34 4 4С L 64 Д 7С э 35 5 4D М 65 Е 7D щ 36 6 4Е N 66 Ф 7Е ч 37 7 4F О 67 Г 7F может быть выполнена ЭВМ путем сравнения двоичных чисел, соответствующих кодовым изображениям фамилий. Для букв русского алфавита весовой принцип кодирования несправед- лив ЦО]. В коде КОИ-7 символы представляются восьмиразрядным двоичным числом, занимающим 1 байт. Правые 7 разрядов этого числа соответствуют коду КОИ-7 данного символа. Крайний левый бит байта называется разрядом контроля четности и часто используется для обнаружения ошибок. Разряд контроля при- нимает такое значение, чтобы общее число разрядов в байте, содержащих 1, было четным. Если ошибка допущена на носителе, с которого нельзя стереть информацию (например, на перфоленте), можно «переперфориро- вать» пробивки на ленте, т. е. забить поперек ленты все позиции с помощью символа 7F («забой»). Код КОИ-8 позволяет кодировать всего 256 символов, в том числе 31 прописную и 32 строчных буквы русского алфавита, 26 прописных и 26 строчных букв латинского алфавита, 10 цифр и 32 служебных знака. В табл. 3 не приведены коды специальных символов (диапазон кодов 00—20, АО — BF), которые пред- назначены для управления действиями устройств, участвующих 9
Таблица 3 Представление символов в коде КОИ-8 Код Символ Код Символ Код Символ Код Символ Код Символ 20 40 @ 60 CO Ю Е0 ю 21 ! 41 А 61 а Cl a Е1 А 22 и 42 в 62 b C2 6 Е2 Б 23 43 с 63 с C3 Ц ЕЗ ц 24 я 44 D 64 d C4 Д Е4 д 25 % 45 Е 65 е C5 e Е5 Е 26 & 46 F 66 f C6 Ф Е6 Ф 27 / 47 G 67 g C7 г Е7 Г 28 ( 48 Н 68 h C8 X Е8 X 29 ) 49 I 69 i C9 и Е9 и 2А * 4А J 6А i CA й ЕА Й 2В + 4В К 6В k EB к ЕВ X 2С 4С L 6С 1 CC л ЕС л 2D 4D М 6D m CD м ED м 2Е 4Е N 6Е n CE н ЕЕ н 2F / 4F О 6F 0 CF О EF О 30 0 50 Р 70 p DO п F0 п 31 1 51 Q 71 q DI я F1 я 32 2 52 R 72 г D2 р F2 р 33 3 53 S 73 s D3 с F3 с 34 4 54 Т 74 t D4 т F4 т 35 5 55 и 75 u D5 У F5 У 36 6 56 V 76 V D6 ж F6 ж 37 7 57 W 77 w D7 в F7 в 38 8 58 X 78 X D8 ь F8 ь 39 9 59 Y 79 у D9 ы F9 ы ЗА 5А Z 7А z DA э FA 3 ЗВ 5В [ 7В ( DB ш FB ш ЗС 5С 7С DC э FC э 3D == 5D Y 7D ’) DD щ FD щ ЗЕ 5Е Л 7Е DE ч FE ч 3F ? 5F ъ 7F DF ъ FF в передаче символов. Коды символов в диапазоне 21—5F соответ- ствуют одним и тем же символам для обеих систем кодирования (КОИ-7, КОИ-8). Кодирование чисел в микропроцессорах Понятие «число» является одним из основных понятий матема- тики. В процессе своего развития оно расширялось и обобщалось, проходя определенные этапы: целые положительные (натуральные) числа; рациональные (дробные) числа; отрицательные числа; иррациональные числа; действительные числа как совокупность рациональных и иррациональных чисел; комплексные числа. Прежде всего следует подчеркнуть, что вопрос о кодировании (представлении) чисел в МПС полностью находится в компетенции 10
разработчика программного обеспечения, хотя в этом случае целесообразнее использовать стандартные формы кодирования чисел, особенно если дополнительно приходится применять какие- либо стандартные подпрограммы. Ниже изложены лишь принципы кодирования чисел в ЭВМ и описаны наиболее употребительные форматы. В большинстве современных микроЭВМ целые числа занимают целое число байтов или слов (два байта). Собственно процесс кодирования целого числа заключается в записи его в двоичной системе счисления с числом разрядов, равным числу битов в ма- шинном слове. Например, числу 254 соответствует двоичный код 11111110, а числу 8 — код 0 0 0 0 1 0 0 0. Другими словами, в 8-разрядной микроЭВМ целые числа без знака представляются в формате 8-разрядного слова (байта), если число меньше 255, и в формате 16-разрядного слова, если число больше 255. Здесь следует указать на стандартные варианты интерпретации 8- и 16-разрядных данных в МПС. Восьмибитные данные интер- претируются как двоичные числа со знаком в диапазоне от —128 до +127. Отрицательные числа представляются в дополнительном коде (знак числа хранится в седьмом разряде); упакованные двоично-десятичные числа без знака, состоящие из двух цифр, — в диапазоне от 0 до 99, причем первая цифра хранится в старшем полубайте, а вторая — в младшем; символы — в КОИ-7 (ГОСТ 13052—74). Шестнадцатибайтные данные интерпрети- руются как двоичные числа без знака в диапазоне от 0 до 65535 или как адрес ячейки памяти. В микроЭВМ принята нумерация разрядов справа налево в разрядной сетке машины, начиная с нулевого разряда. В микро- ЭВМ СМ1300, «Электроника-60», оперирующих 16-битным ма- шинным словом, целые числа представляются в 16-разрядном формате машинного слова или в 32-разрядном формате двойного слова. Определенные затруднения всегда вызывает кодирование отри- цательных чисел. Наиболее популярны сейчас три способа коди- рования. Известен, например, отличающийся простотой способ пред- ставления отрицательных целых чисел в виде знак-модуль [27]. Отрицательное и положительное числа представляются одина- ково, за исключением левого знакового разряда: если он равен единице, то число отрицательное; если равен нулю, то число положительное. Недостаток такого способа состоит в усложнении процедуры сложения чисел с разными знаками. Другим способом представления отрицательных чисел яв- ляется представление числа с помощью обратного кода. Для получения обратного кода берется его положительное двоичное представление и слева дополняется нулями до числа разрядов, И
соответствующих одному машинному слову. После этого каждый нуль заменяется на единицу, а каждая единица — на нуль: (0 0 0 0 0 0 1 1)2 =>(1 1 1 1 1 1 0 0)2 прямой код обратный код Обратный код отрицательного числа называют также допол- нением до единицы. Достоинством такого кодирования является простота получения обратного кода и возможность не учитывать знаки при сложении и вычитании. Недостатки кодирования заключаются в следующем: обра- зуются два различных представления нуля, не эквивалентных по записи; необходим циклический перенос при сложении для получения правильного результата. Еще одним способом представления отрицательного числа является дополнительный код, или двоичное дополнение. Двоичное дополнение образуется вычитанием числа фиксированной длины (т. е. дополненного нулями слева) из целого числа, на единицу большего, чем максимальное число, которое может храниться в данной ЭВМ. Например, число —3 можно получить в виде (1 0 0 0 0 0 0 0 0)2 — (0 0 0 0 0 0 1 1)2 = (1 1 1 1 1 1 0 1)2 Существует однако и более компактный метод получения до- полнительного кода. Для этого необходимо: 1) заменить все нули на единицы, а единицы на нули в двоичном представлении модуля числа; 2) добавить единицу к результату. Представление чисел в виде дополнительного кода имеет следу- ющие преимущества по сравнению с другими формами пред- ставления: сложение и вычитание выполняются предельно просто; имеется единственное представление нуля; можно рассматривать целые числа только как положительные. Однако процедура нахождения дополнительного кода более трудоемка, чем кодирование для двух других представлений, поэтому в случае, когда преобразования надо делать чаще, чем арифметические операции, такая система кодирования будет менее эффективна. Заметим, что использование отрицательных чисел вдвое сокра- щает диапазон представляемых таким образом абсолютных значе- ний чисел. Рассмотренную форму представления целых чисел можно определить как форму представления с фиксированной запятой (запятая фиксирована после младшего разряда). Числа, имеющие целую и дробную часть (вещественные числа) могут быть представлены в микроЭВМ в форме с фиксированной запятой, причем дробная и целая части могут занимать опре- деленное число байтов [27]. Представление чисел с фиксированной запятой используется лишь в небольших микросистемах, применяемых для управления 12
технологическими процессами и для обработки измерительной информации. В микроЭВМ, предназначенных для решения широкого круга задач, основным является представление чисел с плавающей запя- той (точкой), которое не требует масштабирования данных. Число с плавающей точкой в общем случае имеет вид [101: X = Spq, где S — основание системы счисления; р — порядок; q — ман- тисса числа X. Поскольку микропроцессор работает с двоичным представле- нием числа, числа с плавающей точкой будут храниться в виде двоичной дроби, умноженной на степень числа два. Чаще всего двоичная дробь является нормализованной, т. е. в первом разряде справа от точки стоит единица. Если в результате вычислений получается дробь, у которой в первом разряде после точки стоит нуль, то нормализация производится сдвигом всех разрядов влево до появления единицы в первом разряде и вычитанием из показателя степени числа, равного числу разрядов, на которое был произведен сдвиг. Следует подчеркнуть, что в микропроцессорах неудобно пред- ставлять дроби в виде дополнений и поэтому отрицательные числа с плавающей точкой представляются в формате «знак — модуль». Обычно старший (крайний левый) бит используется для представ- ления знака числа. Чтобы избежать выделения еще одного бита для знака порядка числа, вводят специальное смещение на поло- вину максимального значения порядка. Положительные показа- тели степени числа прибавляются к смещению, отрицательные вычитаются из степени смещения и в таком формате существуют в микропроцессоре. Числа с плавающей точкой могут иметь два формата пред- ставления числа: одинарный (рис. 1) и двойной. Все числа с плавающей точкой должны трактоваться как приближенные. Нуль в таком формате представляется с помощью порядка, состоящего из одних нулей, а сама мантисса при этом игнорируется. Для чисел двойной точности (двойной формат) мантисса занимает еще дополнительно два машинных слова. Точность такого представления числа осуществляет примерно 15 десятичных разрядов в диапазоне от 10-38 до IO*39. Знак Порядок Иан /5 7 6 О Слово / тисса 15 0 Слово 2 Рис. 1. Пример одинарного формата числа с плавающей точкой: разряд 15 слова 1 хранит знак числа; разряды (14—7) — порядок числа со смещением 128; разряды (6—0) слова 1 и разряды (15—0) слова 2 хранят мантиссу числа 13
Кодирование команд и программ в микропроцессорах Микропроцессор, как уже отмечалось, работает только с двоич- ными кодами. Среди совокупности этих кодов выбирается опре- деленная группа кодов, каждый из которых может заставить микропроцессор выполнить определенные действия (операции). Такой код часто называется кодом операции (КОП) и, как пра- вило, определяет одну команду из системы команд микропроцес- сора. КОП любой команды представляется в запоминающем устройстве двоичным восьмиразрядным числом (байтом). Всего с помощью байта можно формировать 2я = 256 различных кодо- вых комбинаций. Почти столько же команд (244) имеет микро- процессор КР580ИК80. При написании программ для микро- систем пользователю необходимо хорошо знать систему команд микропроцессора. А это означает, что пользователь должен пом- нить перечень команд и хорошо представлять себе действия микро- процессора при их выполнении. Естественно, что запомнить 012 345 6789А ВС DEF 0 NOP LX1 STAX INX INR DCR MVI RLC - DAD В LDAX В DCX В INR C DCR C MVI C'« RRC B'O В В В В B'« 1 - LX1 STAX INX INR DCR MVI RAL - DAD LDAX DCX INR DCR MVI RAR DrO D D D D D't D D D E E E't 2 - LXI CHLD INX INR DCR MVI DAA - DAD LHLD DCX INR DCR MVI CMA HrO « H H H H'« H * H L L L't 3 - LXI STA INX INR DCR MVI STC - DAD LDA DCX INR DCR MVI CMC sp.e 4 SP M M M'« SP * SP A A A'« 4 MOV MOV MOV MOV NOV MOV MOV NOV MOV MOV NOV MOV MOV MOV MOV MOV В'В B'C B'D B'E B'H B'L B'M B'A C'B C'C C'D C'E C»H C'L C'M C'A 5 MOV MOV MOV MOV MOV MOV MOV NOV MOV MOV MOV MOV MOV MOV MOV MOV D'B DrC D'D DrE DrH D'L D'M D'A E'B E'C EtD E'E E'H E»L E'N E'A 6 MOV MOV MOV MOV MOV MOV MOV NOV MOV NOV MOV MOV MOV MOV MOV MOV HrB H'C H'D HrE H'H H'L H'H H'A L'B L'C L'D L'E L'H L'L L'M L'A 7 MOV MOV MOV MOV MOV MOV HLT MOV MOV MOV MOV MOV NOV MOV MOV MOV M'8 M'C M'D MrE M'H M'L N'A A'B A'C A'D A'E A'H A'L A'H A'A 8 ADD ADD ADD ADD ADD ADD ADD ADD ADC ADC ADC ADC ADC ADC ADC ADC В c 0 E H L M A В C D E H L M A ? SUB SUB SUB SUB SUB SUB SUB SUB SBB SBB SBB SBB SBB SBB SBB SBB В c D E H L M A В C D E H L M A A ANA ANA ANA ANA ANA ANA ANA ANA XRA XRA XRA XRA XRA XRA XRA XRA В C 0 E H L M A В C D E H L M A В ORA ORA ORA ORA ORA ORA ORA ORA CMP CMP CMP CMP CMP CMP CMP CMP В C 0 E H L M A В C D E H L M A C RNZ POP JNZ JMP CNZ PUSH ADI RST RZ RET JZ - CZ CALL ACI RST В « « * В 0 « ft Ф 1 D RNC POP JNC OUT CNC PUSH SCI RST RC - JC IN CC - SB1 RST D « N * D * 2 ft H ft 3 E RPO POP JPO XTHL CPO PUSH 1 ANI RST RPE PCHL JPE XCHG CPE - XR1 RST H « ft H x 4 ft « 5 F RP POP JP DI CP PUSH ORI RST RM SPHL JN El CM - CPI RST PSW * RSU 6 ft ft ft 7 (J-ДВУХБАЙТОВЫЙ ОПЕРАНД-DI6 «-ДВУХБАЙТОВЫЙ ОПЕРАНД-ADR «-ОДНОБАЙТОВЫЙ ОПЕРАНД-08 N-HQNEP ПОРТА ВВОДА ВЫВОДА 14
244 восьмиразрядных кода довольно трудно, и поэтому каждому коду ставится в соответствие мнемоническое название (мнемоника) команды, которое является сокращением от английских слов, описывающих ее действие. Мнемонический код команд позволяет легче запомнить их функции и значительно упрощает написание программ. Такой язык написания программ называется языком ассемблера. После того, как программа написана на языке ассем- блера, ее необходимо снова перевести на язык, понятный микро- процессору, т. е. перевести в последовательность двоичных восьми- разрядных чисел. Перевод в последовательность двоичных цифр может происходить автоматически с помощью специальных про- грамм-трансляторов (такие программы в зависимости от ЭВМ, на которой они работают, носят название «кросс-ассемблер», или «ассемблер») или вручную [5]. Для ручной трансляции можно использовать табл. 4, в которой приведены все команды микропроцессора КГ580ИК80. С помощью этой таблицы можно легко и быстро сопоставить мнемонику команды с ее кодом операции. Код операции каждой команды приведен здесь в верхней горизонтальной строке (младшие раз- ряды) и в крайнем левом столбце (старшие разряды) в шестнадцате- ричной системе счисления. Например, команда STAX D имеет код операции 12Н, команда JZ ADR — код операции СА. Функциональное описание команд подробно приведено в лите- ратуре [9], поэтому авторы сочли возможным не останавливаться на этом. Алгоритмы преобразования информации из одной системы счисления в другую Необходимость преобразования информации из одной системы счисления в другую возникает в микропроцессорах при визуали- зации информации для оператора или при ее преобразовании оператором в более удобный для микропроцессора формат. Алгоритм перевода рассмотрим на ряде конкретных приме- ров [30]. Используем для перевода метод непосредственного замещения (или табличный метод). Метод основан на замене каж- дой десятичной цифры двоичным эквивалентом и выполнении вычислений в двоичной системе счисления. Пример 1. Перевести целое десятичное число 541 в двоичное число: 541 = 5-102 + 4-10 + 1 = 0101•10102 + 0100-1010 + 0001 = == 0101-1100100 + 101000+ 0001 = 111110100+ 101001 = 1000011101. Пример 2. Перевести дробное десятичное число 0,541 в двоичное число: - 0‘01 тгёг + 010° Й.-+ ООО. Jy- = 0,0111111110 ... + 0,0000101000 ... + 0,0000000001 ... = 0,1000100111. 15
Пример 3. Перевести целое двоичное число 1000011101 в десятичное число: 1000011101 = 1-29 + 0-28 + 0-27 + 0-2в+ 0-2*+ 1-24 + + 1-23 + 1-22+ 0-21 + 1 -2° = 512 + 16 + 8 + 4 + 1 = 541. Пример 4. Перевести дробное двоичное число 0,1101 в десятичное дробное число: 0,1101 = 1-2"1+ 1-2"2+0-2"3+ 1-2"4 = 0,5+ 0,25+ 0,0625 = 0,8125. Следующие четыре примера иллюстрируют методы перевода чисел из одной системы счисления в другую с использованием операций умножения и деления на основание системы счисления. Пример 5. Перевести целое десятичное число 541 в двоичное число: 541 I-L 540 270 |_2_ 1 270 135 [_2_ 0 134 56 |2_ 1 66 33 |2_ 1 32 16 |_2_ 1 16 8 IJL 0 8 4 |1_ 0 4 2 12 0 2 1 IJL 0 0 Таким образом, (541)1О — (1011100001)2. Пример 6. Перевести целое двоичное число 1000011101 в десятичное число. Перевод будем выполнять по алгоритму: умножить старшую цифру числа на 2; добавить к полученному произведению следующую по порядку цифру числа; умножить результат предыдущей операции на 2; повторять две последние операции до тех пор, пока не будет добавлена млад- шая цифра числа. В соответствии с этим алгоритмом перевода получим: 1-2 = 2 32 + 1 = 33 2 + 0 = 2 33-2 = 66 2-2 = 4 66 + 1 = 67 4 + 0 = 4 67-2 = 134 4-2 = 8 134 + 1 = 135 8 + 0 = 8 135-2 = 270 8-2 = 16 270 + 0 = 270 16+ 0 = 0 270-2 = 540 16-2 = 32 540+ 1 = 541 Пример 7. Перевести десятичное число 0,541 в двоичное. Перевод будем выполнять по алгоритму: умножить число на 2, целая часть полученного результата является старшей цифрой двоичного числа; умножить дробную часть предыдущего результата на 2, целая часть полу- ченного результата является очередной цифрой двоичного числа; повторять последнюю до тех пор, пока не будет получено достаточное коли- чество цифр двоичного числа либо дробная часть не станет равной нулю. 16
Алгоритм перевода реализует следующие действия: 0,541-2 = 1,082 0,082-2 = 0,164 0,164-2 = 0,328 0,328-2 = 0,656 0,656-2 = 1,312 0,312-2 = 0,624 0,624-2 = 1,248 (0,541)10 = 0,1000101 Пример 8. Перевести дробное двоичное число 0,1101 в десятичное число. Перевод будем выполнять по алгоритму: разделить младшую цифру числа на 2; добавить к предыдущему результату следующую по порядку цифру; разделить полученный результат на 2; повторять две последние операции до тех пор, пока не будет добавлена стар- шая цифра числа; после этого разделить полученную сумму на 2. Алгоритм перевода реализует следующие действия: 1 : 2 = 0,5 0,5 + 0 = 0,5 0,5:2 = 0,25 0,25+ 1 = 1,25 1,25 : 2 = 0,625 0,625+ 1 = 1,625 1,625 : 2 = 0,8125 (0,1101)2 = (О,8125)1о 2. ОСНОВНЫЕ ПОЛОЖЕНИЯ АЛО ЦИФРОВЫХ ЭВМ Для описания арифметическо-логических основ (АЛО) цифро- вых ЭВМ широко применяют функции алгебры логики (ФАЛ). Например, ФАЛ используется при проектировании аппарату- ры микроЭВМ (при создании схем управления, дешифраторов, счетчиков, комбинационных схем) и ее программного обеспечения, ФАЛ является тем инструментарием инженера, который позво- ляет легко формализовать задачу, а следовательно, и наметить путь ее решения. ФАЛ могут быть пред- ставлены в двух основных формах [26]. При таблич- ном способе представления ФАЛ каждому набору значений (..., Х}, Хк, Xi, ...) переменных ста- вится в соответствие зна- чение логической функции f (..., Х}, Хк, Xi, ...), Таблица 5 17
и все это оформляется в таблицу (табл. 5), которую называют таблицей истинности. При аналитической форме записи ФАЛ (см. табл. 5) можно использовать совершенную дизъюнктивную нормальную форму (СДНФ): f (Хъ Х2, Х8) = Х.Х.Хг 4- Х3Х2Хг + Х8Х2Хх, (1) где Х3Х2Хх, Х3Х3Хг, Х3Х3Хх называются минтермами, или совершенной конъюнктивной нормальной формой (СКНФ): f (Х1( Х2, Х8) = (Хг 4- Х2 + Х8) (Хх 4- х2 4- Х3) х х (Хх 4- Х2 + Х3) (Хх 4- Х2 4- Х8) (X, + Хг + Х3), где сомножители называются макстермами. Хотя в общем случае выражение для ФАЛ может включать различные элементарные логические функции (например, функ- цию Пирса, Шеффера и др.), но в практике работы с ними наи- более широко применяется базис И—ИЛИ—НЕ. Для ФАЛ справедливы четыре основных закона, регламенти- рующих порядок выполнения операций И, ИЛИ, НЕ в любом логическом выражении и обеспечивающих адекватность преобра- зований логических функций из одной формы в другую: 1) пере- местительный (коммутативный); 2) сочетательный (ассоциа- тивный); 3) распределительный (дистрибутивный); 4) инвер- сии (правило Де Моргана). Приведем совокупность формул на применение перечислен- ных основных законов [26]. Переместительный закон: Xi + Х2 = Х2 + х1; ХгХ2 = Х2Хх. Сочетательный закон: Хг + (Х2 + Х3) = (Хх + Х2) + Х3; Хх (Х2-Х3) = (ХхХ2) х8. Распределительный закон: хх + х2х8 = (Хх 4- Х2) (Хх 4- Хз); (Х2 + Х3) Хх = Х1Х2 4- Х1Х3. Закон инверсии: ХЛ = Хх 4- Х2; Хх + Х2 = ХхХ2. Применяя основные законы алгебры логики к ФАЛ, можно минимизировать их запись, при этом минтермы и макстермы уже 18
не будут иметь одинаковый ранг, т. е. содержать одинаковое число переменных. Отметим, что запись ФАЛ в виде СДНФ или СКНФ не яв- ляется минимальной. Стремление минимизировать запись ФАЛ всегда имеет цель уменьшить число переменных и их сочетаний в образовании функции, что впоследствии снижает объем про- граммы или аппаратуры, необходимой для ее реализации. Вместе с тем более компактная запись ФАЛ позволяет повысить «обозри- мость» логических выражений, а значит, найти и применить более мощные операции по их обработке. В этой связи пред- ставляет интерес упрощенная запись ФАЛ (СДНФ или СКНФ) в числовой форме. Такая запись вместо термов (макстермов или минтермов) содержит лишь номера наборов (десятичный номер равен двоичному эквиваленту набора) переменных. Например, выражение (1) может быть записано в виде НХь Х2, Х3)- V (0, 3, 4), 1 и это означает, что функция принимает значение единицы на наборах, номера которых равны 0, 3 и 4. Функции алгебры логики могут быть реализованы аппарат- ными средствами (например, на базе программируемых логи- ческих матриц и других интегральных схем) или программно. В гл. 3 показано, что нет принципиального различия в этих двух видах реализации, отличие, в реализации ФАЛ состоит лишь в материальных затратах и быстродействии. 3. ПЕРЕДАЧА ДАННЫХ ПО ЛИНИЯМ СВЯЗИ. КОНТРОЛЬ НА ЧЕТНОСТЬ И НЕЧЕТНОСТЬ По линиям связи семиразрядный код КОИ-7 передается и при- нимается как восьмиразрядный код, в котором крайний левый бит используется для проверки на четность. Проверка на четность широко применяется в вычислительных системах при пересылке данных между блоками системы. В случае кода КОИ-7 седьмой бит устанавливается в нуль или единицу так, чтобы общее число единиц во всех восьми битах оказалось четным числом. Пред- положим, что символ передается из периферийного устройства в оперативную память или процессор. Если при передаче произо- шло случайное изменение одного из разрядов (нуль изменился на единицу или наоборот), то число единиц в принятом байте уже не будет четным. Следовательно, ошибка в передаче одного из разрядов байта может быть определена простым контролем на четность или нечетность числа единиц в байте [3]. В микропроцессорных системах установка седьмого бита и контроль его состояния могут осуществляться техническими сред- ствами и средствами программного обеспечения. В первом случае это выполняется посредством логических схем ИСКЛЮЧАЮЩЕЕ 19
ИЛИ [27], связанных между собой в древовидную структуру. При контроле семиразрядного кода КОИ-7 биты группируют, в пары, далее осуществляют операцию ИСКЛЮЧАЮЩЕЕ ИЛИ. Полученные результаты снова группируют в пары и снова при- меняют ИСКЛЮЧАЮЩЕЕ ИЛИ и т. д. до тех пор, пока в ре- зультате не получают значение только одного бита, который сравнивают со значением контрольного разряда. Программное определение четности или нечетности чаще всего основано на анализе признака четности регистра флажков микропроцессора. Использование контрольного разряда позволяет лишь обнаружи- вать ошибки, но не исправлять их.
ГЛАВА 2 ЭЛЕМЕНТАРНЫЕ ПРИЕМЫ ПРОГРАММИРОВАНИЯ В этой главе описаны особенности применения отдельных команд микропроцессора, программная модель микропроцессор- ной системы, а также более 50 практических программ, иллюстри- рующих элементарные приемы программирования. Ввиду чрез- вычайной простоты описываемых программ авторы сочли возмож- ным не приводить комментарии. 1. ПРОГРАММНАЯ МОДЕЛЬ МИКРОПРОЦЕССОРНОЙ СИСТЕМЫ Система команд микропроцессора — это полный перечень эле- ментарных действий, которые может выполнить микропроцессор. Управляемый командами микропроцессор выполняет очень про- стые действия, однако с помощью этих действий (команд) можно запрограммировать любую сложную операцию. Проектировщику МПС необходимо запомнить весь перечень команд и хорошо представлять действия, которые будет выполнять микропроцессор при их обработке. Программная модель МПС, построенная на базе микропро- цессора серии КР580, состоит из следующих элементов: программно-доступных регистров и триггеров разрешения прерывания; программно-доступных восьмиразрядных ячеек ОЗУ; программно-доступных восьмиразрядных регистров. Программно-доступные регистры микропроцессора — это ре- гистры общего назначения, регистр указателя стека, регистр признаков и регистр счетчика команд. Разряды регистров нуме- руются справа налево целыми числами, начиная с нуля. Регистр общего назначения (РОН) — это один из шести восьми- разрядных регистров микропроцессора, обозначенных буквами В, С, D, Е, Н, L, или аккумулятор, обозначенный буквой А. Ре- гистры Ви С, D и Е, Н и L в некоторых командах рассматри- ваются как шестнадцатиразрядные регистры, называемые реги- стровыми парами. Регистры В, D и Н образуют старшие восемь разрядов регистровых пар, а регистры С, Е и L — младшие. Регистр указатель стека (SP) — это шестнадцатиразрядный регистр, который содержит адрес вершины стека. Стек — это динамическая последовательная структура данных в ОЗУ, орга- низованная таким образом, что очередная запись данных всегда 21
осуществляется в вершину (на- чало) стека [5]. Максимальный размер стека равен адресуемой емкости памяти. В вершину сте- ка могут записываться только шестнадцатибитные данные. При записи данных в стек содержи- мое регистра указателя стека уменьшается на 2, а при считы- вании — увеличивается на 2. 7 6 5 4 3 2 10 S Z 0 АС 0 Р 1 CY Рис. 2. Распределение признаков по разрядам: S — признак знака; Z —признак нуля; АС — признак дополнительного переноса; Р — признак четности; С — признак пе- реноса Регистр признаков (F) — это восьмиразрядный регистр, содер- жащий признаки результата выполнения команды (рис. 2). Для большинства команд признаки устанавливаются следу- ющим образом: признак S — единица, если седьмой разряд результата равен единице, в противном случае — нуль; признак нуля Z — единица, если во всех разрядах результата нули, в противном случае — нуль; признак дополнительного переноса — единица при переносе из третьего разряда или при заеме в третий разряд результата, в противном случае — нуль; признак четности Р — единица, если результат в двоичном коде содержит четное количество единиц, в противном случае — нуль; признак переноса — единица при переносе из седьмого раз- ряда или при заеме в седьмой разряд результата, в противном случае — нуль. Аккумулятор и регистр признаков образуют слово состояния процессора, обозначенное буквами PSW. Аккумулятору соответ- ствуют восемь старших разрядов, а регистру признаков — младшие. Регистр счетчика команд (PC) — это шестнадцатиразрядный регистр, указывающий адрес следующей команды, которая должна быть выполнена микропроцессором. Триггер разрешения прерывания используется для управле- ния прерываниями микропроцессора. Если триггер установлен в единицу, то прерывание разрешается, если триггер установлен в нуль, то прерывание запрещается. Программно-доступные восьмиразрядные ячейки ОЗУ исполь- зуются в качестве памяти МПС. Разряды ячейки ОЗУ нумеруются справа налево целыми числами, начиная с нуля. Максимальная емкость памяти, реализуемой запоминающим устройством, равна 65 536 байт. Программно-доступные восьмиразрядные регистры использу- ются для ввода и вывода. Максимальное число регистров для ввода данных составляет 256, для вывода данных — столько же. Особенности системы команд. Команды микропроцессора ис- пользуют только те элементы данных, обработка которых осуще- 22
ствляется непосредственно микропроцессором, т. е. восьми- и шестнадцатибитовые. Восьмибитовые данные — это восемь би- тов (один байт), которые хранятся в РОН или ячейке памяти и обрабатываются микропроцессором как одно целое. Шестнадцатибитовые данные — это 16 бит (два байта) данных, которые могут храниться в шестнадцатиразрядном регистре или в двух последовательных ячейках памяти и обрабатываются микропроцессором как одно целое, причем в памяти старшие восемь бит записываются по адресу на единицу большему, чем адрес младших. При адресации шестнадцатибитовых данных указывается адрес младшей ячейки памяти, содержащей эти данные. Операнды команд могут храниться в программно-доступных регистрах микропроцессора или в памяти МПС. Для указания операнда в регистре используются: регистровая адресация и ре- гистровая неявная адресация. При регистровой адресации в коде команды существует поле для указания регистра, содержащего операнд. При регистровой неявной адресации специального поля в коде команды нет. Для указания операнда в памяти используются адресации: непосредственная, прямая, косвенная и стековая. При непосредственной адресации операнд задается в команде. При прямой адресации в команде указывается адрес операнда. При косвенной регистровой адресации адрес операнда указывается в регистровой паре или для команды XTHL — в регистре указа- теля стека. При стековой адресации адрес операнда указывается в регистре указателя стека, причем после обращения к операнду содержимое указателя стека автоматически увеличивается или уменьшается на 2. Таким образом, в системе команд микропроцессора КР580ИК80 имеется шесть способов адресации операндов. Машинные команды микропроцессора делятся на группы: команды пересылки данных, арифметические команды, команды поразрядной обработки данных, команды передачи управления, команды управления микропроцессором. Группа команд пересылки данных-. команды пересылки данных общего назначения (MOV, MVI, LDA, STA, LHLD, SHLD, LXI, LDAX, SPHL, STAX, XCHG, XTHL); команды обращения к стеку (PUSH и POP); команды ввода (IN) и вывода (OUT). Группа арифметических команд: команды сложения (ADD, ADI, ADC, АС1, INR, INX, DAD); команды вычитания (SUB, SUI, SBB, SBI, DCR, DCX); команда десятичной коррекции содержимого аккумулятора (DAA). Группа команд поразрядной обработки данных: логические команды (ANA, ANI, ORA, ORI, XRA, XRI); 23
команды сравнения (CMP, CPI); команды сдвига (RLC, RRC, RAL, RAR); команды инверсии содержимого аккумулятора (СМА). Группа команд передачи управления: команды безусловною перехода (JMP, PCHL); команды условного перехода (JNC, JC, JNZ, JZ, JPO, JPE, JP, JM); команды безусловного вызова подпрограмм (CALL, RST); команды условного вызова подпрограмм (CNZ, CZ, CNC, СС, СРО, CPE, СР, СМ); команда безусловного возврата из подпрограммы (RET); команды условного возврата из подпрограмм (RNZ, RZ, RNC, RC, RPO, RPE, RP, RM). Группа команд управления микропроцессором: команды управления признаком переноса (CMC, STC); команды управления триггером разрешения прерывания (El, DI); команда «нет операции» (NOP); команда останова микропроцессора (HLT). Число различных команд микропроцессора составляет 78, и для них зарезервировано 78 имен команд, перечисленных выше. Многие базовые команды из числа 78 порождают несколько раз- личных кодов операций, поэтому общее число кодов команд составляет 244 (см. табл. 4). Время выполнения команды, оцениваемое числом тактов микро- процессора, составляет 4—18 тактов. Для подавляющего числа команд время выполнения команды (число тактов) есть величина постоянная, однако существуют команды, для которых это время может меняться. Такими командами являются команды условного вызова и возврата из подпрограмм. Время выполнения команды зависит от того, выполняется условие или нет. Как правило, если условие выполняется, время выполнения команды суще- ственно увеличивается. Построение программ. Программа контроллера состоит из одной или нескольких законченных частей, называемых про- граммными модулями. Программный модуль на языке ассемблера называется исходным модулем. Результатом трансляции исходного модуля является объектный модуль. В общем случае программа контроллера состоит из следующих компонентов: команд и данных. Расположение компонентов машинной программы в памяти на- зывается структурой машинной программы. Машинную программу (составляющие ее сегменты) можно перемещать в памяти, настраивая ее на определенный адрес. Применяется побайтовое внутристраничное и постраничное перемещение сегментов программы. Побайтовое перемещение предназначено для настройки сег- мента на любой абсолютный адрес памяти; при этом должны кор- ректироваться старший и младший байты относительного адреса. 24
Страница — это часть памяти, адрес начала которой кратен 256, т. е. равен 00001в, 010018, 02001в, ..., FF0018. Адресация первой ячейки памяти страницы осуществляется старшим байтом адреса, адресация внутри страницы — младшим байтом адреса. Постраничное перемещение предназначено для настройки сегмента на адрес начала страницы. При этом типе переме- щения корректируется только старший байт относительного адреса. Внутристраничное перемещение предназначено для настройки сегмента на любой адрес внутри страницы. При таком типе пере- мещения корректируется только младший байт адреса. 2. ОРГАНИЗАЦИЯ ОБРАБОТКИ ОДНОБАЙТНЫХ ДАННЫХ Ниже приведены практические программы, а также примеры небольших задач с решениями и примеры применения отдельных команд. Пример 9. Примеры команд НЕТ ОПЕРАЦИИ: NOP, MOV D, D, MOV В, В. Пример 10. Результат действия операции DCR А, если (А) = ООН, состав- ляет (А) = FFH. Пример 11. Какие изменения происходят с регистрами по команде СМРЕ, если а) (А) = 02Н, (Е) = 05Н. Решение: (А) - 02Н, (Е) = 05Н, Z = 0, С = 1; б) (А) — —IBH, (Е) = 05Н. Решение: (А) — IBH, (Е) = 05Н, Z = 0, С - 0; в) (А) - ОАН, (Е) = 05Н. Решение: (А) - ОАН, (Е) - 05Н, Z = 0, С = 0. Пример 12. Какую команду можно использовать для сброса бита пере- носа С и установки аккумулятора в нулевое состояние? Ответ: SUB А. Пример 13. Когда команда условного перехода эквивалентна команде НЕТ ОПЕРАЦИИ? Ответ: когда условие не выполняется. Пример 14. Что произойдет с признаком переноса С по команде SUBL, если (L) = 02Н, С = 1, (А) = 04Н? Ответ: Сброс признака С. Пример 15. Для каких целей можно использовать команду XRA? Ответ: а) для установки аккумулятора в нулевое состояние (XRA А); б) для инвертирования содержимого регистра CM VI A, FFH; XRA В); в) для быстрого определения, какие биты слова изменяются. Пример 16. Загрузить в триггер переноса значение разряда D6 содержи- мого регистра L: MOV A, L RLC RLC Пример 17. Получить дополнительный код числа, хранящегося в аккуму- ляторе: СМА INR А 25
Пример 18. Заменить число, хранящееся в ячейке с адресом 0200Н, на то же число в дополнительном коде: LXI Н, 0200Н MOV А, Н СМА INR А MOV М, А Пример 19. Определить результат выполнения команд (содержимое регистра микропроцессора и регистра признаков) Команда Условие Решение INR C (C)=99H (C)=9AH СМА DAA (A)=51H (A)=9BH *C"=0, "A"=0 (A)=3FH (A)-OAEH ADD D (A)=6CH, (D)=2EH (A)=99H, wCw=0, "Z"=0 WPW=1, "S"—1, "AC"= 1 ADC C (C)=3DH, (A)—42H ;C"=0 (A)=7FH, *C"=0, "S"=0 "Z'=0, ^=0, "AC"=0 SUB A (A)=3EH o“ II CO o’— ON o’ — I11 <Q. "% ANA C (A)=FCH, (C)=0FH (A)=0CH ORA RLC RRC RAL RAR C (A)=33H, (C)=0FH (A)=0F2H (A)=0F2H (A)=0B5H, wCw=0 (A)=6AH, *C*=1 (A)=3FH (A)=05EH, *C"= 1 (A)=79H, wCw=0 (A)=6AH, "C"=l (A)=0B5H, wCw=0 Пример 20. Сложить число 15D и 60D и поместить результат в ячейку памяти с адресом АВВАН: LXI H, АВВАН MVI A, 15D MVI B, 60D ADD В MOV M, A Пример 21. Проверить состояние нулевого бита регистра С Способ Г. MVI А, 00000001В ANA С Если разряд DO регистра С равен нулю, то бит нуля Z регистра признаков установится в единичное состояние и к нужной подпрограмме можно перейти по команде JZ. Способ 2 : MOV А, С ANI 00000001В Если разряд DO регистра С равен нулю, то бит нуля Z регистра признаков не устанавливается в единичное состояние, значит, можно использовать команду JNZ для перехода к нужной подпрограмме. Пример 22. Изменить содержимое ячейки памяти ABBA в разряде D5. Принять содержимое ячейки памяти равным 01110100В. Подпрограмма имеет вид: LXI Н, АВВАН MOV А, 00100000В XRA М 26
Команда XRA М выполняется над содержимым ячейки памяти и содержимым регистра А. Результат помещается в ячейку памяти. Пример 23. Загрузить в регистр признаков (триггер С) значение разряда D5 содержимого регистра D: Способ /: Способ 2: MOV A, D MOV A, D RLC RRC RLC RRC RLC RRC RRC RRC Пример 24. Непрерывно, начиная с числа 01Н, наращивать на единицу содержимое регистра А до появления признака переноса. При появлении при- знака переноса переслать содержимое регистра А в регистр В: BEGIN: ADI 01Н JNC BEGIN MOV B, A Пример 25. Загрузить в ячейку памяти с адресом АВВАН число 100D и уменьшать его на единицу до тех пор, пока результат не станет равным нулю: LXI Н, АВВАН MVI М, 100D MIN: DCR М JNZ MIN Пример 26. Вычесть содержимое ячейки памяти с адресом АВВ9Н из содер- жимого ячейки памяти с адресом АВВАН и осуществить переход к ячейке памяти с адресом NEG, если результат окажется отрицательным: LXI H, АВВАН MOV A, M DCR L SUB M JM NEG Пример 27. Имеется ряд чисел, хранимых в ячейке памяти с последовательно возрастающими адресами, начиная с адреса АВВАН. Требуется записать про- грамму, по которой эти числа будут складываться одно с другим до появления признака переноса. Адрес последнего числа, участвующего в сложении, должен быть выдан в порты с адресами 04Н и 05Н. Подпрограмма имеет вид: AGAIN: LXI H, АВВАН MOV A, M INR L ADD M JNC AGAIN MOV Л. H OUT 04 H MOV A, L OUT 05H HLT Пример 28. Написать подпрограмму, которая вырабатывает временную за- держку длительностью 100 мкс. Примем, что длительность такта равна 0,5 мкс. Подпрограмма имеет вид: CALL DELAY 17 тактов DELAY: MVI B, X 7 тактов FORWORD: DCR В 5 тактов JNZ FORWORD 10 тактов RET 10 тактов 27
Основной задачей является правильный расчет величины X, т. е. числа, ко- торое будет предварительно загружаться в регистр В, выполняющий функцию счетчика. В наиболее простом случае величина X может быть рассчитана по формуле где скобки ] [ означают, что результат должен быть получен отбрасыванием дроб- ной части; t3 — заданная величина задержки; t0 — время, требуемое для одно- кратно выполняемых команд; — время цикла, требуемое для выполнения цик- лически повторяемых команд. В рассматриваемом случае t3 = 100 мкс; t0= (17+ 7+ 10)0,5 = 17 мкс; /ц = (10 + 5) 0,5 = 7,5 мкс; У 100—17 Х~ 7,5 - 1L Если принять X = 11, получим t3 = 17+ 11-7,5 = 99,5 мкс. Иногда та- кая точность формирования задержки бывает достаточной, в противном же слу- чае (когда требуется большая точность задержки) поступают следующим обра- зом: уменьшают полученное значение X на единицу или несколько единиц, а по- лученное уменьшение /3 компенсируют командой NOP, используемой много- кратно; изменяют значение /ц путем включения в цикл других команд (например, MOV А, А). Воспользуемся первым способом. Примем X == 10. В этом случае t3~ 17 + + 10-75 = 92 мкс. Необходимые еще добавочные 8 мкс получим включением в программу четырех команд NOP; длительность программы 2 мкс. Окончатель- ная программа задержки t3 = 100 мкс имеет вид DELAY: MVI B, 10D FOFWORD: DCR В JNZ FORWORD NOP NOP NOP NOP RET Пример 29. Написать программу включения и выключения индикатора, который подключен к разряду DO порта 2. Индикатор включен, если DO = 1, и выключен, если DO = 0. Время включенного и выключенного состояния оп- ределяется подпрограммой ALARM: MVI A, 01H FLASH: OUT 02H CALL DELAY XRI 01H JMP FLASH 28
Пример 30. Написать подпрограмму задержки t3 = 1 с: DELAY: MVI B, FFH LOOP1: MVI C, FBH LOOP2: NOP NOP NOP NOP DCR C JNZ LOOP2 DCR В JNZ LOOP1 RET Для получения задержки большей длительности можно использовать п- кратный прогон программы DELAY или для записи числа повторений отвести ряд ячеек памяти ОЗУ. Пример 31. Сдвинуть содержимое А на один ряд вправо; в старший разряд поместить нуль: RRC ANI 7FH Пример 32. Загрузить А числом из ячейки TEMP, далее сдвинуть содержи- мое А на один разряд вправо, в старший разряд поместить нуль и результат за- помнить в ячейке памяти TEMP: LDA TEMP RRC ANI 7FH STA TEMP Пример 33. Сдвинуть содержимое А на переменное число битов, которое определяется содержимым регистра D: LOOP: RRC ANI 7FH DCR D JNZ LOOP Пример 34. Сдвинуть содержимое ячейки памяти TEMP на переменное число битов, которое определяется содержимым регистра D: LDA TEMP LOOP: RRC ANI 7FH DCR D JNZ LOOP ST A TEMP Пример 35. Загрузить регистр В содержимым ячейки памяти, адрес которой хранится в двух байтах ОЗУ, начиная с ячейки INADDR: LHLD INADDR MOV В, М Пример 36. Загрузить в аккумулятор число BYTE и установить в третьем разряде единицу: EST: MVI A, BYTE ; Байтов А ORI 08Н ; HLT ; Останов
Пример 37. Загрузить в аккумулятор число BYTE и установить в третьем разряде нуль: CLBIT: MVI A, BYTE ; Байт-»-в A ANI F7H HLT ; Останов Пример 38. Загрузить в аккумулятор число ВУТЕ и проинвертировать содер- жимое третьего разряда ВЗ, принять В3= 1: INVBIT: MVI A, BYTE ; Байтов А XRI 08Н ; HLT ; Останов Пример 39. Написать программу генерации разрядов четности для ячейки памяти TDATA. Принять, что генерируемый разряд записывается в седьмом раз- ряде байта. Генерация разрядов четности выполняется благодаря наличию специального признака четности. Программа имеет вид GCH: LDA ANA TDATA A ; Считать в А байт (в 7-м разряде «0») ; Число единиц четно? JPE TRANS ORI 80H ; Если нет, установить седьмой раз- ряд в «1» TRANS: STA TDATA ; Поместить байт с четным числом «1» в ячейку памяти RET Пример 40. Написать программу, выполняющую проверку на четность со- держимого аккумулятора. Проверка на четность реализуется ности: PCH: ANA А JPO PRERR STA RDATA RET помощью специального признака чет- ; Число единиц четно ; Нет — ошибка ; Поместить байт с четным числом ; «1» в ячейку памяти Пример 41. Написать программу на языке ассемблера, осуществляющую подсчет числа единиц в байте. В программе примем следующие соглашения; исследуемый байт находится в аккумуляторе: в регистре В находится счетчик цикла; результат (число единиц в байте) помещается в регистр С. Суть работы программы состоит в том, что после каждого выполнения тела цикла, т. е. сдвига содержимого А влево и увеличения на единицу содержимого счетчика единиц (если это необходимо), осуществляется уменьшение на единицу содержимого регистра В. При отличном от нуля результате (признак Z равен нулю) осуществляется переход на метку Ml; при нулевом результате (2 = 1) выполне- ние цикла завершается. Программа подсчета числа единиц в байте: COUNT 1: MVI С, ООН MVI В, 08Н RLC JNC М2 INR С DCR В JNZ Ml RET 30
3. ОРГАНИЗАЦИЯ ОБРАБОТКИ МНОГОБАЙТНЫХ БЛОКОВ ДАННЫХ Чтобы читатель почувствовал себя увереннее в написании программ, разберем еще ряд примеров, с которыми часто при- ходится сталкиваться на практике при обработке многобайтных блоков данных, при организации ввода-вывода. Пример 42. Какой байт адресуется при обращении с шестнадцатеричным данным? Ответ: младший байт. Пример 43. Указать варианты хранения в МПС шестнадцатеричных данных. Ответ: а) в регистровой паре; б) в двух смежных ячейках памяти. Пример 44. Какая команда передает содержимое регистровой пары HL в регистр указатель стека SP? Ответ: SPHL Пример 45. Каким образом можно передать содержимое регистров DE в ре- гистр указатель стека SP? Решение: XCHG SPHL XCHG Пример 46. Загрузить в регистровую пару HL число АВВАН Способ Г. Способ 2: MVI Н, ABH LXI Н, АВВАН MVI L, ВАН Способ 2 лучше, так как программа занимает в памяти 3 байт, а в программе по способу 1 — 4 байт. Пример 47. Расширить систему команд микропроцессора КР580ИК80 вве- дением программ, реализующих способы косвенной и индексной адресации [29]. Косвенная адресация применяется при работе с таблицами, при обработке одинаковых блоков данных несколькими программами. Команды микропроцес- сора КР580ИК80 не имеют косвенной адресации, и поэтому ее можно реализо- вать только с помощью программ. При косвенной адресации одним из операндов команды является так называемый косвенный адрес, который задает ячейку па- мяти, хранящую адрес собственно требуемого операнда. Будем считать, что в ОЗУ МПС имеется некоторая зона, в которой хранятся косвенные адреса. Пусть АВВАН — базовый адрес начала этой зоны памяти. Приведем ряд «команд» с косвенной адресацией, реализованных программно. Программа безусловного перехода к косвенному адресу: LHLD АВВАН PCHL Программа вызова подпрограммы по косвенному адресу: LHLD АВВАН CALL INADD INADD: PCHL Программа загрузки содержимого ячейки памяти с косвенным адресом АВВАН в аккумулятор: LHLD АВВАН MOV А, М Программа загрузки содержимого аккумулятора в ячейку памяти с кос- венным адресом: LHLD АВВАН MOV М, А 31
Программа сложения содержимого аккумулятора с операндом по косвенному адресу: LHLD АВВАН ADD М Индексная адресация применяется в том случае, когда требуется указать адреса ячеек памяти, содержащие таблицу данных в выбранной зоне памяти. Первый адрес этой таблицы образует основной, или базовый, адрес, который яв- ляется фактически указателем зоны оперативной памяти. Индекс задает относи- тельное положение ячейки памяти в этой таблице. Пусть BASE — базовый адрес таблицы, а в регистровую пару DE перед обращением к программе загружается индекс. Приведем ряд «команд» с индекс- ной адресацией, реализованных программно. Программа вычисления прямого адреса с использованием адреса LXI Н, BASE DAD D Программа безусловного перехода к индексному адресу: LXI Н, BASE DAD D PCHL Часто представляется полезным комбинировать косвенную и индексную ад- ресации. Программа загрузки содержимого ячейки памяти с косвенно-индексной ад- ресацией в аккумулятор: LXI Н, BASE DAD D MOV A, M Пример 48. Установить в нуль область ОЗУ, начиная с адреса 2200Н, содер- жащую 5 байт: CLR: LXI Н, 2200Н MVI В, 05Н MVI М, ООН DCR В INX Н JNZ Ml RET Пример 49. Установить в нуль область памяти, начиная с ячейки ADDR1 и кончая ячейкой ADDR2: LXI LXI H, ADDR1 D, ADDR2 BIG: MVI M, OOH INX H MOV A, H SUB D JNZ BIG MOV A, E SUB L JNZ BIG MVI M, OOH HLT 32
Пример 50. Выполнить пересылку массива данных, содержащего 5 байт и расположенного начиная с адреса 2200Н, в зону памяти начиная с адреса 221 ОН: PMON: LXI H, 2200H LXI D, 2210H MVI В, 05H Ml: LDAX D MOV M, A INX H INX D DCR В JNZ Ml RET Пример 51. Произвести обмен содержимым блоков памяти, расположенных начиная с адресов 2200Н и 22ЮН и содержащих по 5 байт: OBM: LXI H, 2200H LXI D, 2210H MVI В, 05H Ml: LDAX D MOV C, A MOV A, M STAX D MOV M, C INX H INX D DCR В JNZ RET Ml Пример 52. Сдвинуть массив данных (5 байт), расположенный начиная с адреса 2201Н, на один байт влево. Будем считать, что элементы массива распо- ложены слева направо по возрастающим адресам: MRL: LXI MVI H, 2201H В, 05H MOV E, L MOV D, H DCX D Ml; MOV A, M STAX D INX D INX H DCR В JNZ Ml RET Пример 53. Сравнить массивы данных, содержащие по 5 байт и расположен- ные начиная с адресов 2000Н и 22ЮН соответственно. Код неравенства соответ- ствующих байтов массива поместить в аккумулятор; в регистровой паре HL сохранить адрес неравных байтов. CMPO: LXI H, 2200H LXI D, 2210H MVI В, 05H Ml: LDAX D CMP M JNZ М2 INX H INX D DCR В 2 В. Г. Майоров 33
М2: JNZ Ml MVI H, OOH RET XRA M RET Пример 54. Написать программу проверки работоспособности ОЗУ. Для проверки ОЗУ использовать следующий алгоритм: запись в ячейку всех единиц; считывание содержимого ячейки и проверка; запись в ячейку всех нулей; считывание содержимого ячейки и проверка. Примем, что в регистровой паре DE содержится ADDR1 — начальный ад- рес проверяемого блока ОЗУ. Емкость ЕМК проверяемого блока ОЗУ поместим в счетчик-регистровую пару HL. Программа имеет вид: TOZU: LXI LXI H, EMK D, ADDR1 М2: MVI A, OOH STAX D LDAX D ADI OOH JNZ Ml MVI A, FFH STAX D LDAX D CPI FFH JNZ Ml INX D DCX H MOV A, H CPI OOH JNZ М2 MOV A, L CPI OOH JNZ RET М2 Ml — подпрограмма вывода на индикацию адреса и данных неисправной ячейки ОЗУ. 4. ОРГАНИЗАЦИЯ ВВОДА-ВЫВОДА ДИСКРЕТНОЙ И АНАЛОГОВОЙ ИНФОРМАЦИИ Ниже приведены программы, поясняющие организацию ввода и вывода информации через порты микропроцессорной системы. Ввод-вывод через порты МПС осуществляется специальными командами микропроцессора: IN ADDR и OUT ADDR, где ADDR — адрес внешнего устройства. Так как адрес внешнего устройства указывается в одном байте, то микропроцессор может обмениваться информацией не более чем с 256 внешними устрой- ствами. Рассмотрим применение команд ввода-вывода на кон- кретных примерах. Пример 55. Принять информацию из порта с адресом PORT1 и записать ее в порт с адресом PORT2: М: IN PORT1 OUT PORT2 JMP Ml 34
Пример 56. Проверить значение разряда D3 порта 05Н и перейти к про- грамме А в том случае, если D3 = 0, и к программе В, если D3 = 1. Программа имеет вид: IN 05Н ANI 08Н JZ А В: ... Первая команда программы В А: ... Первая команда программы А Пример 57. Постоянно опрашивать значение разряда D5 порта 05Н до тех пор, пока значение D5 не станет равно нулю. Осуществить возврат в основную программу, если значение разряда D5 = 0. Подпрограмма имеет вид: Ml: IN 05Н ANI 20Н JNZ Ml RET Пример 58. Рассмотрим организацию программы обслуживания аналого- цифрового преобразователя, имеющего следующие параметры: число разрядов— 12; KANAL — адрес ячейки памяти, где хранится номер обслуживаемого ка- нала АЦП; ADDRZ — адрес порта; запись содержимого ячейки KANAL в порт вызы- вает подключение к АЦП аналогового входа, номер которого равен коду, содер- жащемуся в ячейке KANAL, и запуск АЦП; ADR SB — адрес порта, в котором после аналого-цифрового преобразова- ния хранится код старшего байта; ADRMB — адрес порта, в котором после аналого-цифрового преобразова- ния хранится код младшего байта; ADRR — адрес порта, запись в который кода PAR вызывает очистку содер- жимого всех портов и запрет преобразования; снять запрет может только запись кода номера канала в порт; FORMAT — подпрограмма преобразования двоичного кода со знаком в фор- мат с плавающей запятой; CORRECT — подпрограмма цифровой коррекции дрейфа нуля и нелиней- ности АЦП. Опишем общий алгоритм работы АЦП. Микропроцессор подключает к АЦП каналы аналоговых сигналов начиная с номера 1 и кончая номером 8. Для каж- дого канала осуществляется запуск АЦП, и после поступления прерывания от АЦП микропроцессор производит считывание старшего и младшего байтов и за- поминание их в ячейке ОЗУ BASE. Далее двоичный код со знаком переводится в формат с плавающей запятой и записывается в зону ОЗУ MASS. Затем прове- ряется номер канала и, если он равен единице, производится инкремент номера, проверка числа обработанных каналов и возврат в основную программу; если номер канала не равен единице, то производится цифровая коррекция данных, полученных с канала, имеющего номер на единицу меньше, инкремент номера канала, проверку на конец и возврат в основную программу: ADC: MVI STA A, 01H KANAL Ml: El LDA KANAL OUT HLT ADDR2 LXI H, BASE IN ADRMB MOV M, A INX H IN ADRSB 2* 35
MOV M, A CALL FORMAT LDA KANAL XRI 01H JZ М2 CALL CORRECT М2: LDA KANAL INR A STA KANAL CPI 08H JZ М3 JMP MI М3: RET
ГЛАВА 3 ПРОГРАММНЫЕ МОДЕЛИ АППАРАТНЫХ СРЕДСТВ МИКРОПРОЦЕССОРНЫХ СИСТЕМ В общем случае аппаратные средства микропроцессорных систем состоят из множества электронных компонентов: микро- процессора, ОЗУ, ПЗУ, регистров, логических схем и т. п. Не- смотря на их разнообразие, все они могут быть сведены к сово- купности логических элементов и элементов памяти (логического базиса). Развитие средств микропроцессорной техники привело к тому, что применение готовых микроконтроллеров и микроЭВМ стано- вится экономически выгодным в сравнении с проектированием специальных логических схем. При использовании микроконтрол- лера в качестве специализированной логической схемы на него возлагается новая задача — программное моделирование аппарат- ных средств. Основные принципы замены аппаратных средств программ- ными формулируются очень просто: программы могут заменить аппаратные средства, если эта замена удовлетворяет требованиям к быстродействию микро- процессорной системы и если эта замена экономически целесо- образна; программы, заменяющие аппаратные средства, должны моде- лировать функции аппаратных средств, а именно: восприятие, хранение, обработку и выдачу цифровой информации. В общем случае программная модель аппаратных средств со- держит: программу работы микропроцессорной системы; наборы значений входных переменных (сигналов), которые программа перерабатывает в наборы выходных сигналов. Различают два способа построения программной модели [25]: компиляционный и интерпретирующий. При компиляционном способе программной реализации для каждого автомата (дискрет- ного управляющего устройства) строится своя программа. При этом обычно программа для своего выполнения не требует ни- каких исходных данных, кроме задаваемого извне входного набора переменных. При интерпретирующем способе программной реали- зации в памяти микропроцессорной системы находится одна универсальная программа, которая настраивается на реализацию заданного автомата с помощью некоторого заранее задаваемого массива исходных данных. Для реализации какой-либо другой 37
Считывание слово начального состояния bzzzz Считывание входного слова Формирование адреса в памяти Обращение по адресу 8память и считы- вание из нее выход- ного слова и слада следующего состояния Выдача выходного слова функции изменяется не программа, а лишь массивы исходных данных. Рассмотрим способ программной реа- лизации (рис. 3), состоящий в том, что значения заданной булевой функции на всех 2" наборах значений своих пере- менных записываются в память микро- процессорной системы 14, 25]. Считы- ваемое извне слово значений входных переменных суммируется с адресом на- чала описания и образует адрес в мас- сиве, где записано значение реализуемой функции, которое и выдается из МПС. Автомат представляется в памяти масси- вом пар слов, состоящих из слова следу- ющего состояния и слова значений вы- ходных переменных. Форма представления ФАЛ, например СДНФ, СКНФ, ДНФ, КНФ, а также конкретные значения функций на входных наборах во многом определяют особенно- сти программной реализации ФАЛ. Ниже описаны практические програм- Рис. 3. Схема програм- мные модели ФАЛ, элементов памяти, мной реализации автомата импульсных последовательностей и ин- тегральных схем. Читателя, желающего более глубоко изучить эти вопросы, авторы отсылают к книгам 14, 25]. 1. МОДЕЛИРОВАНИЕ ФАЛ, ЗАДАННЫХ ПОЛНОЙ ТАБЛИЦЕЙ ИСТИННОСТИ Каждая система ФАЛ может быть представлена полной табли- цей истинности, в которой всем наборам входных переменных (Xn, Хп_х, •••> -Xi) ставится в соответствие вектор выходных значений ФАЛ (Km, Ym-i, К2, Ух). В качестве примера при- ведена таблица системы ФАЛ с т = 5, п = 4 (табл. 6). Метод программной реализации ФАЛ, заданных полной табли- цей истинности, состоит в следующем: в память МПС записывается массив векторов выходных значе- ний ФАЛ для всех 2" наборов значений входных переменных (в порядке возрастания номера набора); считываемое извне слово значений входных переменных ин- терпретируется как номер строки в массиве, суммируется с на- чальным адресом массива и образует адрес строки выходных значений ФАЛ *. * В общем случае формирование адреса происходит по более сложному алго- ритму. 38
Таблица 6 Система пяти ФАЛ для четырех входных переменных Хл Х3 Х2 Xi Уз 0 0 0 0 0 0 0 1 0 0 10 0 0 11 0 10 0 0 10 1 0 110 0 111 10 0 0 10 0 1 10 10 10 11 110 0 110 1 1110 1 1 о о 1 1 1 1 о 1 1 1 о 1 о о о 1 о о 1 о 1 1 о о о 1 о о 1 1 о 1 о о 1 1 о 1 1 1 1 о 1 о 1 о 1 о о о о 1 1 о 1 1 о о о о о о о о о о 1 о о 1 1 о 1 1 1 1 1 о 2 Примечание. Штриховой линией ограничена часть таблицы, в которой записаны выходные значения ФАЛ. При использовании данного метода затраты памяти на хране ние описания ФАЛ составляют т-2п бит. В том случае, если для всех систем ФАЛ с m < 8 принять 8-битный формат выходного слова, затраты памяти составят 8*2П бит. Следует отметить, что эффективность использования памяти снижается с увеличением числа нулевых выходных векторов. Рассмотрим наиболее простой вариант моделирующей про- граммы. Программа EBF [25] (см. прил. 1, программу 1) поз- воляет вычислять значения системы не более восьми буле- вых функций, зависящих не более чем от восьми переменных. Система булевых функций задается таблицей состояний (табл. 7), содержащей 28 набо- ров восьми входных перемен- ных, упорядоченных по возра- станию представляемых ими двоичных чисел и 28 наборов выходных значений функций. Правая часть таблицы, за- писываемая в память микро- ЭВМ, содержит значения функ- ций и является массивом ис- Табл ица 7 Таблица кодирования наборов входных и выходных значений системы ФАЛ Наборы гтл плмотт T-TT^Y V Наборы выходных переменныл Х8Х7Х6Х6Х4 xsx2x. значений функций 8 7 6 5 4 3 2 1 00000000 10 10 0 10 0 0 0 0 0 0 0 0 1 0 10 10 0 11 0 0 0 0 0 0 1 0 1 0 0 1 0 0 1 0 ходных данных для программы. Присвоим двум ячейкам, в 39
которых записан адрес начала описания правой части таблицы состояний, метку FAN. Далее примем следующие соглашения: входное слово X будет поступать извне в порт EINB; набор из восьми булевых функций будет поступать в порт AUS1. Достоинством подпрограммы EBF являются простота и высо- кое быстродействие. Рассмотрим подпрограмму РМРС (см. прил. 1, программу 2), моделирующую работу преобразователя входного однобайтового кода в выходной двухбайтовый код. Преобразование кодов осу- ществляется табличным способом. Примем, что входной однобайтовый код находится в регистре В и изменяется в диапазоне 0—255. Результат (выходной двух- байтовый код) образуется в регистровой паре D. Е. Положим также, что выходной двухбайтовый код организован в таблицу с начальным адресом АТАВ. Тогда, используя В как индекс строки таблицы, можно найти адрес младшего байта выходного кода по следующей формуле: АТАВ + 2 (В). Очевидно, что подпрограмма РМРС и программа EBF имеют существенный недостаток: если т < 8 (для EBF) или 8 < т < 16 (для РМРС), то в выходном слове появляются разряды, не несу- щие информации, а это приводит к неэкономному использованию памяти. Этого недостатка лишена подпрограмма MODT (см. прил. 1, программу 3), которая вычисляет выходные значения системы ФАЛ для т <; 16 при я < 8 переменных. Особенность организации массива описания ФАЛ для под- программы MODT состоит в том, что запись векторов выходных значений выполняется не побайтно, а «подряд», т. е. в первом байте записываются т разрядов первого вектора и (8 — т) стар- ших разрядов второго вектора; оставшиеся разряды второго вектора записываются во втором байте и т. д. Если т > 8, то основным словом, хранящим вектор выходных значений, яв- ляются 2 байт и более. Входной набор заносится в регистр D, величина т загру- жается в регистр Е, начальный адрес АТАВ массива выходных наборов помещается в регистры Н, L. Выходной вектор форми- руется в регистрах В, С. Объектный код подпрограммы MODT занимает значительный объем в памяти микроЭВМ, поэтому ее целесообразно использо- вать только при моделировании сразу нескольких систем ФАЛ. К недостаткам подпрограммы MODT Можно отнести низкое бы- стродействие. Метод программной реализации ФАЛ с помощью полной та- блицы истинности является наиболее простым среди методов мо- делирования ФАЛ. В следующих параграфах данной главы будут показаны основные способы более компактного описания модели. 40
2. МОДЕЛИРОВАНИЕ ФАЛ, ЗАДАННЫХ В СДНФ Если в полной таблице истинности для системы ФАЛ более половины выходных наборов значений ФАЛ (Ym, Y2, YJ являются нулевыми, то хранить нулевые строки в массиве описа- ния ФАЛ нецелесообразно. В этом случае полная таблица истин- ности может быть преобразована в таблицу СДНФ путем отбрасы- вания строк, где все ФАЛ принимают нулевые значения [таблица соответствует аналитической записи СДНФ (см. гл. 2), включа- ющей только термы, для которых ФАЛ принимает единичное значение]. В качестве примера приведена таблица СДНФ (табл. 8) для некоторой системы восьми ФАЛ (т = 8) от восьми переменных (п = 8). Метод моделирования ФАЛ, заданных в СДНФ, состоит в сле- дующем: в памяти микроЭВМ формируются два массива: массив I входных наборов и массив II выходных значений; в указанных массивах порядковые номера входного набора и соответствующего ему выходного слова должны быть одинаковы; после получения входного слова обслуживающая программа ведет поиск терма, равного входному слову, в массиве входных наборов. Если подобный терм в массиве I не найден, то делается вывод, что выходные значения всех ФАЛ равны нулю. Если же терм найден, то по его порядковому номеру в массиве I опре- деляется адрес соответствующего выходного набора в массиве II. Затраты памяти при использовании этого метода составляют (т -р п) /Сстр бит, где /Сстр — число строк в массивах модели. Если принять 8-байтный формат строк массивов для любых п 8, т 8, то реальные затраты памяти составят 16АСТ бит. Подпрограмма SND (см. прил. 1, программу 4) работает по описанному выше алгоритму и вычисляет m <1 8 булевых функций от п 8 переменных. Таблица 8 Таблица системы ФАЛ, представленных в СДНФ х8 х7 хб х5 х4 х3 х2 хг Y* Y, Yq У5 Yi Y3 Y2 Y. 00000000 0 0 0 0 1 0 0 0 0 0 0 0 1 1 1 1 0 1 1 0 0 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 0 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 0 0 1 1110 0 111 10 0 1110 1 1 1 0 10 0 0 0 10 0 0 0 0 0 0 1 1 1 110 11 0 110 110 1 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 1 1110 1110 0 1 0 0 0 0 1 0 m 41
Начальный адрес массива входных термов помещается в ре- гистры Н, L; адрес выходного массива заносится в регистры D, Е; число строк таблицы СДНФ (длина массива) загружается в ре- гистр С; слово значений входных переменных вводится в акку- мулятор. Выходные значения ФАЛ будут также получены в акку- муляторе. Следует отметить, что представления ФАЛ в СДНФ или полной таблицей истинности включают термы только максимальной длины (ранга) и являются неминимизированными ФАЛ. 3. МОДЕЛИРОВАНИЕ МИНИМИЗИРОВАННЫХ ФАЛ, ЗАДАННЫХ В ДНФ Большинство ФАЛ, заданных таблично или аналитически, может быть минимизировано с помощью аксиом и законов ал- гебры логики, а также путем использования ряда специальных методов минимизации, например метода неопределенных коэффи- циентов, метода Квайна и т. п. [26]. Минимизированные ФАЛ записываются в ДНФ [26], при этом термы в общем случае имеют различную длину (ранг г), т. е. терм имеет вид: Хг, Xr_i, ..., Х2, Xlt где г С п; п — число входных переменных для ФАЛ. Метод программной реализации минимизированных ФАЛ рас- смотрим на примере моделирования программируемой логической матрицы (ПЛМ) [25]. Примем, что ПЛМ может вычислять до восьми логических функций (т 8), восьми и менее переменных (п •< 8), которые распределены по разрядам байта так, как по- казано на рис. 4. Пусть ПЛМ реализует следующие логические функции! Разряды 7 ... О = ab + be; 6 ... Р — ah + dbdf; 5 ... Q = efh + egh + gh; 4 ... V = ab + dbdf + gh; 3 ... W = ab + be + defgh; 2 ... X = abed; 1 ... Y = dbdf + be + defgh; 0 ... Z = abed. Примем в программе следующие соглашения: вектор значений входных переменных перед обращением к под- программе помещается в аккумулятор А; 16 5 4 3 2 10 а Ь с d е f 9 h Рис. 4. Распределение переменных по разрядам байта 42
вектор вычисленных значений логических функций F = О, Р, Q, V, W, X, Y, Z в конце работы подпрограммы помещается в ак- кумулятор А. Заметим, что каждая функция представляет собой логическую сумму термов. Для каждого терма с номером i из вектора входных переменных с помощью поразрядной операции И выделяются значимые переменные. Например, для терма Бс (или be, Ьс, Бс) двоичное значение выделяющей маски Dt — = 01100000. Далее в программе определяется, имеют ли переменные Бис такие значения, при которых операция Бс дает в ре- зультате единицу. Для выяснения этого производится опе- рация ИСКЛЮЧАЮЩЕЕ ИЛИ со словом в накопителе с маской Т[ = 00100000. Нулевой результат этой операции указывает на единичное значение вычисленного терма. Действительно, примем, что содержимое аккумулятора А (после операции И с маской равно 00100000, т. е. b — 0, с = 1, а эти значения и дают единичный результат терма Бс = 0-1 = 1. Выполним операцию ИСКЛЮЧАЮЩЕЕ ИЛИ: (00100000) + (00100000) = 00000000; в результате получаем нуль в аккумуляторе. Далее в этом случае в вычисляемый вектор логических функций F с помощью по- разрядной операции ИЛИ добавляется байт Этот байт имеет единицы в двоичных разрядах, соответствующих функциям, в ко- торые входит вычисленный терм. Так, для терма Бс, входящего в логические функции О, W', Y, маска /И, равна 10001010. Таким образом, для терма Бс в памяти следует записать следующие маски: 0 1 1 0 0 0 0 0 = 60Н Di 0 0 1 0 0 0 0 0 = 20Н Ti 1 0 0 0 1 0 1 0 = 8АН Mi Описанный процесс повторяется для всех термов, входящих хотя бы в одну из вычисляемых функций, причем для каждого терма задаются свои Dh Th Mt. Подпрограмма PMPLM приведена в прил. 1 (программа 5). Для рассматриваемого набора логических функций F необходимо в памяти последовательно записать следу- ющие константы: TABL: СОН, СОН, 98Н; D, Т, М ДЛЯ ab 60Н, 20Н, 8АН; D, Т, 14 Ьс 81Н, 81Н, 40Н; D, Т, М ah D4H, ЮН, 52Н; D, Т, М abd7 0EH, 0EH, 20Н; D, Т, М efg 0BH, ОЗН, 20Н; D, Т, М egh ОЗН, 01Н, ЗОН; D, Т, М gh 1FH, 1FH, 0AH; D, Т, М defgh F0H, F0H, 05Н; 00 D, Т, М Признак конца abed 43
Перед обращением к подпрограмме необходимо в регистры Н, L занести адрес таблиц TABL с помощью команды LXI Н, TABL. В подпрограмме PMPLM для описания каждого терма тре- буется резервировать три байта в памяти МПС. Затраты памяти при этом определяются как 24К бит, где К — число различных термов в системе ФАЛ. В практической деятельности используется большое число методов и алгоритмов программной реализации ФАЛ. Мы рас- смотрели лишь несколько интерпретирующих методов моделиро- вания. Как уже отмечалось, помимо интерпретирующего метода, существует компиляционный подход к реализации ФАЛ. 4. КОМПИЛЯЦИОННЫЙ МЕТОД ПРОГРАММНОГО МОДЕЛИРОВАНИЯ ЛОГИЧЕСКИХ СХЕМ Алгоритмы моделирования ФАЛ или комбинационных логи- ческих схем, описанные выше, основаны на использовании общего подхода к синтезу программных моделей, при котором одна про- грамма обслуживает целый ряд моделей схем, формально пред- ставленных в виде таблиц истинности. Приведенные программы работают с упорядоченными массивами данных. На практике часто бывает необходимо создавать программные модели для одной или небольшого числа логических схем. Если выражения для булевых функций содержат малое число термов, то наиболее целесообразен индивидуальный подход к моделированию каждой логической схемы, при котором работа схемы описывается с по- мощью логических команд микропроцессора. В этом случае программная модель каждой логической схемы представляет собой самостоятельную подпрограмму. Рассмотрим программу, моделирующую работу логического элемента К155ЛР1. Для этого логического элемента можно полу- чить следующие ФАЛ, связывающие входы и выходы: Ух = хх д х2 v х3 д х4 у2 = х8 A х6 V аа Д х8 Примем, что входные переменные Хх, Х2, Х3, ..., Х3 хранятся в регистре D, а выходные переменные Ух и У2 заносятся в ре- гистр Е, причем Ух в разряд 0, а У2 в разряд 4. ФАЛ будем моде- лировать с помощью команд микропроцессора ANA и ORA. Под- программа моделирования LR1 приведена в прил. 1 (программа 6). В подпрограмме ID3 (см. прил. 1, программу 7), моделирующей работу дешифратора К155ИДЗ, также используется компиля- ционный метод программной реализации. Входные переменные Хх, ..., Х4 находятся в регистре В микропроцессора в разрядах 0—3 соответственно, выходное 16-разрядное слово хранится 44
в ячейке памяти DSH (младший байт) и DSH + 1 (старший байт). Примем, что инверсное выходное слово находится в регистровой паре Н, L. Идея работы программы состоит в том, что в соответ- ствии с кодом (N) регистра В будет осуществляться N-кратный сдвиг регистровой пары Н, L. Примем также, что дешифратор активизирует (устанавливает в нуль) одну из 16 выходных линий в зависимости от входного кода Хг — Х4. Рассмотрим программу PMSM (см. прил. 1, программу 8), моделирующую работу селектора-мультиплексора К155КП7. Селектор-мультиплексор выполняет передачу на выход значений одного из восьми входных данных. Номер входного разряда, передаваемого на выход, определяется трехразрядным двоичным кодом, поступающим на управляющие входы селектора-мульти- плексора. Примем, что восемь входных каналов (входные данные) моде- лируются регистром D микропроцессора. В регистре Е в нулевом разряде будем получать результат — прямой выход селектора- мультиплексора; в разряды 1, 2, 3 регистра Е заносится номер выбираемого канала; разряд 4 моделирует вход разрешения. Информация в регистре D не сохраняется. Идея работы состоит в последовательном уменьшении (в цикле) на единицу номера канала при одновременной фиксации во флажке С значения вход- ного канала. 5. МОДЕЛИРОВАНИЕ СХЕМ С ПАМЯТЬЮ Выше были рассмотрены способы программного моделирова- ния комбинационных логических схем. Основная особенность схем с памятью состоит в том, что их работа зависит от времени [26], т. е. в число переменных входит время t. При синтезе про- граммных моделей схем с памятью будем пользоваться понятием автоматного времени, которое принимает дискретные целочислен- ные значения i = 0, 1, 2, ... . Каждый период Тп работы схемы разбивается на i интервалов, в течение которых автоматное время условно принимает постоянное значение Работа схем с памятью описывается временными булевыми функциями (ВБФ) и рекуррентными булевыми функциями (РБФ) [26]. ВБФ — логическая функция Y = ср (Х1? Х2, ..., ХП9 /), при- нимающая значение {0, 1( при — 1, где S — число интервалов автоматного времени. Если логика работы схемы определяется системой ВБФ, то в таблицу истинности в качестве старших разрядов (их число log2 S) входного кода записывается время — двоичный код номера набора* (см. табл. 9). Длина * Существует также другой способ введения времени как логической пере- менной [26]. 45
Таблица 9 Логическая схема, представленная системой ВБФ t *2 Уз Уз Уз t Х2 Х1 Уз Уз У, 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 1 0 1 1 0 0 1 0 0 0 0 1 0 1 1 0 1 1 0 0 0 0 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 1 1 1 0 0 0 1 0 0 0 1 0 1 1 0 0 0 0 0 1 1 1 1 0 таблицы S -2" строк. Затраты памяти на хранение полной таблицы истинности для системы ВБФ составляют (S-2n) (п + tn + + log2 S) бит. К ВБФ можно применять все те же способы упрощения и мини- мизации, что и к обычным ФАЛ, поэтому для моделирования схем, описываемых ВБФ, следует использовать те же алгоритмы и про- граммы, что и для обычных комбинационных логических схем (КЛС). Программное моделирование ВБФ рассмотрим на примере подпрограммы, реализующей циклограмму работы робота-мани- пулятора. Циклограмма содержит 30 тактов работы оборудования робота-манипулятора; в каждом такте происходит управление 39 элементами оборудования. Длительность каждого такта ра- боты 7\. Каждый элемент оборудования может быть в каждом такте либо включен, либо выключен. Циклограмму работы робота-манипулятора можно предста- вить в виде таблицы, число строк которой соответствует числу тактов, а число столбцов — числу элементов оборудования. В каж- дом такте состояние элементов оборудования можно отобразить либо нулем, либо единицей. Таким образом, каждую строку таблицы (такт циклограммы) можно представить в виде последо- вательности из пяти байтов. Вся же таблица займет в ОЗУ область, равную 30 X 5 = 150 байт. Примем, что адрес таблицы в ОЗУ имеет метку BOS. В программе примем следующие соглашения: в регистровой паре Н, L находится адрес таблицы в ОЗУ (BOS); в регистре С — счетчик числа тактов; длительность такта определяется подпрограммой с меткой DELAY. Алгоритм работы программы состоит в последовательном считывании из ОЗУ пяти байтов и записи их в порты с адресами PORT1—5. Далее следуют проверка окончания циклограммы, формирование временной задержки, равной длительности такта, 46
Таблица 10 Таблица истинности для триггера + сч X + X £ <г+1) + X О+?) ‘Ту £ + 1^7 0 0 0 0 1 1 0 0 1 0 0 0 1 1 0 1 0 1 1 0 0 1 0 0 1 1 1 0 1 0 0 1 1 0 1 1 1 1 0 1 и переход по метке Ml. Если циклограмма завершена, осуще- ствляются переход по М2 и возврат. Один вариант программной реализации циклограммы при- веден в прил. 1 (программа 9). Состояние выходных сигналов логических схем с памятью может зависеть и от собственных предшествующих значений. Работа таких схем описывается рекуррентными булевыми функ- циями (РБФ). РБФ — логическая функция, зависящая как от текущих значений Xti входных переменных, так и от предшествующих значений самой функции [26]: yt = <p(Xtl) Xt2, Xtn, yui, Yt-t, Yt_h), где Xtt — текущие значения входных переменных; Y} — зна- чения выходных функций в мо- мент времени / = t, t—1, I — 2. Например, с помощью РБФ описывается работа триггеров (табл. 10). Программная реали- зация РБФ в общем случае мо- жет быть выполнена по алго- Перемещение информа- ции й 5локерегистров BRF -*~F!XK Предварительная инициализация модели ритму, показанному на рис. 5 с использованием подпрограмм, применяемых при моделирова- нии КЛС (см. п. 1—3, гл. 3). Алгоритм моделирования РБФ состоит в следующем. Пре- дварительно выполняется ини- циализация модели, т. е. зане- Рис. 5. Алгоритм обслуживания мо- делей РБФ (^Начало сение начальных значений в специальный блок регистров 47
x(t) Старший Младший байт адреса байт адреса Адрес ОЗУ U(t) Рис. 6. Выходные сиг- налы автомата Содержимое я чейча ОЗУ хранения предыдущих результатов BRF (состоит из К регистров, К — глубина вложенности обратных связей в системе РБФ). Под- программа обслуживания системы РБФ начинает работу с фор- мирования входного кода РБФ, состоящего из значений входных переменных и выходных значений РБФ, полученных на предыду- щих этапах: Yt_hi ..., Ff_2, Yt^ (значения извлекаются соответ- ственно из регистров FIXK — FIX1 блока BRF). После этого вычисляются РБФ, как обычные ФАЛ. Далее осуществляется последовательный сдвиг информации в блоке регистров BRF; полученное значение РБФ выводится в порт и записывается в пер- вый регистр FIX1 блока BRF. При следующих обращениях к модели РБФ описанная процедура повторяется. Для некоторых РБФ, главным образом для тех, у которых глубина вложенности обратных связей Д' равна единице (хра- нится только одно предыдущее значение РБФ), алгоритм значи- тельно упрощается. Покажем это на примере программы, модели- рующей работу автомата Мура, у которого слово текущего со- стояния является одновременно выходным словом. Число входных и выходных переменных равно 8. В автомате Мура выходные сигналы U зависят только от внутренних сигна- лов У и по условию в данном случае тождественно равны, т. е. U (/) — Y (/). Внутренние сигналы Y (/) являются функцией от входных сигналов X (I) и внутренних сигналов Y (I — 1) в момент времени (t — 1), т. е. Y (t) = f [X (/), Y (t — 1)]. В программе реализации автомата Мура примем следующие соглашения: перед началом работы программы в регистр В должен быть помещен код начального состояния автомата Y (0); входное слово X будет поступать извне в порт EINBE; выходное слово U будет помещаться в порт AUS1. Выходные сигналы автомата запишем в ОЗУ в виде та- блицы (рис. 6). В этом случае реализация автомата Мура сводится к следу- ющим действиям. 1. Считывание входного слова X. 2. Формирование адреса в памяти. 3. Обращение по адресу в память и считывание из нее выход- ного слова U. 4. Помещение выходного слова в регистр В и выдача его в порт AUS1. 5. Останов. 48
Программная реализация автомата Мура: ATMUR: IN EINBE MOV С, А LDAX В OUT AUS1 MOV В, А HLT Программа ATMUR служит для иллюстрации метода про- граммной реализации. Основной ее недостаток — неэкономное использование памяти, что является следствием приписывания входного слова X (/) справа к слову Y (t — 1). Используя другие приемы образования адреса, можно существенно сэкономить память. 6. ПРОГРАММНЫЕ МОДЕЛИ ФОРМИРОВАТЕЛЕЙ ИМПУЛЬСНЫХ ПОСЛЕДОВАТЕЛЬНОСТЕЙ Основными целями программной реализации импульсных фор- мирователей являются обеспечение большой гибкости параметров импульсных последовательностей и снижение материальных за- трат на изготовление аппаратуры. Работа импульсных формирователей в общем случае описы- вается ВБФ или системами ВБФ, при этОхМ выражение для ВБФ формирователя имеет вид: Y = f (/), где t — дискретное время. В основе метода создания программных моделей импульсных формирователей лежат три приема: использование различных подпрограмм временных задержек; использование таблиц в ОЗУ, содержащих информацию об импульсных последовательностях; использование алгоритмов вычисления ВБФ. Необходимо помнить, что ВБФ импульсных формирователей являются функциями дискретного реального времени, поэтому вычисление значений ВБФ должно происходить за равные интер- валы времени (в противном случае нарушается синхронизация формируемых последовательностей). Рассмотрим подпрограмму IM (см. прил. I, программу 10) моделирования импульсного формирователя. Подпрограмма IM моделирует одну импульсную последовательность конечной длины или же один период бесконечной последовательности, поступа- ющей в младший разряд порта PORT. Мэтепируемая последова- тельность импульсов разбивается на интервалы А/ и кодируется (рис. 7), после чего закодированное описание последовательности загружается в память. Адрес начала массива описания вводится в регистры Н, L; в регистры D, Е заносится число байтов опи- сания. Подпрограмма IM работает следующим образом: через равные интервалы времени Д/ очередной бит описания последователь- ности выводится в порт PORT. Интервал Д/ определяется: 49
Рис. 7. Кодирование импульсной последовательности числом тактов синхронизации микропроцессора, требуемым для одного прохода цикла L1 вывода бита в порт (133 такта = = 66,5 мкс); кодом времени задержки в подпрограмме DELAY. Таким образом, А/ = 66,5 мкс + /delay- После того как будет выведен последний бит описания, т. е. закончится форми- рование одного периода импульсной последовательности, произой- дет возврат из подпрограммы IM. Работа подпрограммы задержки описана в гл. 2. Подпрограмма IM моделирует только один период импульсной последовательности. Для моделирования длинной серии импуль- сов следует организовать цикл обращения к подпрограмме IM. Если необходимо моделировать один период восьми действующих одновременно импульсных последовательностей, то можно воспользоваться подпрограммой РМ1 (см. прил. 1, программу 11). Описанием последовательности служит массив, каждый t-й байт которого определяет выходные сигналы для всех восьми последо- вательностей в i-й момент времени. Начальный адрес описания помещается в регистры Н, L, число дискретных интервалов вре- мени (число байтов описания) заносится в регистр С. Подпрограмма РМ1 последовательно выводит в порт PORT байты описания через равные интервалы времени А/. Интервал А/ задается аналогично подпрограмме IM. Рассмотрим программную реализацию обмена информацией микропроцессора с магнитофоном [11. Информация передается в последовательном коде. Фактически выдается только 7-й разряд аккумулятора. Для выдачи байта информации, предварительно помещенной в аккумулятор, необ- ходимо программным способом выполнить сдвиг последовательных битов в 7-й разряд. После выдачи каждого бита информации с помощью подпрограммы DEL осуществляется задержка, обеспе- чивающая запись информации со скоростью 300 бит/с. В прил. 1 приведена подпрограмма BWRT (программа 12) выдачи байта из аккумулятора на магнитофон (адрес ЗОН). 50
В ряде конкретных случаев программная модель импульс- ных формирователей может быть выполнена только с помо- щью команд процессора без ис- пользования таблицы описания. Покажем это на примере под- программы PMSI (см. прил. 1, программу 13), моделирующей со следующими параметрами: длительность импульса Т1; дли- тельность паузы Т2; число генерируемых периодов Nmax. Примем в программе: Рис. 8. Форма импульса импульсную последовательность заданная импульсная последовательность генерируется на выходе порта с адресом PORT в нулевом разряде; регистр D — счетчик числа периодов импульсов; имеется программа, вырабатывающая временную задержку, с меткой DELAY, использующая регистровую пару ВС как счетчик. В заключение рассмотрим программные методы измерения частоты и периода. Измерение частоты осуществляется путем подсчета числа импульсов, поступающих за известный интервал времени. Подпрограмма FRQCY (см. прил. 1, программу 14) служит для измерения частоты /изм следования импульсов, поступающих в младший разряд порта PORT. Фиксируется число п импульсов за время i = 1 с. Результат измерения частоты /изм = п (Гц) получается в регистрах D, Е. При этом необходимо помнить, что для импульсной последовательности существует ограничение: 2 Гц < /изм < 16 кГц. Для тактовой частоты процессора 2 МГц начальное значение кода временной задержки TSEC = 7EQ4H. Погрешность измере- ния может составить 1 Гц. Период импульсной последовательности измеряется подсчетом числа известных малых интервалов времени А/, накапливающихся за один период следования импульсов. Подпрограмма DET (см. прил. 1, программу 15) служит для измерения периода импульсной последовательности, причем ча- стота следования импульсов должна лежать в пределах 250 Гц — 3 кГц. Импульсы должны иметь вид, показанный на рис. 8. Подпрограмма DET через каждые А/ = 16-Ю"6 с опрашивает порт, на который поступает последовательность импульсов. Фи- ксируется фронт импульса, в счетчике С накапливается число дискретных интервалов времени ТИ, в течение которых в порт поступает высокий уровень напряжения, затем в счетчике В накапливается число интервалов времени ТП, в течение которых сохраняется низкий уровень напряжения. Число ТИ помещается в ячейку TIMP, число ТП — в ячейку TPAU. Число интервалов времени за период Т = ТИ + ТП помещается в ячейку TPER. 51
После окончания работы подпрограммы DET с помощью специальных подпрограмм арифметических вычислений (см. гл. 5) можно рассчитать время импульса /и, время паузы 1П и период Тл в секундах: = Д/ (TIMP) - 16- 10“e (TIMP); /п = М (TPAU) - 16-10“6 (TPAU); Ти = М (TPER) = 16- 10~в (TPER). Частота следования импульсов составляет f = 1/Тп. Точность измерений с помощью подпрограммы DET уменьшается с увели- чением частоты следования импульсов. Наибольшая точность достигается при f ж 250 Гц.
ГЛАВА 4 СИСТЕМНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ МИКРОКОНТРОЛЛЕРОВ И МИКРОЭВМ В этой главе дана общая характеристика системного про- граммного обеспечения микроконтроллеров и микроЭВМ, рассмо- трен ряд конкретных вопросов, стоящих перед разработчиками системных программ. Наибольшее внимание уделено проблемам программирования БИС периферийных устройств микропроцессора КР580ИК80. Кроме того, изложены принципы построения и приведены тексты некоторых системных программ, рассмотрены алгоритмы помехо- устойчивого обмена информацией и самоконтроля МПС. Материал этой главы позволит читателю приобрести начальные навыки системного программирования, а также даст необходимый справочный материал. 1. СТРУКТУРА СИСТЕМНОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ МИКРОЭВМ Системное программное обеспечение (или операционная си- стема ОС) микроконтроллера или микроЭВМ представляет собой программу или группу программ, взаимосвязанных между собой и являющихся фактически посредником между аппаратными средствами и пользователем (или внешней средой для встроенного в технологический процесс микроконтроллера). Структура системного программного обеспечения на практике в значительной степени зависит от технических средств (микроЭВМ) и тех задач, на реализацию которых оно ориентировано. В простейшей микропроцессорной системе (микроконтрол- лере), имеющей память малой емкости, средства индикации, кла- виатуру, средства ОС крайне примитивны и будут представлены набором программ, реализующих простейшие приказы, операции с памятью и средствами индикации. В микроЭВМ, имеющей в своем составе НГМД, состав ОС и ее функции существенно усложняются. В определенной степени можно сказать даже, что структура ОС отчасти зависит от типа машинного носителя (НГМД, НМЛ) и способа его организации. Большинство ОС выполняют следующие функции [35]: предоставляют пользователю упорядоченный и согласующийся набор программ ввода-вывода для различных периферийных 53
устройств микроЭВМ (терминалы, устройства печати, НГМД, НМЛ и т. п.); обеспечивают «управление файлами» и получение отчетов о состоянии хранимых данных; система управления файлами дает пользователю возможность получить информацию о файлах, хра- нящихся на дисковых носителях: имена файлов, оглавления ди- сков, размеры файлов, объем неиспользуемой памяти и т. д.; эта система взаимодействует также с программой ввода-вывода для дисковых устройств, которая используется для записи (чтения) информации на диск (с диска); обеспечивают загрузку и выполнение стандартных программ системы и прикладных программ, написанных пользователем. Рассмотрим некоторую детализацию функций ОС на примере малой системы (микроЭВМ или микроконтроллера с небольшими возможностями). Системное программное обеспечение такой малой системы должно реализовать следующие функции [6]: последовательный или параллельный ввод с клавиатуры; вывод на печатающее устройство или на средства индикации; обмен информацией с внешней памятью; обмен информацией по телефонным линиям; начальный запуск микроЭВМ. К служебным программам ОС можно отнести следующие функ- ции: обслуживание прерываний при вводе-выводе от счетчика- таймера системы: интерпретация элементарных приказов; в малой системе интер- претатором является совокупность программ обработки символь- ных цепочек, программ поиска в таблице и программ реализации приказов; выявление ошибочных ситуаций в действиях оператора и системы с последующей индикацией ошибок и символов для опе- ратора; обслуживание запросов от прикладной программы пользова- теля к средствам ОС. Современные микроЭВМ имеют большой объем оперативной и внешней (долговременной) памяти. Новые возможности аппарат- ной части микроЭВМ и периферийного оборудования приводят к расширению функциональных возможностей ОС, изменению ее структуры, в которой наряду с функциями малых систем по- являются новые, характерные для средних и больших систем, а именно: управление внешней памятью (например, НГМД); управление оперативной памятью; применение языков высокого уровня; организация и управление многопользовательской и мульти- программной средой; управление мультипроцессорными средствами; применение системных утилит. 54
Современные ОС, реализующие перечисленные функциональные возможности, проектируются уже таким образом, чтобы макси- мальным образом реализовать принцип «машинной (аппаратной) независимости». А это значит, что прикладные программы не нужно изменять при их выполнении на системе с другой конфи- гурацией (например, с другим контроллером диска, большей емкостью оперативной памяти) под управлением той же ОС. Это достигается тем, что в структуре современных ОС выде- ляются следующие компоненты [6]: ядро — программная секция, которая распределяет ресурсы системы, управляет всеми функциями ОС высшего уровня (оглав- лениями дисков, доступом к устройствам ввода и вывода, рас- пределением памяти, планированием и синхронизацией задач); все запросы пользователя на обслуживание и предоставление ресурсов осуществляются через ядро; секция байтов — секция ориентированного ввода-вывода (ВЮ); предназначена для управления вводом-выводом с байтовой или символьной ориентацией, к которому относятся все асинхронные терминальные устройства, большинство печатающих устройств, кассетные накопители, телефонные линии связи и т. д.; секция блокового ввода и вывода (DIO); предназначена для управления вводом-выводом устройств типа накопителей на ма- гнитных дисках; интерпретатор консольных приказов (CINI); предназначен для обеспечения возможности пользователю распоряжаться сред- ствами операционной системы при формулировании приказов. CINI для обеспечения аппаратной независимости использует ре- сурсы ОС через ядро. CINI, по существу, представляет собой прикладную программу и имеет большое значение при органи- зации интерактивного управления системой. Таким образом, мы сделали попытку охарактеризовать самую общую организацию ОС, ее структуру, ввести читателя в круг понятий, с которыми оперирует системный программист. По вполне понятным причинам более глубокое рассмотрение этих вопросов выходит за рамки данной книги, и поэтому мы отсылаем читателя к книгам [2, 6, 35]. Но вместе с тем материал этого параграфа, знание функций ОС малых систем позволяет перейти к рассмо- трению монитора МПС, который фактически является предше- ственником ОС, выполняет большинство функций ОС, но работает с меньшим числом устройств и обычно хранится в ПЗУ микро- контроллера. 2. МОНИТОР ПРОГРАММИРУЕМОГО МИКРОКОНТРОЛЛЕРА Итак, монитор — это простейшая ОС, которая позволяет пользователю контролировать ход отладки и выполнения приклад- ной программы, а именно контролировать микропроцессор, па- 55
мять, регистры, средства индикации. Возможности, предоставляе- мые монитором пользователю, можно описать в виде списка его функций. Несмотря на большое разнообразие существующих мо- ниторов, каждый из них позволяет осуществлять на МПС следу- ющие функции: индикацию памяти; модификацию содержимого памяти; выполнение команды по указанному адресу памяти; установление контрольных точек; выполнение инкремента (декремента) адреса памяти (при индикации или модификации); пересылку блока в памяти; ввод, вывод данных через порты ввода-вывода. Монитор оценочного модуля Рассмотрим простой и эффективный вариант монитора оценоч- ного модуля [16]. Достоинства монитора: минимальная необхо- димая емкость ПЗУ системы (до 256 байт); наличие набора стан- дартных подпрограмм, которые могут быть эффективно исполь- зованы оператором при отладке программ; возможность работы с простейшей клавиатурой и индикацией (рис. 9; код клавиши поступает в регистр клавиатуры в виде четырехразрядного двоич- ного кода). Входные данные задаются в шестнадцатеричном коде. Данные на индикацию выводятся через программируемый параллельный интерфейс (ППИ) КР580ВВ55. В порт 0 поступает байт данных, в порт 1 — старший байт адреса, в порт 2 — млад- ший байт адреса. Набор программ, входящих в Рис. 9. Пульт микроконтроллера монитор, можно разделить на три основные части: функ- циональные, тестирующие и стандартные подпрограммы. Функциональн ые подпро- граммы. «Коррекция ОЗУ» (КО). С ее помощью можно исправить неверно записан- ную информацию в произ- вольной ячейке ОЗУ и загру- зить программы пользовате- ля в любую область ОЗУ. Выборка программы осуще- ствляется нажатием клавиш «СБРОС» и «КО», затем на- бирается адрес нужной ячей- ки ОЗУ, начиная со старше- го байта. Набранный код ад- реса высвечивается на инди- кации. Далее производится 56
загрузка информации: одному байту соответствует нажатие двух клавиш. С помощью индикации можно проследить за формиро- ванием очередного байта вводимых данных и за изменением адреса. Адреса вводятся автоматически. «Загрузка ОЗУ» {30). Используется для занесения программы пользователя в ОЗУ с начального адреса (начальный адрес ОЗУ устанавливается автоматически). Для инициализации работы про- граммы необходимо набрать СБРОС и 30. Загрузка данных про- изводится так же, как в программе «Коррекция ОЗУ». «Проверка ОЗУ» {ПО). Проверяется информация, находящаяся в ОЗУ (с начального адреса). Для запуска программы необхо- димо набрать СБРОС и ПО. После каждого нажатия клавиши «ПО» на индикацию выводятся содержимое и адрес очередной ячейки ОЗУ. «Просмотр памяти с заданного шага» {ПШ). Выборка про- граммы осуществляется с помощью клавиш «СБРОС» и «ПШ». Начальный адрес проверяемого блока памяти набирается на кла- виатуре. Далее работа аналогична программе «Проверка ОЗУ». «Пуск 1». После нажатия клавиш «СБРОС» и «ПУСК 1» система выполняет программу пользователя, записанную с начального ад- реса ОЗУ (начальный адрес ОЗУ устанавливается автоматически). «Пуск 2». После нажатия клавиш «СБРОС» и «ПУСК 2» на клавиатуре набирается адрес первого шага запускаемой про- граммы и начинается выполнение программы пользователя (за- писанной в любой области ОЗУ или ПЗУ). Тестирующие подпрограммы. В данный вариант монитора входят программы «Тест ОЗУ» {ТО) и «Тест индикации» {ТИ). Подробное описание работы этих программ приведено в п. 4 данной главы. Для пуска программ ТО и ТИ нажимаются соот- ветственно клавиши «СБРОС», «ТО» или «СБРОС», «ТИ». Продол- жить тест ОЗУ после обнаружения ошибки можно с помощью на- жатия клавиши «ТО». Стандартные подпрограммы. «Чтение байта с клавиатуры в аккумулятор» {RST2). Определяет возможность занесения байта информации в аккумулятор путем нажатия двух клавиш. «Задержка 0,6 с» {RST3). «Чтение клавиши» {RST4). После обращения к подпрограмме система ожидает нажатия любой клавиши. Далее четыре млад- ших разряда аккумулятора загружаются информацией, соответ- ствующей двоичному коду нажатой цифры. Оставшиеся четыре разряда аккумулятора устанавливаются в нулевое состояние. «Вывод на индикацию» {RST5). Содержимое регистров (А, Н, L) выводится на индикацию. Подпрограмму удобно использовать в случае, если регистровая пара Н, L микропроцессора служит указателем адреса ячеек памяти. Все перечисленные подпрограммы сохраняют содержимое ре- гистров общего назначения неизменным. Программа «Монитор» приведена в прил. 1 (программа 16). 57
Монитор для микроконтроллера МКП-1 Выпускаемый серийно микроконтроллер МКП-1 (см. гл. 7) предназначен для циклового управления оборудованием в тех- нологических процессах. С этой целью системное программное обеспечение микроконтроллера ориентировано на выполнение функции типа «Включить контакт», «Выключить контакт», «Чи- тать контакт». В то же время возможности микроконтроллера шире; в частности, при небольшой доработке блоков сопряжения он может быть применен при разработке более сложных систем управления. В этом случае для отладки программ микроконтрол- леру потребуется новый монитор. Ниже описан один вариант мо- нитора микроконтроллера МКП-1 [17]. Монитор предназначен для занесения в память, отладки и выполнения программ, написанных в кодах ассемблера микро- процессора КР580ИК80, на аппаратных средствах микрокон- троллера МКП-1. Объем программы составляет 1,2К байт. Программа хра- нится в двух ПЗУ К573РФ1, которые устанавливаются в спе- циальные разъемы платы памяти микроконтроллера. Прошивка ПЗУ приведена в прил. 2. Монитор позволяет: заносить в память микроконтроллера программу в кодах ассемблера микропроцессора КР580ИК80; корректировать записанную программу; тестировать ОЗУ системы с сохранением записанных данных; передавать управление программе, записанной в памяти ми- кроконтроллера; задавать (снимать) точки останова программ; просматривать содержимое регистровых пар микропроцессора при останове выполнения программы в точках останова; определять контрольную сумму программы в заданном адрес- ном пространстве. Программные средства монитора позволяют обрабатывать сиг- налы прерывания микропроцессора. Сигнал RST0 используется при инициализации системы, сигнал RST1 — при разработке программных средств монитора (сигнал прерывания от клавиа- туры). При работе монитора данный сигнал обрабатывается в со- ответствии с алгоритмами работы программы. При выполнении программы пользователя по сигналу прерывания этого уровня обеспечивается передача управления на ячейку 0008Н. Команды RST2—RST7 могут применяться пользователем в разрабатываемых аппаратно-программных средствах. При об- служивании запросов прерывания указанных уровней обеспечи- вается передача управления на ячейки ОЗУ 0010, 0018, 0020, 0028, 0030, 0038Н соответственно номеру рестарта (или уровню прерывания). В эти ячейки необходимо занести команды передачи управления подпрограммам обслуживания указанных уровней прерывания. 58
Монитор выполняет следующие десять функций: РО — набор текущего адреса; Р1 — переход к следующему адресу; Р2 — переход к предыдущему адресу; РЗ — подсчет контрольной суммы в заданном пользователем адресном пространстве; Р4 — установка адреса точки останова программы; Р5 — снятие точки останова программы; Р6 — снятие всех точек останова; Р7 — тест ОЗУ с сохранением записанных данных в заданном адресном пространстве; Р8 — запуск программы с заданного адреса; Р9 — просмотр содержимого регистров микропроцессора в точке останова программы. Команда «Начальный пуск» . При включении тумблера «СЕТЬ» микроконтроллера (нажатие кнопки «СБРОС» модуля процессора) выполняется программа инициализации монитора, в результате которой в левой позиции дисплея выводится символ Г (позиции 2—8 погашены) и загорается светодиод Р (работа) на светодиод- ном индикаторе пульта управления (остальные светодиоды по- гашены). Далее монитор готов принимать с клавиатуры команды пользователя, выбирающие одну из функций программы. Для ввода команды необходимо нажать клавишу «Р» пульта управле- ния и, не отпуская ее, цифровую клавишу соответствующей команды (соответствие команд цифровым клавишам показано выше). Команда «Набор текущего адреса. Загрузка памяти» . Вызов данной команды осуществляется нажатием клавиш «Р», «О». При этом на дисплей пульта управления выводится информация, представленная на рис. 10. Адрес вводится нажатием цифровых клавиш. Нажатие цифро- вой клавиши приводит к сдвигу набранной информации на дис- плее на один разряд, и в освободившуюся позицию вводится код нажатой клавиши. Ввод заканчивается нажатием любой цифровой клавиши при нажатой клавише «Р» (код нажатой клавиши зна- чения не имеет). При этом на дисплей выводится информация, представленная на рис. 11. Текущий адрес является исходным для ввода данных в ОЗУ контроллера. Ввод данных в ОЗУ является фоновой функцией, т. е. монитор всегда переходит к ее выполнению после завершения функции РО. Для занесения по текущему адресу новой информа- А 1 - т т т т Л А А А D D Рис. 11. Изображение на дисплее после завершения ввода: А — текущий адрес; D — данные, храня- щиеся по текущему адресу Рис. 10. Изображение, появляющееся на дисплее после нажатия клавиш «Р» и «0» 59
4 1 — Г Т т т Рис. 12. Изображение на дисплее после первого нажатия клавиш «Р» и «3». А 2 — Т т т т Рис. 13. Изображение на дисплее после второго нажатия клавиш «Р» и «3» ции необходимо набрать требуемый цифровой код нажатием клавиш. Команды «Переход к следующему адресу», «Переход к преды- дущему адресу» . Вызов этих команд производится нажатием кла- виш «Р», «1» («Р», «2»). Нажатие указанных клавиш приводит к увеличению (уменьшению) текущего адреса. Состояние индика- торов дисплея устанавливается в соответствии с функцией РО. При изменениях адреса возможна коррекция данных по теку- щему адресу. Команда «Подсчет контрольной суммы программы». Вызов данной команды производится нажатием клавиш «Р», «3». На дисплей выводится информация, представленная на рис. 12. При этом производится набор начального адреса зоны подсчета контрольной суммы нажатием соответствующих цифровых кла- виш. По окончании ввода начального адреса повторно нажимают клавиши «Р», «3», на дисплей выводится информация, представ- ленная на рис. 13. Затем вводится конечный адрес зоны подсчета контрольной суммы. По окончании ввода следует нажать клавиши «Р», «3», в результате чего запускается программа подсчета контрольной суммы. Сумма подсчитывается сложением каждой тетрады (старшие и младшие тетрады складываются отдельно). По окончании вы- числения три младших байта суммы выводятся на дисплей в шесть правых позиций. Команды «Установка адреса точки останова», «Снятие адреса точки останова». Вызов данных команд производится нажатием клавиш «Р», «4» («Р», «5»), При этом монитор запра- шивает адрес точки останова. На дисплей выводится информация в соответствии с функцией РЗ. Пользователь набором цифровых клавиш вводит адрес точки останова. Повторное нажатие кла- виш «Р», «4» («Р», «5») запускает программу установки (снятия) точки останова. При установке точек останова необходимо сле- дить, чтобы они не перекрывались, а также чтобы в программе не было передачи управления на адрес точки останова. Команда «Снятие всех точек останова». Вызов этой команды производится нажатием клавиш «Р», «6». При этом запускается программа, снимающая все точки останова. Команда «Тестирование ОЗУ». Указанная команда вызы- вается при нажатии клавиш «Р», «7». Производится запрос на- чального адреса тестируемой зоны (информация на дисплее со- ответствует функции РЗ). По окончании ввода начального адреса 60
А А А А 3 Э Р Р Рис. 14. Изображение на дисплее при обнаружении ошибки данных: А — адрес обнаружения ошибки; <9 — за- писываемая информация; Р — рабочая ин- формация 0 С А А А А Рис. 16. Изображение на дисплее после останова (А — адрес останова) Рис. 15. Изображение на дисплее при обнаружении несовпадения контроль- ных сумм (А — адрес байта, при те- стировании которого обнаружено не- совпадение контрольной суммы) Р Е Г - D — 5 Рис. 17. Изображение на дисплее пе- ред просмотром содержимого реги- стров А А А А следует повторно нажать клавиши «Р», «7», в результате чего запрашивается конечный адрес тестируемой зоны (информация на дисплее соответствует функции РЗ). По окончании набора на- жимают клавиши «Р», «7» и запускается программа тестирования. Тестирование производится без разрушения информации в ОЗУ. Перед началом тестирования подсчитывается контрольная сумма по тестируемой области. После тестирования каждого байта повторно просчитывается контрольная сумма и сравнивается с первоначальной. При работе программы дисплей погашен. При правильном прохождении теста на правую позицию дисплея выводится символ «О». При обнаружении ошибки данных на инди- катор выводится информация, представленная на рис. 14. При обнаружении ошибки по несовпадению контрольной суммы на дисплей выводится информация, приведенная на рис. 15. Команда «Запуск с адреса». Указанная команда вызывается нажатием клавиш «Р», «8». Производится запрос адреса пуска. На дисплей выводится информация в соответствии с функцией РЗ. После набора адреса запуска повторно нажимаются клавиши «Р», «8», происходит передача управления по указанному адресу и зажигается светодиод А светодиодного индикатора. Команда «Просмотр содержимого регистров процессора» . Если в программе пользователя заданы точки останова, то при ее вы- полнении происходит останов по заданному адресу. Информация на дисплее имеет вид, показанный на рис. 16. При этом можно просмотреть содержимое регистров процессора, для чего вводится команда ПРОСМОТР РЕГИСТРОВ (нажатием клавиш «Р», «9»). На дисплей выводится информация, представленная на рис. 17. Пользователь, нажимая определенную цифровую клавишу, вызы- вает на индикацию определенную пару регистров процессора: «О» — A, F <1» — В, С «2» — D, Е «3» — Н, L <4» — S, Р <5» — Р, С 61
р р ни Рис. 18. Изображение на дисплее при просмотре содержимого регистров: Р — код регистровой пары; И — информа- ция в данной регистровой паре На индикацию выводится ин- формация, показанная на рис. 18. Для продолжения выполне- ния программы после точки останова необходимо нажать клавиши «Р», «8», при этом ад- рес пуска не запрашивается. При останове выполнения про- граммы в точках останова возможно выполнение всех команд монитора. 3. ПРОГРАММИРОВАНИЕ КРИСТАЛЛОВ БИС СЕРИИ КР580 В настоящее время отечественная промышленность выпускает большое число БИС, которые входят в состав микропроцессорного комплекта КР580 и предназначены для построения микроЭВМ и микроконтроллеров на его основе. Часть из этих кристаллов БИС являются программируемыми. Применение программируе- мых кристаллов БИС для достижения заданной функции (вывод на дисплей, последовательный или параллельный интерфейс) позволяет уменьшить объем необходимой аппаратуры на не- сколько десятков корпусов ИС. Практическое программирование кристаллов БИС требует знания условных соглашений, системы управляющих слов и особенностей их использования для отдель- ных кристаллов. Для большинства описываемых кристаллов (кроме КР580ВВ55) подробная информация приведена в тексте соответствующих разделов. Программирование БИС КР580ВВ55 Программируемый адаптер параллельного интерфейса приме- няется для связи микропроцессорной системы с периферийными устройствами. Адаптер состоит из следующих основных частей. Буфер данных, имеющий три устойчивых состояния, служит для связи внутренней шины адаптера с системной шиной МПС. Через буфер данных передаются данные (из портов адаптера в микропроцессор и обратно), управляющие слова (из микропро- цессора в адаптер) и слова состояния адаптера (из адаптера в ми- кропроцессор). Блок управления служит для управления всеми внутренними передачами информации. Микропроцессор выдает в адаптер управ- ляющее слово и помещает его в специальный восьмиразрядный регистр блока управления РУС — регистр управляющего слова. Содержимое РУС определяет функцию и направление работы каждого порта. Восьмиразрядные порты А, В и С (состоящий из. двух че- тырехразрядных портов С1 и С2) предназначены для подключения 62
устройств ввода-вывода к шине данных микропроцессора. Режимы работы портов А, В, С определяются управляющим словом, загружаемым в РУС. Все порты имеют выводы с тремя состоя- ниями. Подключение адаптера к МПС, форматы управляющих слов, а также особенности режимов работы портов описаны в работе [20, с. 21—30]. Ниже рассмотрены практические примеры управления ре- жимами работы адаптера. Пример 59. Написать управляющее слово режима для адаптера со следую- щей конфигурацией: 1. Порт А — Режим 0, ввод; Порт В — Режим 1, ввод; Порт С7_4 — вывод; Порт С3_0 — вывод. Управляющее слово установки режима имеет вид 95Н. 2. Порт А — Режим 2; Порт В — Режим 1 (ввод). Управляющее слово установки режима имеет вид С6Н. Обратим внимание, что разряды, определяющие режим работы порта С, в управляющем слове равны нулю. Для настройки адаптера на заданный режим работы микропроцессор должен выполнить две команды: MVI А, 95Н Управляющее слово в А OUT ADRPYC Вывод в РУС адаптера Рассмотрим примеры формирования и записи управляющего слова установки и сброса разряда порта С адаптера. Общий формат этого управляющего слова приведен в работе [20, рис. 1.10]. Пример 60. Написать управляющее слово: для установки разряда 3 Ответ: 07Н для сброса разряда 3 Ответ: 06Н для установки разряда 6 Ответ: 0DH для сброса разряда 6 Ответ: ОСН Формирование импульса на выходе порта С (разряд D3) реализуется сле- дующими командами микропроцессора: MVI А, 07Н OUT ADRPYC MVI А, 06Н OUT ADRPYC Здесь ADRPYC — символический адрес регистра управляющего слова. Состояние любого порта может быть прочитано командой ввода. Пример 61. Прочитать содержимое порта А адаптера и установить логиче- скую единицу в разряде АО. Программа имеет вид: IN PORTA ORI 01Н OUT PORTA Пример 62. Прочитать содержимое порта В адаптера и сбросить в логиче- ский нуль разряд ВО. Программа имеет вид: IN PORTB ANI FEH OUT PORTB 63
Пример 63. По значению бита АЗ порта А адаптера перейти к подпро- грамме РР1, если АЗ = 0, и подпрограмме РР2, если АЗ-1. Программа имеет вид: IN PORTA ANI 08Н JZ PPI PP2: PPI: Особенностью адаптера является возможность программного запрещения и разрешения формирования запроса прерывания МПС. Пример 64. Программа разрешения прерывания по выводу: MVI A. 0DH OUT ADRR ADRR — адрес регистра управляющего слова. Пример 65. Программа запрещения прерывания по выводу: MVI А, ОСН OUT ADRR Пример 66. Программа разрешения прерывания по вводу: MVI А, 09Н OUT ADRR Пример 67. Программа запрещения прерывания по вводу: MVI А, 08Н OUT ADRR Программное обеспечение режимов работы адаптера имеет определенные особенности, которые лучше всего показать на конкретных примерах. Программное обеспечение режима 0 рассмотрим на примере [И] обслуживания одним адаптером печатающего устройства (ПУ), ленточного перфоратора и фотосчитывателя (рис. 19). На рисунке приняты следующие режимы работы портов: Порт А — режим 0, вывод; порт С2 (С6, С5, С4) — режим О, вывод; Рис. 19. Пример использо- вания адаптера в режиме О 64
Порт В — режим 0, ввод; порт С1 (С2, С1, СО) — режим О, ввод. Сигналы управления имеют следующие значения: СТРОБ — сигнал стробирования передаваемых данных; ПЕРФ, ВПРАВО — сигналы соответствуют стробу. Программа инициализации режимов адаптера выглядит сле- дующим образом: INIT: MVI A, 83H ; Запись в РУС управляющего OUT ADRPYC ; слова режима MVI A, ODH ; Установка С6= 1 (СТРОБ) OUT ADRPYC MVI A, 09H ; Установка С4= 1 (ВПРАВО) OUT ADRPYC MVI A, OAH ; Сброс С5=0 (ПЕРФ) OUT RET ADRPYC Обмен данными между адаптером и внешними устройствами реализуется в виде отдельных драйверов для каждого внешнего устройства. Все три драйвера, или программы ввода-вывода, аналогичны, поэтому рассмотрим здесь только текст программы вывода на печать: LPST: IN PORTC ; Чтение порта С AN I 04H ; Выделение значения С2 JZ LPST ; Цикл, если С2 = 0 MOV A, C ; Символ из рабочего регистра ; занести в А OUT PORTA ; Символ в порт А MVI A, OCH ; Сброс строба в нуль OUT ADRPYC INR A ; Установка строба в единицу OUT ADRPYC RET Регистр С микропроцессора принят за базовый, в который программа пользователя заносит очередной символ для вывода и передает управление в точку LPST с помощью команды CALL; далее работает подпрограмма LPST. Программное обеспечение режима 1 адаптера рассмотрим на примере [11] управления печатающим устройством (рис. 20). Режим 1 применяют в тех случаях, когда хотят исключить по- тери времени на опрос состояния внешнего устройства для опре- деления его готовности к обмену. Рис. 20. Пример исполь- зования адаптера в ре- жиме 1 65 3 В Г. Майоров
Рис. 21. Структуры программ драйвера в режиме 1: а — командного процессора; б — обслуживания прерываний; в — вывода данных Управляющее слово для такой конфигурации адаптера (порт А — режим 1, вывод; порт С1 — режим 0, вывод) имеет вид ААН. Определим управляющие слова установки-сброса: 00000001В — Установка СТРОБ = 1 (КС» = 1); 00000000В — Сброс СТРОБ = 0 (КС„ = 0); 00001101 —Прерывание от БИС разрешено (КСв = 1); 00001100 —Прерывание от БИС запрещено (КСв = 0). Для реализации режима 1 необходимы специальные программы для обработки прерываний. В этом случае один из методов соз- дания драйвера состоит в его разделении на две части: «Команд- ный процессор» и «Программа обслуживания прерывания». Обе части драйвера в процессе работы используют информацию, 66
которую передают друг другу в зависимости от характера про- цесса ввода-вывода. Общим методом передачи параметров между различными программами является создание запрашивающей программой управляющего блока в памяти. Обычно в управля- ющем блоке содержится следующая информация. 1. Статус — (один байт данных) — передает состояние ввода- вывода (примем ООН — нормальное завершение, ОШ — ошибка). 2. Адрес буфера (два байта данных) — определяет адрес на- чала (приема или выдачи) данных в памяти. 3. Длина буфера (один байт данных) — задает число вводимых или выводимых данных памяти. 4. Счетчик символов текущий (один байт) — определяет число символов, переданных на данный момент. 5. Адрес подпрограммы завершения (два байта данных) — этот адрес вызывается после завершения операции ввода-вывода. Структура командного процессора, программы обслуживания прерываний, программы вывода символов приведены на рис. 21. Алгоритм работы можно пояснить следующим образом. Про- грамма пользователя в результате своей работы в специальной области памяти (буфере) накапливает данные, которые подлежат выводу. Программа инициализации режима 1 может быть выпол- нена в момент перед выводом блока данных на ПУ. Эта про- грамма устанавливает необходимый режим работы, начальные 3* 67
значения управляющих сигналов (СТРОБ — 1) и засылает в ячейку памяти RST7 (038Н) код команды безусловного перехода к про- грамме обслуживания прерываний (предполагаем, что прерыва- ние происходит по уровню 7). По вызову из программы пользова- теля в точку RSTRT начинает работать командный процессор. При этом подразумевается, что адрес управляющего блока на- ходится в регистрах D, Е микропроцессора. Кроме того, в про- грамме принимается, что все адреса, где хранятся параметры управляющего блока, можно определить через известное (для каждого параметра) смещение адреса управляющего блока. Ниже перечислены эти смещения: статус — (CBST=00H); адрес буфера — (CBUF = 01Н); длина буфера — (СВСС=03Н); счетчик символов (СВСТ=04Н); адрес подпрограммы завершения — (СВОМР = 05Н). Процесс образования адресов и получения необходимых пара- метров из управляющего блока, который принят в программе, поясняется на рис. 22. Командный процессор проверяет, идет вывод данных или нет. Если обмен существует, то происходят обработка кода ошибки и возврат в программу пользователя, а далее обязательно выпол- нение подпрограммы завершения. Если вывод еще не начат, т. е. Рис. 22. Процесс образо- вания адресов и получе- ния параметров из уп- рявляющего блока 68
в ячейке памяти (PIPRG + 1) хранится нуль, командный про- цессор инициирует его. При этом устанавливается признак начала обмена [в PIPRG заносится (DE) ], счетчик числа символов устанавливается в нулевое состояние, происходит вывод символа и далее, если ВУ занято (медленно действующее), происходит возврат в программу пользователя, которая продолжает выпол- няться. Как только ВУ завершит прием символа, формируется сигнал прерывания от БИС к микропроцессору, который перехо- дит к выполнению программы обслуживания прерываний. Эта программа запоминает состояние машины и сканирует БИС для определения источника прерываний. Если прерывания про- исходят по другим причинам, то эти прерывания (PPOLL) обра- батываются и осуществляется возврат к прерванному процессу. Если прерывание происходит от адаптера, то это прерывание запрещается, а разрешается от микропроцессора, и выполняется проверка признака обмена. Если обмена нет, то осуществляются обработка кода ошибки (PIER 1) и возврат к прерванному процессу; в противном случае происходят обращение к подпрограмме PDATA, вывод очередного символа и через подпрограмму PD10 возврат к подпрограмме PRTN и далее к прерванному процессу. Далее этот процесс может повторяться многократно до тех пор, пока все символы из буфера не будут выведены в ПУ. На послед- нем этапе драйвер последовательно выполнят подпрограммы РСОМР, POST и возврат в программу пользователя с последу- ющим вызовом из нее подпрограммы завершения. Исключение сбоев при асинхронном появлении прерывания регулируется коман- дами разрешения (запрещения) прерывания. Для обработки дру- гих ошибочных ситуаций (например, возникновение прерывания от устройства, вывод из которого еще не начинался) должны быть предусмотрены специальные сервисные программы. Текст рас- смотренных программ с комментариями приведен в табл. 11. Программирование БИС КР580ВВ51 БИС КР580ВВ51 предназначена для обмена информацией между микропроцессором и периферийным оборудованием, име- ющим последовательный интерфейс типа ИРПС, RS232 и т. п. Описание структуры, особенностей режимов работы, управля- ющих сигналов этой БИС выходит за рамки данной книги, по- этому здесь приведены лишь те характеристики БИС, которые необходимы для ее программирования. В дальнейшем будем по- лагать, что читатели знакомы с БИС в объеме работ [13, 201. Программирование БИС сводится к записи в ее внутренние регистры ряда управляющих слов, которые могут определять скорость и длину слов обмена, число стоповых битов, синхронный или асинхронный режим, контроль по четности и т. п. Управля- ющие слова могут быть двух форматов: инструкция режима; инструкция команды. 69
Таблица 11 Программное обеспечение режима О Номер по пор. Метка Код операции Операнды Комментарий 1 INIT: MVI A, 10101010B Управляющее слово режима за- 2 OUT F7H нести в А и далее — в РУС 3 MVI A, 0000000IB Установка сигнала СТРОБ-1. OUT MVI F7H A, 00C3H Засылка команды перехода к подпрограмме обслуживания прерывания в ячейку памяти RST7 = 0038H 4 Код безусловного перехода 5 STA RST7 (СЗН) занести в регистр А BRST7 — записать команду безусловного перехода к под- программе обслуживания пре- 6 LXI H, PINT рывания B(HL) — адрес подпрограммы SHLD RST7+1 обслуживания прерывания 7 Адрес подпрограммы обслужи- вания прерывания ввести в ячей- 8 RET ку памяти RST7+1, RST7+2 Командный процессор (обраще- ние из программы пользователя). Адрес управляющего блока в регистрах D, Е 1 2 PSTPT: LDA AHA PIPRG+1 A | Обмен осуществляется? 3 JNZ PSTE Переход к подпрограмме кода ошибки, если «Да» 4 XCHG Обмен содержимого регистров D, Е и Н, L. Адрес управля- ющего блока помещается в Н, L 5 SHLD PIPRG Содержимое регистров Н, L занести в ячейку памяти 6 XCHG Адрес управляющего блока по- местить в регистры D, Е 7 LXI H, CBCT Получить индекс счетчика сим- волов в регистрах Н, L 8 DAD D (HL)-t- (DE)+ (HL) 9 MVI M, 00H Очистка счетчика символов 10 11 12 CALL El PDATA Разрешение прерывания микро- процессора RET Возврат в вызывающую програм- му Программа установки кода ошибки (выполняется, если об- ращение к командному процес- сору произошло, когда опера- ция обмена еще не была завер- шена) 70
Продолжение табл. И Номер по пор. Метка Код операции Операнды Комментарий 1 PSTE: MVI A, 01H Загрузка в регистр А кода ошиб- ки 01Н 2 JMP POST Безусловный переход к подпро- грамме обработки ошибки Подпрограмма обслуживания прерывания (все регистры сохраняются и запоминаются) 1 PINT: PUSH PSW Сохранение содержимого реги- 2 PUSH В стров PSW, А, В, С, D, Н, L 3 PUSH D в памяти по адресу SP, кото- 4 PUSH H рый должен быть установлен заранее в программе пользо- вателя. Определение источника прерывания 5 IN F6H Проверка разряда КС8 на еди- ничное значение 6 ANI 08H 7 JZ PPOLL Если «Нет», переход по PPOLL (подпрограмма обработ- ки прочих прерываний) 8 MVI A, 00001100B Запрещение прерываний от 9 OUT F7H адаптера 10 El Разрешение прерывания микро- процессора 11 LHLD PIPRG В регистрах Н, L считать адрес управляющего блока 12 XRA A Очистка регистра А 13 CMP H Проверка содержимого реги- стра Н на нуль 14 JZ PIERI Если «Нет», переход по метке PIER1 15 XCHG Адрес управляющего блока за- нести в регистры D, Е 16 CALL PDATA Подпрограмма восстановления содержимого регистров 17 PRTN: POP H Восстановление регистров Н, L 18 POP D Восстановление регистров D, Е 19 POP В Восстановление регистров В, С 20 POP PSW Восстановление регистров A, F 21 El Разрешение прерывания микро- процессора 22 RET Возврат Подпрограммы обработки, про- чих прерываний и ошибок (со- ставляет пользователь) 23 PPOLL: JMP PRTN Обработка прочих прерываний 24 PIERI: JMP PRTN Обработка ошибок Подпрограмма вывода данных из системы. Адрес управляю- щего блока хранится в реги- страх D, Е микропроцессора 71
Продолжение табл. И Номер по пор. Метка Код операции Операнды Комментарий 1 PDATA: IN F6H Проверка первого разряда КС7 ППИ 2 ANI 80H Устройство занято? 3 JZ PD10 Если занято, переход по метке PD10 4 LX I CBCT Получить индекс текущего счетчика символов (HL)<-(DE)+ 5 DAD D + (HL) (Вычислить адрес счет- чика) 6 MOV A, M Загрузить в регистр А содер- жимое счетчика 7 INR M Увеличить содержимое счетчика на единицу 8 DCX H Получить в регистрах Н, L ад- рес длины буфера 9 CMP M Сравнить содержимое регистра А (текущий счетчик) с ячейкой памяти (адрес равен содержи- мому Н, L), в которой хранится длина буфера данных 10 JZ PCOMP Если «Да», переход по метке 11 LX I H, CBUF Загрузка индекса адреса буфера 12 DAD D Вычисление начального адреса 2-го слова 13 PUSH D Адрес управляющего блока за- нести в стек 14 MOV E, M 1-й (младший) байт адреса 1-го слова занести в регистр Е 15 16 INX H Получение адреса 2-го байта адреса 1-го слова MOV D, M 2-й байт (старший) адреса 1-го слова занести в регистр D 17 MVI H, OOH Очистка регистра Н 18 MOV DAD L, A Содержимое счетчика переслать в регистр L 19 D Вычисление адреса символа 20 MOV A, M Символ переслать в регистр А. 21 OUT F4H Вывод символа в порт адаптера 22 MVI A, 00000000B Сброс строба в нуль 23 OUT F7H 24 INR A Установка строба в единицу 25 OUT F7H 26 POP D PDATA Восстановить в регистрах D, Е адрес управляющего буфера 27 JMP PD10: Подпрограмма «Принтер занят» 1 DI Запрещение прерываний про- цессора 2 MVI A, 00001101В Разрешение прерывания от 3 OUT F7H адаптера 4 RET Возврат Подпрограмма установки и об- работки кода успешного завер- шения (ООН) 72
Продолжение табл. 11 Номер по пор. Метка Код операции Операнды Комментарий 1 РСОМР: MVI CALL A, OOH Занести в регистр А код успеш- ного завершения ООН 2 POST 3 XRA A Очистка регистра А 4 STA PIPRG+1 В ячейку памяти PIPRG+1 занести нуль 5 RET Возврат в вызывающую про- грамму Подпрограмма обработки кода завершения. В регистре А на- ходится код завершения, в ре- гистрах D, Е — адрес управ- ляющего блока 1 POST: XCHG Обмен содержимого регистров D, Е и Н, L. Адрес управляю- щего блока переслать в реги- M, A стры Н, L 2 MOV В ячейку памяти по адресу управляющего блока поместить код завершения 3 XCHG Обмен содержимого регистров D, Е и Н, L. Адрес управля- ющего блока занести в реги- стры D, Е 4 LXI H, CBOMP Поместить в регистр Н индекс адреса подпрограммы заверше- ния 5 DAD D Вычислить полный косвенный 6 MOV C, M адрес В регистр С поместить 1-й байт адреса подпрограммы заверше- ния 7 INX H В регистры Н, L поместить адрес 2-го байта 8 MOV B, M В регистр В поместить 2-й байт адреса подпрограммы заверше- ния 9 PUSH В Адрес подпрограммы заверше- ния поместить в стек 10 RET Возврат в подпрограмму поль- зователя Инструкция режима определяет основные рабочие характе- ристики БИС. Единожды выполненная инструкция режима поз- воляет затем многократно выполнять инструкцию команд управ- ления обменом до следующей смены режима. Инструкция команды используется для указания конкретных операций по обмену информацией, таких, как передача, прием, сброс, активное ожидание и т. п. Инструкция режима всегда идет следом за программным или аппаратным сбросом БИС в исходное состояние. 73
Управляющий сигнал пнч/д Только для синхронного режима работы Могут быть данные записываемые или читаемые Могут быть данные записываемые или читаемые Примечание Может быть аппа- ратным или про- граммным Читаемые данные Могут быть данные записываемые или читаемые Рис. 23. Структура инфор- мационного потока В асинхронном режиме все управляющие слова, следующие за инструкцией режима, воспринимаются как инструкция коман- ды. В синхронном режиме работы за инструкцией режима следуют один или два символа синхронизации; все дальнейшие управляющие слова являются инструкциями команды. При программировании БИС КР580ВВ51 и организации по- тока между МП и БИС следует руководствоваться рис. 23—27. Микропроцессор может в любой момент времени считать состоя- ние БИС с целью выявить ошибки, возникшие при преобразовании информации, а также скопировать сигналы внешних устройств, анализируя биты регистра слова состояния. Три бита регистра слова состояния выделены для индикации состояния признаков ошибок. Чтение регистра состояния происходит при наличии сигнала на входе ПНУ/Д — 1 (см. рис. 23) [20]. Практическую реализацию операций инициализации БИС, программирование отдельных ее режимов работы рассмотрим на отдельных примерах. Во всех примерах примем, что адрес БИС 74
равен PORT51 —1, адрес БИС при наличии сигнала ПНУ/Д = 1 равен P0RT51 —1 + 1. Рис. 24. Формат инструкции асинхронного режима работы 07 06 05 04 ОЗ 02 0 0 0 1 0 1 0 0 1 1 5бит вбит 7 бит вбит 11 Разрешить контроль по четности < (нечетности) (0 Запретить контроль по четности (нечетности) (1 Контроль на четность |0 Контроль на нечетность Г / Внешняя синхронизация ]0 Внутренняя синхронизация f / Один символ 1 Внутренняя "лО Два символа] еинхРаниз^ия Рис. 25. Формат инструкции синхронного режима работы 75
Рис. 26. Формат инструкции команды {1 Передача разрешена q передача запрещена 1 Программная установка сигнала готовности передатчика ( 1 Прием разрешен [ 0 Прием запрещен {1 программная установка Выхода передатчика 8 нуль О Нормальная работа {1 Сброс признаков ошибок О нет сброса 1 Программная установка сигнала готовности приемника 1 Общий программный сброс, эквивалентно аппаратному сигналу СБРОС ( 1 Поиск синхросимволоВ разрешен । о Нет поиска Рис. 27. Формат регистра слова состояния Пример 68. Программный сброс в исходное состояние: SBROS: MVI А, 40Н OUT PORT51+1 RET 40 — 01000000В — инструкция команды. Пример 69. Задать асинхронный режим работы со следующими параметрами: два стопбита, предусмотрен контроль на четность, длина слова 8 бит, коэффи- циент деления частоты синхроимпульсов генератора 16. Решение: SEQ1: MVI OUT RET A, 0FEH PORT51+1 76
Пример 70. Задать синхронный режим работы со следующими параметрами: один символ синхронизации, синхронизация внутренняя, предусмотрен контроль на четность, длина слова 8 бит, код символа синхронизации 7ЕН = 01111110В. Решение: SEQ2: MVI A, OBCH OUT PORT51+1 MVI A, 7EH OUT PORT51+1 RET Пример 71. Выполнить опрос готовности передатчика, анализируя содержи- мое регистра состояния, и, данных. Решение: если БИС готова к передаче, загрузить новый байт SEQ3: IN PORT51+1 RRC JNC SEQ3 LDA NEXT OUT PORT51+1 RET NEXT — адрес новой передаваемой информации. Пример 72. Выполнить опрос готовности приемника БИС. Передать приня- тые данные микропроцессору и, если приемник БИС готов к передаче в микропро- цессор, принять этот байт и загрузить в область NEXT1. Решение: SEQ4: IN PORT51+1 RRC RRC JNC SEQ4 IN PORTSl STA RET NEXT1 Пример 73. Выполнить условия примера 72, однако перед запоминанием принимаемого из приемника байта проверить принятую информацию на наличие ошибки. Решение: SEQ5: IN PORT51+1 RRC RRC JNC SEQ5 ANI OEH JNZ PROG1 IN PORT51 STA RET NEXT1 PROG1 — подпрограмма обработки ошибок. Следует подчеркнуть, что в примерах 71—73 используется программный опрос состояния БИС, однако сигналы прерывания в других вариантах построения МПС могут быть выведены на линию прерывания (INT). Пример 74. Выполнить инициализацию БИС на передачу данных в асинхрон- ном режиме (параметры совпадают с параметрами в примере 69) с использованием программного опроса готовности. 77
Решение: SEQ6: MVI A, 40H OUT PORT5I+1 MVI A, OFEH OUT PORT51+1 MVI A, 01H OUT PORT51+1 S1: IN PORT51+1 RRC JNC SI IN PORT51 LDA NEXT OUT PORT51 RET Пример 75. Выполнить инициализацию БИС на прием данных в асинхронном режиме (параметры совпадают с параметрами в примере 69) с использованием программного опроса готовности. Решение: SEQ7: MVI A, 40H OUT PORT51+1 MVI A, OFEH OUT PORT51+1 MVI A, 04H OUT PORT51+1 S2: IN PORT51+1 RRC RRC JNC S2 IN PORT51 STA NEXT RET Пример 76. Выполнить инициализацию БИС на передачу в асинхронном режиме (параметры совпадают с параметрами в примере 70). Решение: SEQ8: MVI A, 40H OUT PORT51+1 MVI A, OBCH OUT PORT51+1 MVI A, 7EH OUT PORT51+1 MVI A, 01H OUT RET PORT51+1 Программирование контроллера КР580ВТ57 прямого доступа к памяти Контроллер прямого доступа предназначен для применения в микроЭВМ на базе микропроцессора КР580ИК80 и позволяет существенно улучшить характеристики микроЭВМ при интенсив- ном обмене информацией между внешними устройствами и па- мятью. Авторы полагают далее, что читатели знакомы со структурой контроллера в объеме работ [20, 32, 36]. 78
Контроллер имеет четыре канала прямого доступа, каждый из которых содержит шестнадцатиразрядные регистр адреса и ре- гистр управления и, кроме того, восьмиразрядные, общие для всех каналов регистр режима и регистр слова состояния. Программирование канала сводится к следующим операциям: запись в регистр адреса (РА) шестнадцатиразрядного началь- ного адреса обмена; запись в регистр управления (РУ) шестнадцатиразрядного слова, причем два старших разряда РУ15, РУ14 определяют ре- жим работы канала, а разряды РУ13—РУО задают длину пере- даваемого блока данных; запись восьмиразрядного кода в регистр режима (РР), разре- шающего работу запрограммированных каналов. Обратим внимание читателей на основные особенности про- граммирования контроллера. 1. При записи информации в регистры РА или РУ выпол- няются два обращения к регистрам, причем вначале записывается младший байт, а затем — старший байт. Запись осуществляется по одному и тому же адресу регистра. Операцию записи шестнад- цатиразрядного слова в регистры необходимо всегда выполнять полностью. 2. В микропроцессорной системе, работающей с прерыва- ниями, следует запрещать прерывания перед выполнением двой- ного обращения к регистрам. 3. После сигнала СБРОС в РР контроллера содержатся нули и работа всех каналов запрещена. Запись байта в РР необходимо всегда выполнять после загрузки параметров в РА и РУ. 4. После каждого запроса ПДП контроллер необходимо пере- программировать, если не был установлен режим автозагрузки. При обращении к внутренним регистрам контроллера следует пользоваться табл. 12. Примем в последующих программах, что адрес регистра адреса РАО записывается как PORT 57, тогда, например, адрес регистра режима будет PORT57 + 8. В зависимости от способа подключе- ния управляющих сигналов контроллера к шине управления Таблица 12 Адресация внутренних регистров Регистр вм АЗ А2 А1 АО Регистр ВМ АЗ А2 А1 АО РАО 0 0 0 0 0 РУ2 0 0 1 0 1 PYO 0 0 0 0 1 РАЗ 0 0 1 1 0 РА1 0 0 0 1 0 РУЗ 0 0 1 1 1 РУ1 0 0 0 1 1 РР 0 1 0 0 0 РА2 0 0 1 0 0 /запись) PC (чтение) 0 1 0 0 0 79
Таблица 13 Кодирование РУ 15, РУ 14 РУ15 РУ14 Операция 0 1 Чтение из ВУ—запись в ЗУ 1 0 Чтение из ЗУ—запись в ВУ ЗПЗУ ЧТЗ!1 зш чтвв Системная шина ЧТ88 ЗШ ЧТЗУ ЗПЗУ Рис. 28. Подключение контроллера (вариант 1) ЗПЗУ — сигнал записи в ЗУ; ЧТЗУ — сигнал чтения из ЗУ; ЗПВВ — сигнал записи в устройство ввода—вывода; ЧТВВ — сигнал чте- ния из устройства ввода-вывода изменяется кодирование разрядов РУ 15, РУ 14 регистра управ- ления. Так, при подключении контроллера по схеме, показанной на рис. 28, кодирование РУ15, РУ14 будет выполняться согласно табл. 13. Если контроллер подключен по схеме, изображенной на рис. 29, то кодирование управляющих разрядов будет обрат- ным (табл. 14). Рассмотрим назначение разрядов регистра режима и регистра состояния (PC) [32]. Каждый разряд регистра режима имеет самостоятельное зна- чение. Разряды РРО—РРЗ в единичном состоянии разрешают, а в нулевом состоянии запрещают работу каналов с номером, равным номеру разряда. Разряд РР4 в нулевом состоянии устанавливает фиксирован- ные приоритеты каналов, а в единичном — циклические. Разряд РР5 в нулевом состоянии обеспечивает генерацию сигналов записи по обычной временной диаграмме, а в единич- ном — на один такт синхросерии раньше. Это позволяет избегать перехода контроллера в состояние ожидания при работе с внеш- ними устройствами, генерирующими сигнал готовности по фронту сигнала записи. Разряд РР6 в единичном состоянии обеспечивает сброс соот- ветствующего разряда РРО—РРЗ, в цикле ПДП которого был выработан сигнал «Конец счета». При этом канал отключается. При программировании желательно всегда устанавливать РР6 в единичное состояние. Таблица 14 Кодирование РУ 15, РУ 14 РУ15 РУ14 Операция 0 1 Чтение из ЗУ—запись в ВУ 1 0 Чтение из ВУ—запись в ЗУ Системная шина Рис. 29. Подключение контроллера (вариант 2). Обозначения те же, что на рис. 28 80
Разряд РР7 (разряд автозагрузки) в единичном состоянии обеспечивает возможность использования повторяющегося аппа- ратного перепрограммирования канала 2 по сигналу «Конец счета». При этом РР6 = 1 не останавливает работу канала 2. Аппаратная автозагрузка реализуется путем пересылки содержи- мого РАЗ, РУЗ в регистры РА2, РУ2 без изменения содержимого регистров канала 3. Эта возможность сокращает потери времени на перепрограммирование и широко применяется при работе с кон- троллером ЭЛТ (КР580ВГ75). Заметим, что если работа канала 3 разрешена, то он в режиме автозагрузки будет работать обычным образом. Разряды РСО—РСЗ регистра состояния устанавливаются в еди- ничное состояние, когда при работе канала с номером, равным номеру разряда, возникает сигнал «Конец счета». Эти разряды остаются в единичном состоянии до считывания содержимого PC, после чего сбрасываются в нуль. Разряд РС4 регистра слова состояния устанавливается в еди- ничное состояние, когда после сигнала «Конец счета» в контрол- лере происходит автозагрузка. Программа загрузки параметров в канал 3 должна опрашивать РС4, чтобы исключить возмож- ность обращения к регистрам канала 3 в это время. Параметры из канала 3 в канал 2 при автозагрузке пересылаются в начале первого после сигнала «Конец счета» цикла ПДП канала 2. В конце этого цикла разряд РС4 сбрасывается в нуль, после чего программ- но можно загружать новые параметры в регистры канала 3. Пример 77. Подпрограмма начальной установки контроллера в режим обмена 16 байт данных (с последующим отключением) имеет вид: LOAD: MVI A, 00H Запись младшего байта в РА2 OUT MVI PORT57+4 A, 09H Запись старшего байта в РА2 OUT MVI PORT57+4 A, 0FH Запись младшего байта в РУ2 OUT MVI PORT57+5 A, 40H Запись старшего байта в РУ2 OUT MVI PORT57+5 A, 44H Запись управляющего байта OUT RET PORT57+8 в регистр режима 0900Н — адрес начальной зоны ОЗУ; 40Н = 01000000В — режим «Чтение из ВУ — запись в ЗУ»; 0FH = 00001111В — число байтов; 44Н — 01000100В — разрешение работы канала 2, фиксированный приори- тет каналов, генерация сигналов по обычной схеме, сброс разряда РР2 после вы- работки сигнала «Конец счета», автозагрузки нет. Пример 78. Подпрограмма перепрограммирования канала 3 контроллера после завершения обмена имеет вид: PPROG: IN ANI CNZ JMP PORT57+8 08H LOAD1 PPROG 81
LOAD1: MVI A, 00H OUT PORT57+6 MVI A, 040H OUT PORT57+6 MVI A, 0FFH OUT PORT57+7 MVI A, 043H OUT PORT57+7 MVI A, 48H OUT PORT57+8 RET 08Н — маска для выделения бита РСЗ; 4000Н — адрес начальной зоны ОЗУ; 43FFH = 0100001111111111В— режим «Чтение из ВУ — запись в ЗУ»; 3FFH — число байтов обмена; 48Н = 01001000В — разрешение работы канала 3, фиксированный приори- тет каналов, генерация сигналов по обычной схеме, сброс сигнала РРЗ после сиг- нала «Конец счета». Пример 79. Подпрограмма начальной установки контроллера в режиме автозагрузки: LOAD2: MVI А, ООН OUT PORT57+4 MVI А, 09Н OUT PORT57 + 4 MVI А, 07Н OUT PORT57+5 MVI А, 40Н OUT PORT57 + 5 MVI А, ООН OUT PORT57 + 6 MVI А, 09Н OUT PORT57+6 MVI А, 07Н OUT PORT57+7 MVI А, 40Н OUT PORT57+7 MVI А, ССН OUT PORT57+8 RET 0900Н — адрес начальной зоны ОЗУ (канал 2); 07Н — число передаваемых байт; 04Н — режим «Чтение из ВУ — запись в ОЗУ»; ССН-11001100В — режим автозагрузки, фиксированный приоритет каналов, генерация сигналов по обычной схеме. Программирование таймера КР580ВИ53 Программируемый таймер КР580ВИ53 предназначен для за- дания временных интервалов в МПС и может использоваться в следующих стандартных режимах работы [20, 331: счетчик внешних событий, программируемый ждущий мультивибратор, делитель частоты, генератор меандра, программно и аппаратно запускаемый строб. БИС содержит три независимых канала. В каждом канале есть регистр управляющего слова, шестнадцатиразрядный про- 82
граммируемый счетчик, работающий на вычитание в двоичном или двоично-десятичном коде, двухбайтный буферный регистр, в ко- торый по специальной команде переписывается текущий код счетчика. Программирование каждого канала таймера сводится к следующим операциям: запись в регистр управляющего слова индивидуального слова управления канала; запись в шестнадцатиразрядный программируемый счетчик необходимого кода пересчета. После выполнения этих операций канал готов к работе под управлением внешних сигналов. Обратим внимание читателя на основные особенности програм- мирования таймера. 1. Запись индивидуального слова управления канала про- исходит по единому для всех каналов адресу (А0= 1, Al = 1). Указание конкретного канала, к которому относится управля- ющее слово, содержится в самом управляющем слове. 2. Режим обращения к шестнадцатиразрядному программи- руемому счетчику определяется разрядами D4, D5 управляющего слова. Однако необходимо обязательно завершить цикл обра- щения к счетчику полностью, т. е. если запрограммировано два обращения, то одно кратное обращение вызовет неправильную работу канала. Если разряды управляющего слова D4, D5 — О, то при записи такого управляющего слова содержимое шестнад- цатиразрядного счетчика «защелкивается» в буферном регистре. Таким образом, можно получать мгновенное (в момент записи) значение содержимого счетчика. 3. Обращение к адресам начальных счетчиков таймера как при начальной загрузке, так и в процессе работы канала, может происходить в любой последовательности. 4. Считывание регистра управляющего слова запрещено. Адресация регистров таймера приведена в табл. 15. Опишем назначение разрядов управляющего слова канала. Разряд DO в нулевом состоянии устанавливает режим двоичного счета, а в единичном состоянии — режим двоично-десятичного счета. Разряды D3, D2, D1 определяют режим работы канала. Каж- дый канал может работать в одном из шести режимов (табл. 16). Таблица 15 Адресация регистров таймера А1 АО Название регистра А1 АО Название регистра О 0 Счетчик канала О О 1 Счетчик канала 1 Счетчик канала 2 Регистр управляющего слова 83
Таблица 16 Кодирование режимов Название режима D2 D1 Л ftS £ S £ « Название режима О Генерация програм- мируемого задер- жанного перепада 0-> 1 1 Программируемый одновибратор 2 Программируемый делитель частоты 3 Программируемый делитель частоты с выходным сигналом типа меандр 4 Программно-запу- скаемый задержан- ный строб 5 Аппаратно-запускае- мый задержанный строб 1 1 О 1 Разряды D5, D4 устанавливают режимы обращения к стар- шему и младшему байтам счетчиков канала (табл. 17). Разряды D7, D6 — разряды косвенной адресации к трем регистрам управляющего слова, т. е. они определяют, в какой из регистров управляющего слова, какого канала будут записаны остальные управляющие разряды D5—DO (табл. 18). Практическую реализацию операций инициализации или на- стройки таймера рассмотрим на примерах. Во всех примерах примем, что адрес счетчика канала 0 равен PORT53, все осталь- ные адреса будем записывать в виде PORT53 + Z, где i — номер канала. Пример 80. Подпрограмма начальной установки вид: TIME: MVI А, 1АН OUT PORT53+3 MVI А, 13Н OUT PORT53+3 RET Таблица 17 Кодирование разрядов D5, D4 канала 0 (режим 5) имеет Канал 0, режим 5 Таблица 18 ю Q S Функция ю Q Q Функция 0 1 0 0 Перепись теку- щего кода счет- чика канала в бу- ферный регистр канала Обращение к старшему байту счетчика 0 1 I 1 Обращение к младшему байту счетчика Последовательное обращение снача- ла к младшему, затем к старшему байтам счетчика канала Кодирование разрядов D7, D6 84
1АН = 00011010В — режим двоичного счета, режим 5, канал 0, обращение к младшему байту. 13Н — число, записываемое в младший байт счетчика. Если в счетчик необходимо загрузить двухбайтное число 1513Н, то под- программа будет выглядеть следующим образом: TIME: MVI A, 3AH OUT PORT53+3 MVI A, 13H OUT PORT53+3 MVI A, 15H OUT PORT53 RET Пример 81. Подпрограмма начальной установки таймера: канал канал канал 0, режим 5, в 1, режим 1, в 2, режим 5, в счетчик счетчик счетчик загрузить 1513Н; загрузить 06Н; загрузить 0BH имеет вид: TIME3: MVI A, 3AH OUT PORT53+3 MVI A, 52H OUT PORT53+3 MVI A, 9AH OUT PORT53+3 MVI A, 13H OUT PORT53 MVI A, 15H OUT PORT53 MVI A, 06H OUT PORT53+1 MVI A, 0BH OUT RET PORT53+2 52Н = 01010010В — режим двоичного счета, режим 1, канал 1, обращение к младшему байту; 9АН = 10011010В — режим двоичного счета, режим 5, канал 2, обращение к младшему байту. Иногда по текущему значению числа в счетчике канала необ- ходимо принимать какое-либо решение в программе. Существует два способа считывания микропроцессором числа, содержащегося в счетчике. При первом способе на время выполнения обычной операции «Чтение счетчика» внешней логикой должна быть запре- щена подача синхронизирующих импульсов на данный канал тай- мера. В этом случае считывание осуществляется одной или двумя командами в зависимости от разрядов D4, D5 ранее записанного управляющего слова. Причем при первом считывании (D4 — == D5 = 1) получаем младший байт счетчика, при втором — старший байт счетчика. 85
Пример 82. = D5 = 1): Подпрограмма чтения содержимого счетчика канала 0 (D4 — TIME4: MVI A, 01H Программное отключение OUT OTKL синхроимпульсов таймера IN PORT53 Получение младшего байта MOV L, A счетчика IN PORT53 Получение старшего байта MOV H, A счетчика RET Второй способ считывания содержимого счетчика канала не нарушает выполнение счета в канале. Пример 83. Подпрограмма чтения содержимого счетчика канала 0 без нару- шения счета в канале: TIME5: MVI A, XX00XXXXB OUT PORT53+3 IN PORT53 MOV L, A IN PORT53 MOV H, A RET ХХООХХХХХВ — управляющее слово, записываемое в регистр управляю- щего слова, причем D4 = D5 = 0, а вместо X указываются те значения битов, которые были записаны при инициализации канала 0. Программирование контроллера прерываний КР580ВН59 Программируемый контроллер прерываний (ПКП) КР580ВН59 позволяет осуществлять прерывание основной программы микро- процессора по одному из восьми запросов прерывания (с возмож- ностью расширения до 64) от периферийных устройств или по инициативе микропроцессора по опросу запросов на обслуживание внешних устройств. При описании программирования кристаллов будем считать, что читатели знакомы со структурой БИС в объеме работ [1, 20]. Вместе с тем ниже приведена вся необходимая ин- формация для программирования. Важное отличие БИС КР580ВН59 от БИС КР589ИК14 состоит в том, что последняя выдает на шину данных код команды RST, а рассматриваемая нами БИС — трехбайтную команду CALL (код CD). Структура ПКП содержит три программно-доступных регистра: регистр маски прерываний (РгМПр), регистр запроса прерываний (РгЗПр) и регистр обслуживания прерываний (РгОПр) [20]. Обмен информацией с ними происходит путем обращения к ПКП как к двум устройствам ввода-вывода или как к двум адресам памяти. Установку ПКП к исходное состояние (при инициализации БИС) и алгоритм обслуживания прерываний программируют командами двух типов, записываемыми в ПКП: словами команды инициализации (СКИ) и словами команды операций (СКО). Си- стема команд, используемая для программирования ПКП, при- ведена в табл. 19. Правильное программирование ПКП во многом 86
Таблица 19 Система команд ПКП Слова команд АО D7 D6 D5 D4 D3 D2 D1 DO СКИ1 а 0 А7 А6 А5 1 0 1 1 0 б 0 А7 А6 А5 1 0 1 0 0 в 0 А7 А6 — 1 0 0 1 0 г 0 А7 А6 — 1 0 0 0 0 СКИ2 — 1 А15 А14 А13 А12 АП А10 А9 А8 скиз а 1 S7 S6 S5 S4 S3 S2 S1 SO б 1 0 0 0 0 0 ID2 ID1 IDO СКО1 — 1 М7 Мб М5 М4 М3 М2 Ml МО СКО2 а 0 0 0 1 0 0 — — — б 0 1 0 1 0 0 — — — в 0 0 1 1 0 0 L2 L1 LO г 0 1 1 1 0 0 L2 L1 LO Д 0 1 1 0 0 0 L2 L1 LO скоз а 0 — 0 0 0 1 1 0 0 б 0 — 0 0 0 1 0 1 1 в 0 — 0 0 0 1 0 1 0 г 0 — 1 1 0 1 0 0 0 д 0 — 1 0 0 1 0 0 0 Примечание. Знак «—» означает, что значение этого разряда может быть 0 или 1. 87
определяется правильным пониманием действий, вызываемых командой. Поэтому рассмотрим команды ПКП более подробно. Слово команды инициализации СКИ1 — это первое управля- ющее слово, посылаемое в ПКП по адресу АО = 0 для установки в исходное состояние. СКИ1 своими разрядами (D7—DO) опре- деляет следующие особенности работы ПКП: разряд D1 указывает на число совместно работающих ПКП, в частности D1 = О, если ПКП не менее двух и DI = 1, если в системе один ПКП; впоследствии значение этого разряда используется в БИС для того, чтобы различать СКИЗ и СКО; разряд D2 указывает на формат младшего байта адреса в команде CALL. Как уже отмечалось, после формирования сиг- нала INT в микропроцессоре и получения от него сигнала INTA ПКП выставляет на шине данных (ШД) микропроцессора код команды CALL, далее в следующем машинном цикле на ШД микропроцессора будет выработан код, который является млад- шим байтом адреса вектора прерывания. Этот код в зависимости от значения D2 имеет два формата (рис. 30). Для формата 4 начальные адреса предыдущих подпрограмм обслуживания прерывания отличаются от последующих на че- тыре адреса, для формата 8 — на восемь адресов. Слово команды инициализации СКИ2 — это второе управля- ющее слово, посылаемое в ПКП, но посылаемое уже по адресу АО = 1. Микропроцессор, посылая в ПКП СКИ2, фактически загружает в него старший байт адреса команды CALL. Формат команды, распределение значений разрядов адреса по управ- ляющему слову СКИ2 приведены в табл. 19. Если DI = 1 в СКИ1, то СКИ2 завершает начальную уста- новку ПКП. В результате начальной установки в ПКП проис- ходят следующие процессы: устанавливаются в нулевое состояние регистр маски прерывания, внутренний триггер маскирования прерываний и триггер разрешения чтения состояния схемы, уста- навливаются приоритеты запросов прерывания (ЗПрО — высший, ЗПр7 — низший); происходит подготовка ПКП к приему запро- сов на прерывание. Если D1 = 0 в СКИ1, то процесс начальной установки за- вершается записью слова команды инициализации СКИЗ в веду- щий и ведомый ПКП, причем форматы СКИЗ для ведущего и ведомого ПКП различны (см. табл. 19). Формат 4 (при 02 = 1) 07 Об Л5 04 03 02 01 00 47 А6 А5 В2 81 ВО 0 0 Формат 8 (при 02=0) 07 06 05 D4 D3 02 D1 00 А7 А6 А5 А4 ВО 0 0 0 Рис. 30. Форматы младшего байта адреса: А7, А6, А5 (для формата 4) — значения разрядов СКИ1, заданные при программи- ровании; В2, В1, ВО — двоично-десятич- ный код запроса на прерывание (под дей- ствием которого ПКП вырабатывает сигнал INT), принимающий значения 000—111 88
Например, если выход INT ведомого ПКП поступает на вход запроса прерывания ЗПр5, то СКИЗ для ведущего ПКП имеет формат 00100000, т. е. значение единицы приобретает разряд D5 СКИЗ, а СКИЗ для ведомого ПКП имеет формат 00000101, т. е. в разрядах D0—D2 СКИЗ записывается двоичный эквивалент цифры пять. Для других входов кодирование СКИЗ происходит аналогично. Запись СКИЗ происходит по адресу АО = 1; разумеется, адреса ведущего и ведомого ПКП должны быть различными. Для обслуживания запроса, поступившего на вход ведомого ПКП, с приходом первого сигнала INTA ведущий ПКП выдает на ШД код команды CALL, а на шины CAS0—CAS2 — код номера ве- домого ПКП. Эти сигналы параллельно поступают на все ведо- мые ПКП. С приходом следующих сигналов INTA адрес подпро- граммы выдается на ШД ведомым ПКП, запрограммированный номер которого совпал с кодом на линиях CAS0—CAS2. Слова команды операций (СКО) могут записываться в ПКП в любой момент после выполнения команд начальной установки. Состояние АО при записи СКО указаны в табл. 19. СКО1 используется для выборочного маскирования любого входа запроса на прерывание. Установка в единицу того или иного регистра маски с помощью записи в него СКО1 блокирует передачу запроса на прерывание. Однако, если через некоторое время после подачи запроса маска будет снята программой, за- прос будет обслужен. СКО2 используется в программах обработки прерываний для сброса разряда регистра РгОПр, а также для задания цикличе- ского сдвига приоритета запросов и режимов изменения приори- тетов запросов. Особенность применения команды СКО2 поясним на примерах. Если запрос на прерывание уже сформирован ПКП, то любой из уровней с более низким приоритетом не может прервать работу микропроцессора, т. е. обслуженный запрос запрещает обслужи- вание запросов с таким и более низким уровнем приоритета. В этом случае для обслуживания запросов с более низким уров- нем приоритета необходимо произвести сброс кода обслуженного запроса, что осуществляется записью команды СКО2. Причем, если статус приоритета не нарушен (ЗПрО имеет высший приоритет), в ПКП подается команда СКО2 в формате 00100000; если статус приоритета был нарушен (т. е. изменялся по ранее введенным командам), в ПКП записывают команду СКО2 в фор- мате 01100 LaLiLo, где LgLjLo — код стираемого обслуженного запроса. Эти два формата команды используются в подпрограм- мах обслуживания прерываний при работе ПКП с фик ирован- ным приоритетом прерывания. Следующие три формата команды СКО2 позволяют при за- писи в ПКП циклически сдвигать приоритет запросов на пре- рывание. Команда СКО2 (формат 10100 LaLxLo) при записи в ПКП 89
07 Об 05 04 03 02 Of DO 1 — — — — К2 К! КО Рис. 31. Формат кода запроса: К2, К1, КО — двоично-десятичный код но- мера запроса с наивысшим приоритетом; D7-1 — при наличии запроса производит сброс обслуженного запроса на прерывание, присвое- ние обслуженному запросу низшего уровня и циклический сдвиг приоритетов. Команда СКО2 (формат 11100 L2LiL0) при записи в ПКП выполняет сброс обслуженного запроса на прерывание и смену приоритетов запросов на прерывание. Причем низший по приоритету уровень задается кодом L2LiL0 в разрядах D2, DI, D0 команды СКО2. Команда СКО2 (формат 11000 LjI^Lo) при записи в ПКП присваивает низший приоритет входу, указан- ному в трех младших разрядах команды и осуществляет цикличе- ское изменение приоритетов без изменения содержимого РгОПр. Таким образом, указанные три формата команды СКО2 дают дополнительные программные возможности управления запро- сами на прерывания. Слово команды операции СКОЗ используется для организации программного опроса состояний ПКП. Режим программного опроса может быть реализован со всеми дисциплинами назначения приоритетов. Прерывания микропроцессора во время выполнения режима программного опроса состояний ПКП должны быть запрещены. Запись команды СКОЗ в ПКП выполняется по адресу АО = 0. Рассмотрим форматы команд СКОЗ. Команда СКОЗ в формате 00001100. После записи этого слова в ПКП в следующем цикле можно считывать из ПКП код запроса с наивысшим приоритетом (рис. 31). Чтение кода запроса с наивысшим приоритетом выполняется по адресу АО = 0. Команда СКОЗ в формате 00001010. После записи этого слова в ПКП в следующем цикле можно из ПКП считать содержимое регистра запросов. Проверяя затем значения разрядов получен- ного байта, можно определить состояния запросов на прерывание. Обратим внимание, что все поступающие на вход ПКП запросы ЗПрО—ЗПр7 записываются в регистр запросов Команда СКОЗ в формате 00001011. После записи этого слова в ПКП в следующем цикле можно считать содержимое регистра обслуживаемого прерывания (РгОПр), который всегда содержит приоритетный уровень прерывания с учетом регистра маскирова- ния (РгМПр), т. е. если РгМПр маскирует ЗПрО, то в РгОПр должен содержаться ЗПр 1 при условии, что он уже зафиксирован наряду с ЗПрО в регистре запросов РгЗПр. Слово команды СКОЗ используется для установки режима спецмаскирования (формат 01101000) или для сброса режима спецмаскирования (формат 01001000). Режим спецмаскирования служит для того, чтобы во время выполнения прерываний по маскируемому входу разрешить обслуживание входов запросов, имеющих более низший приоритет, чем маскируемый вход. В этом 90
режиме входы с более низким приоритетом обслуживаются до тех пор, пока действует режим спецмаскирования. Режим назначается и снимается после начала выполнения подпрограммы обслужива- ния прерывания. В приведенных ниже примерах примем, что адрес ПКП при АО = 0 записывается в виде PORT59, а при АО = 1 — в виде PORT59 + 1; для ведомого ПКП примем адреса PORTB59 и PORTB59 + 1. Пример 84. Подпрограмма инициализации ПКП задает следующие параме- тры: в схеме один ПКП; начальный адрес подпрограммы обслуживания преры- вания 3000Н; далее адреса идут через четыре байта, т. е. 3004Н, 3008Н и т. д.; маскировать все запросы кроме запроса ЗПрО. Вид подпрограммы: INIT: MVI A, 16H OUT PORT59 MVI А, ЗОН OUT PORT59+1 MVI A, FEH OUT RET PORT59+1 Пример 85. Подпрограмма инициализации ПКП: в схеме два ПКП, выход INT ведомого ПКП поступает на вход ЗПр5 ведущего ПКП; 3000Н — начальный ад- рес подпрограммы обслуживания прерывания ведущего ПКП; далее адреса под- программы обслуживания идут через четыре байта; 3032Н — начальный адрес подпрограммы обслуживания прерываний ведомого ПКП, далее адреса подпро- грамм обслуживания идут через восемь байтов. Подпрограмма имеет вид: INIT1: MVI A, 14H OUT PORT59 MVI А, ЗОН OUT PORT59+1 MVI A, 20H OUT PORT59+1 MVI А, ЗОН OUT PORT59 MVI А, ЗОН OUT PORT59+1 MVI A, 05H OUT PORT59+1 RET Пример 86. Подпрограмма маскирования всех запросов, кроме запроса ЗПр2 (маскирование выполняется всегда после инициализации): MASK: MVI A, FBH OUT PORT59 RET Пример 87. Типовая процедура обслуживания запроса прерывания для одноуровневой системы прерываний: 1) DI — запрет прерывания; 2) PUSH — занесение регистров в стек; 3) О — программа обслуживания; 4) OUT — выдача в ПКП команды СКО2; 5) POP — восстановление регистров; 6) EI — разрешение прерываний; 7) RET — возврат к прерванной программе. 91
Команда СКО2 сбрасывает обслуженное прерывание и изменяет приоритеты запросов. Пример 88. Чтение регистра маски прерываний: RDMASK: IN PORT59+1 RET Пример 89. Чтение кода запроса прерываний с наивысшим приоритетом: RDMINI: MVI А, ОСН OUT PORT59 IN PORT59 RET Пример 90. Чтение содержимого регистра обслуживаемого прерывания: ADRGS: MVI А, ОВН OUT PORT59 IN PORT59 RET Пример 91. Чтение содержимого регистра запросов: RDRGIN: MVI А, ОАН OUT PORT59 IN PORT59 RET Пример 92. Установка режима спецмаскирования: SMASK: MVI А, 68Н OUT PORT59 RET Пример 93. Сброс режима спецмаскирования: RMASK: MVI А, 48Н OUT PORT59 RET Программирование БИС КР580ВГ75 Микросхема КР580ВГ75 представляет собой программируе- мый контроллер электронно-лучевой трубки (ЭЛТ), предназна- ченный для связи растровых дисплеев с МПС. Авторы предполагают, что читатели знакомы с организацией растровых дисплеев [8], структурой контроллера ЭЛТ [23]. Программирование контроллера осуществляется путем за- писи команд и параметров во внутренние регистры контроллера. Всего имеется восемь команд, каждая из которых состоит из байта кода команды и может содержать до четырех байтов параметров. Параметры всех команд загружаются в контроллер непосред- ственно вслед за загрузкой соответствующих команд. Исключение составляет команда СЧИТЫВАНИЕ ПОЛОЖЕНИЯ СВЕТО- ВОГО ПЕРА, параметры 1 и 2 которой считываются из контрол- лера непосредственно вслед за загрузкой команды. Опишем действия и кодировку команд контроллера. Команда ФОРМАТ ЭКРАНА (табл. 20). В обозначении параметров приняты следующие обозначения. 92
Таблица 20 Поразрядное (D7—DO) кодирование команды ФОРМАТ ЭКРАНА Последовательность байтов в команде Номера разрядов D7 D6 D5 D4 D3 D2 D1 D0 Код команды 0 0 0 0 0 0 0 0 Параметр 1 S н Н Н н н н Н Параметр 2 V V R R R R R R Параметр 3 и и и и L L, L L Параметр 4 м F С С Z Z Z Z Бит S — отображения рядов знакомест (0 — отображаются все ряды; 1 — отображаются только четные ряды). Биты ННННННН — число знакомест в ряду: 0000000 — 1 0000001 2 101 ill 11 — 80 (остальные комбинации не используются). Биты RRRRRR — число рядов знакомест в кадре: 000000 — 1 000001 — 2 11’1111 — 64 Биты LLLL — число строк растра в знакоместе: 0000 — 1 0001 — 2 111’1 — 16 Биты VV — длительность обратного хода кадровой развертки: 00 — 1Т 01 — 2Т 10 — ЗТ 11 — 4Т (Т — время отображения одного ряда знакомест). Биты СС — формат курсора: 00 — мигающий символ; 01 — мигающая линия подчеркивания; 10 — немигающий символ в негативном виде; 11—немигающая линия подчеркивания. 93
Биты ZZZZZ — длительность обратного хода строчной раз- вертки: 0000 — 1ТСС 0001 — 2ТСС iii 1 — 32ТСС’ (Тсс — время отображения одного знака на строке). Биты UUUU — номер линии подчеркивания: 0000 — 1 0001 — 2 1111 — 16* Бит М — режим счета строк растра в знакоместе: 0 — режим без смещения на единицу; 1 — режим со смещением на единицу. Бит F — режим отображения признаков: 0 — в виде пробела; 1 — не отображаются. С помощью команды ФОРМАТ ЭКРАНА происходит ини- циализация работы контроллера. После записи команды прекра- щается процесс ПДП, сигнал на выходе VSP используется для бланкирования (затемнения) экрана. Символы на выходах HRTC и VRTC находятся в активном состоянии. После записи байтов параметров формат экрана считается заданным. Пример 94. Оформим команду ФОРМАТ ЭКРАНА в виде подпрограммы и зададим в ней следующие параметры экрана дисплея: отображение всех рядов 64 — число знакомест в ряду (Н) 24 — число рядов знакомест в кадре (R) 2 ряда — длительность обратного хода по кадру 10 — номер линии подчеркивания 12 — число строк растра в знакоместе (L) режим счета строк смещения режим «не отображения» признаков курсор — мигающий символ 32 знакоместа — длительность обратного хода строчной развертки (Z) параметр 1 равен 3FN; параметр 2 равен 57Н; параметр 3 равен 9ВН; параметр 4 равен 4FH. Примем также: PORT75 + 1 — адрес порта загрузки команды (АО = 1); PORT75 — адрес порта загрузки параметров команды (АО = 0). Программа имеет вид: COMFOR: XRA A Загрузка OUT PORT75+1 команды MVI A, 3FH Загрузка OUT PORT75 параметра 1 MVI A, 57H Загрузка OUT PORT75 параметра 2 94
MVI A, 9BH Загрузка OUT PORT75 параметра 3 MVI A, 4FH Загрузка OUT PORT75 параметра 4 RET Приведем ниже формулы, которые позволят правильно коди- ровать параметры команды ФОРМАТ ЭКРАНА. Примем: матрица отображаемых символов — Nr X NB, где Nr — число точек по горизонтали; NB — число точек по вертикали; период следования импульсов тактовой частоты — Тт. Теперь запишем формулы: период сигналов символьной синхронизации ТСС = MpTrnJ число строк растра в знакоместе L = NB + N”, где NB — число пустых строк между рядами; длительность видимой части строки Тв = ЯМГТГИ; длительность строчного сигнала гашения, измеряемая в пе- риодах Тсс 7 64-(Я^Тги). NrTra длительность кадрового сигнала гашения, измеряемая числом рядов „ _ 312- [RL] v ~ L Команда РАЗРЕШЕНИЕ ОТОБРАЖЕНИЯ Биты кода команды 0 0 1 S S S В В Параметров нет. Запись команды должна происходить в PORT75 + 1, т. е. АО = 1 (см. выше). Биты в коде команды принимают следующие значения: Биты SSS — время между запросами ПДП: ООО — ОХ Тсс 001 — 7 X Тсс 010 — 15 X Тсс 011 —23 X Тсс 100 — 31 X Тсс 101 — 39 X Тсс 110 — 47 X Тсс 111 — 55 X Тсс 95
Биты ВБ — число байт в пакете ПДП: 00 — 1 01—2 10 — 4 11—8 С помощью рассматриваемой команды разрешается прохож- дение сигналов «Запрос прерывания», «Запрос ПДП», при этом устанавливаются разряды D6, D2 регистра слова состояния. Контроллеру разрешается начать отображение на экране. Примем, что время между запросами ПДП составляет 7 X Тсс; число байтов в пакете ПДП равно восьми. В этом случае код команды равен 27Н, а ее запись в контрол- лер ЭЛТ может происходить по следующей программе: CALL COMFOR MVI А, 27Н Запись команды РАЗРЕШЕНИЕ OUT PORT75+1 ОТОБРАЖЕНИЯ Команда КОНЕЦ ОТОБРАЖЕНИЯ Биты кода команды 010000000. Параметров нет. Запись команды должна происходить при АО = 1, т. е. в порт PORT75 + 1 по следующей программе: MVI АЛОН OUT PORT75 + 1 Команда КОНЕЦ ОТОБРАЖЕНИЯ запрещает прохождение видеосигнала. Прохождение сигналов «Запрос прерывания» и «Запрос ПДП» продолжает оставаться разрешенным, сигналы обратного хода луча по строкам и кадрам продолжают проходить. Команда СЧИТЫВАНИЕ ПОЛОЖЕНИЯ СВЕТОВОГО ПЕРА Биты кода команды 01100000 Параметр 1 — номер знакоместа в ряду. Параметр 2 — номер ряда знакомест. Запись кода команды должна происходить при АО = 1, т. е. в PORT75 -J- 1; чтение параметров должно происходить при АО = 0, т. е. в PORT75. Практически реализация команды может быть осуществлена подпрограммой Ml (пример 95). Пример 95. Ml: IN PORT75+1 Ожидание сигнала светового ANI JZ 10H Ml пера MVI A, 60H Загрузка команды СЧИТЫВА- OUT PORT75+1 НИЕ ПОЛОЖЕНИЯ СВЕТО- ВОГО ПЕРА IN PORT75 Чтение параметра 1 и загрузка MOV L, A его в регистр IN PORT75. Чтение параметра 2 и загрузка MOV RET H, A его в регистр Н Возврат 96
По команде СЧИТЫВАНИЕ ПОЛОЖЕНИЯ СВЕТОВОГО ПЕРА из внутренних регистров контроллера считываются ранее записанные координаты пера на экране (номер знакомест и номер ряда). Команда ЗАГРУЗКА ПОЛОЖЕНИЯ УКАЗАТЕЛЯ КУРСОРА Биты кода команды 10000000. Параметр 1 — номер знакоместа в ряду. Параметр 2 — номер ряда знакомест. Запись кода команды должна происходить при АО = 1, т. е. в порт PORT75 + 1; запись параметров должна происходить при АО = 0, т. е. в PORT75. Практическая реализация команды может быть осуществлена подпрограммой М2 (пример 96). Пример 96. Регистры микропроцессора: L — содержит номер знакоместа в ряду; Н — содержит номер ряда знакомест. М2: MVI A, BOH OUT PORT75+1 MVI A, L OUT PORT75 MVI A, H OUT PORT75 RET Команда позволяет загрузить два байта параметров — по- ложение курсора. На регистр состояния команда не влияет. Команда РАЗРЕШЕНИЕ ПРЕРЫВАНИЯ Биты кода команды 10100000. Параметров нет. Запись кода команды должна происходить при АО = 1, т. е. в PORT75 + 1 по следующей программе: MVI A, 0A0H OUT PORT75+1 Команда устанавливает режим, разрешающий возникновение запросов прерывания, и управляет соответствующим битом слова состояния. Команда ЗАПРЕЩЕНИЕ ПРЕРЫВАНИЯ Биты команды 11000000. Параметров нет. Запись кода команды должна происходить при АО = 1, т. е. в PORT75 + 1 по следующей программе: MVI A, 0C0H OUT PORT75+1 Команда устанавливает режим, запрещающий возникновение запросов прерывания, и управляет соответствующим битом слова состояния. Команда ПРЕДУСТАНОВКА СЧЕТЧИКОВ Биты кода команды 11100000. Параметров нет. 4 В. Г. Майоров 97
Запись кода команды должна происходить при АО = 1, т. е. в PORT75 + 1 по следующей программе: MVI А, ОЕОН OUT PORT75 Команда позволяет установить все внутренние счетчики в по- ложение, соответствующее левой верхней позиции экрана; счет- чики остаются в этом положении до получения следующей команды. Для выполнения этой команды нужны два тактовых сигнала Тсс. Команда необходима, когда в системе имеется несколько кон- троллеров ЭЛТ, работу которых необходимо синхронизировать. Регистр слова состояния БИС КР580ВГ75. В процессе работы контроллера ЭЛТ из регистра состояния можно считывать слово состояния контроллера. Считывание может быть выполнено в лю- бой момент, когда свободна ШД. Для считывания можно использовать команду IN PORT75 + 1. Считывание содержимого регистра слова состояния исполь- зуется для последующего программного анализа состояния, после считывания все разряды регистра слова состояния автоматически сбрасываются. Назначение отдельных битов регистра слова состояния: D7 — всегда находится в состоянии «Логический нуль»; D6 — разрешение прерывания; устанавливается при включе- нии питания, а также при выполнении команд РАЗРЕШЕНИЕ ПРЕРЫВАНИЯ, РАЗРЕШЕНИЕ ОТОБРАЖЕНИЯ; сбрасы- вается командами ЗАПРЕЩЕНИЕ ПРЕРЫВАНИЯ и ФОРМАТ ЭКРАНА; D5 — запрос на прерывание; устанавливается в начале ото- бражения последнего ряда знакомест кадра, если было разрешено прерывание; D4 — сигнал от светового пера; устанавливается, когда вход от светового пера активен и загружены регистры светового пера; D3 — неверная команда; устанавливается при неправильной записи команды в контроллер ЭЛТ; D2 — разрешение отображения; устанавливается по команде РАЗРЕШЕНИЕ ОТОБРАЖЕНИЯ и сбрасывается по командам ЗАПРЕТ ОТОБРАЖЕНИЯ и ФОРМАТ ЭКРАНА. D1 — недогрузка ПДП; устанавливается при недогрузке дан- ных в буфере в ходе отображения информации на экране; при появлении бита режим ПДП прекращается и экран затемняется до начала отображения нового кадра изображения. DO — переполнение стека символов; устанавливается, если число признаков в строке символов превысило 16. Коды знаков, поступающих в буферные регистры контроллера ЭЛТ, являются восьмиразрядными. Старший бит кодов отображае- мых символов должен быть равен нулю. Если старший бит равен единице, то такой код может быть специальным кодом, визуаль- 98
ным признаком отображаемых символов, признаком псевдогра- фических символов. Форматы этих кодов подробно описаны в работах [8, 23]. Специальные коды позволяют более экономно использовать временные ресурсы, а также в некоторых случаях упростить программирование. Визуальные признаки отображаемых символов записываются в ОЗУ экрана, и при их считывании позволяют выделять один или несколько (вплоть до конца кадра) символов, которые следуют в ОЗУ экрана вслед за ним. Возможно следующее выделение символов: с повышенной яркостью, инверсия, мигание, подчерки- вание. Указанные возможности достигаются специальным под- ключением внешних схем и сигналов БИС. Признаки псевдографических символов позволяют формировать специальные сигналы на определенных выходах контроллера ЭЛТ; последние совместно с дополнительными схемами выраба- тывают на выходе псевдографические символы, которые также могут быть визуально выделены мерцанием или засвечиванием. Признаки псевдографических символов имеют более высокий приоритет, чем визуальные признаки отображаемых символов. Пример 97. Нарисовать на экране рамку, проходящую по периметру эк- рана ЭЛТ, используя псевдографику. Решение. Примем следующие условия: Е800Н — начало экранной области ОЗУ (левый верхний угол экрана); EDFFH — конец экранной области ОЗУ (правый нижний угол экрана); 64D-40H — число знакомест в ряду; 24D-18H — число рядов в кадре; ЕОН — код псевдографического символа. Символ — горизонтальная ли- ния, проходящая посредине знакоместа; Е4Н — код псевдографического символа. Символ — вертикальная линия, проходящая посредине знакоместа; СОН — код псевдографического символа вида С4Н — код псевдографического символа вида _JZ ZL_ Т С8Н — код псевдографического символа вида ССН — код псевдографического символа вида J Алгоритм решения сводится к записи в экранную область ОЗУ по пери- метру экрана соответствующих кодов псевдографических символов. RAMKA: LXI LXI H, 0E800H D, OEDFFH Загрузка начала и конца эк- ранной области ОЗУ MVI В, 40H Загрузка счетчика на 64 MVI A, OEOH Загрузка кода горизонтальной линии RAM1: MOV M, A Прорисовка верхней и нижней STAX D горизонтальных линий рамки INX H DCX D DCR В JNZ RAMI MVI В, 18H Загрузка счетчика на 24 4* 99
LXI D, 0041H ; Загрузка смещения по вер- ; тикали MVI A, 0E4H ; Загрузка кода вертикальной ; линии RAM2: MOV M, A ; Прорисовка левой и правой DCX H ; вертикальных линий рамки MOV M, A DAD D DCR В JNZ RAM2 MVI A, COH ; Прорисовка верхнего STA 0E800H ; угла MVI A, C4H ; Прорисовка правого верхнего STA 0E83FH ; угла MVI A, 0C8H ; Прорисовка левого нижнего STA 0EDC0H ; угла MVI A, CCH ; Прорисовка правого нижнего STA OEDFFH ; угла RET Программирование контроллера клавиатуры/ дисплея КР580ВВ79* БИС программируемого контроллера предназначена для под- ключения и обслуживания клавиатуры (портов ввода) и динами- ческого дисплея в микропроцессорных системах. Контроллер позволяет: выводить данные на динамический дисплей, содержащий 8, 16 или 32 знакоместа; обслуживать до четырех матриц клавиатуры, каждая из ко- торых содержит до 64 клавиш; Рис. 32. Типовая схема включения БИС КР580ВВ79 * Раздел написан совместно с инж. А. В. Бобряковым. 100
С дешифратора сканирующих линий Рис. 33. Схема подключения матриц клавиатуры к БИС КР580ВВ79 опрашивать восемь восьмиразрядных портов ввода с запоми- нанием вводимой информации в специальном ОЗУ данных ввода; сигнал прерывания для процессора формируется при обнаруже- нии изменения данных в одном из портов; осуществлять стробируемый ввод с восьмиразрядного порта. Типовые схемы включения БИС приведены на рис. 32—38. В табл. 21 указано назначение выводов БИС. Программная модель контроллера содержит следующие уст- ройства (рис. 39). Регистр управляющего слова (РУС) предназначен для записи команд управления работой контроллера. Обращение к регистру производится при высоком уровне адресного сигнала на линии АО. РУС предназначен только для. записи информации. Регистр слова состояния контроллера хранит информацию о состоянии БИС. Обращение к регистру производится при высо- ком уровне адресного сигнала на линии АО. Регистр предназна- чен только для чтения информации. ОЗУ дисплея емкостью 16 байт предназначено для хранения данных, отображаемых на дисплее. Обмен данными с ОЗУ дис- плея осуществляется через регистр данных. ОЗУ ввода — регистр FIFO ввода емкостью 8 байт в режимах обслуживания клавиатуры и стробированного ввода работает как регистр FIFO: данные с клавиатуры (порта ввода) последовательно заносятся в него, затем также последовательно считываются ми- кропроцессором. Обращение к произвольной строке FIFO не- возможно. В режиме опроса восьми портов ввода вводимые данные также заносятся в ОЗУ ввода, однако затем в этом режиме содержимое 101
Рис. 34. Схема подключения портов ввода к БИС КР580ВВ79 в режиме опроса ВО-В7 -информация порта Контроль Порт Формирователь СТРОБ Рис. 35. Схема подключения порта ввода со стробированием С ВС сканирующих линий Рис. 36. Схема подключения восьмиразрядного дисплея на 8 (16) знакомест С DC сканирующих линий Рис. 37. Схема подключения дисплея на индикаторах на 8 (16) знакомест 102
ОЗУ может быть прочитано в произвольном порядке. Чтение дан- ных из ОЗУ ввода FIFO осуществляется через регистр данных. При чтении данных из FIFO в регистр данных при каждой опера- ции «Чтение регистра» заносится очередная строка FIFO. При чтении данных из ОЗУ ввода в режиме опроса портов номер ячейки ОЗУ, считываемый в регистр данных, задается в команде, пред- варительно занесенной в РУС. ОЗУ ввода предназначено только для чтения информации. Регистр данных служит для организации обмена данными между микропроцессором и ОЗУ дисплея или ОЗУ ввода — FIFO ввода. Рис. 38. Схема подключения цифрового дисплея на 32 знакоместа: И — индикатор Адрес АО-1 А0=0 Задается 8. специальное коп ан де 0111 Регистр управляющего слова Регистр слада состояния Регистр данных Ячейка О Ячейка 1 ОЗУ дисплея ОЗУ ввода. Регистр FIFO ввода Ячейка 7 Ячейка О Рис. 39. Программная мо- дель БИС КР580ВВ79 1111 Ячейка 15 103
Таблица 21 Назначение выводов БИС КР580ВВ79 Обозначение Напра- вление сигнала Число линий Номер вывода Примечание DO—D7 Вход- выход 8 12—19 Шина данных. Двунаправленная ши- на, по которой БИС обменивается информацией с микропроцессором в соответствии с управляющими сиг- налами С Вход 1 3 Синхронизация. Частота, подаваемая на данный вход, служит для син- хронизации внутреннего генератора микросхемы. Обычно данный вход подключают к фазе Ф2 системного генератора Сброс Вход 1 9 Сброс. Высокий уровень сигнала на данном входе приводит БИС в ис- ходное состояние ВМ Вход 1 22 Выбор микросхемы. Нулевой уро- вень сигнала открывает входной бу- фер микросхемы при обмене инфор- мацией с микропроцессором ЧТ Вход 1 1 Чтение данных. При низком уровне сигнала на линии БИС выдает дан- ные (или слово состояния) на шину данных D0—D7 згТ Вход 1 И Запись данных. Низкий уровень сиг- нала инициализирует запись данных с шины D0—D7 во внутренние реги- стры (ОЗУ дисплея) микросхемы ПР Выход 1 4 Запрос прерывания. Высокий уро- вень сигнала свидетельствует о вводе данных с клавиатуры или в специаль- ное ОЗУ ввода ело—слз Выход 4 32—35 Сканирующие линии. Предназначены для организации сканирования ди- намического дисплея, матриц кла- виатуры или динамического опроса портов ввода. Информация на линиях может изменяться в унитарном коде (декодирование) или двоичном коде (кодирование). Декодирование состоя- ния линий в этом случае осуществ- ляется внешними схемами ВО—В7 Вход 8 38, 39, 1, 2, 5—8 Линии ввода. При обслуживании клавиатуры эти линии являются го- ризонтальными линиями матриц кла- виатуры, при обслуживании портов ввода данные вводятся по этим ли- ниям 104
Продолжение табл. 21 Обозначение Напра- вление сигнала Число линий Номер вывода Примечания сдв Вход 1 36 Сдвиг. Эта линия совместно с ли- нией КОНТР в режиме обслужива- ния клавиатуры предназначена для кодирования номера матрицы кла- виатуры. Кодирование номера (0—3) производится внешними схемами, со- пряженными с клавиатурой КОНТР Вход 1 37 Контроль. Назначение линии в ре- жиме обслуживания клавиатуры опи- сано выше. В режиме стробирован- ного ввода является входом строб- импульса. Информация с линий ВО— В7 заносится в регистр ввода БИС по фронту импульса на этой линии DAO—DA3 Выход 4 27—24) Порт вывода данных из ОЗУ дис- DBO—DB3 Выход 4 31—28/ плея микросхемы. При организации дисплея на 32 знакоместа порт разби- вается на два четырехразрядных пор- та А и В. К этим линиям обычно подключается знакогенератор дисплея БД Выход 1 23 Бланкирование данных дисплея. Низ- кий уровень сигнала на этой линии используется для гашения индика- тора на время переключения порта вывода дисплея и сканирующих ли- ний при переходе к индикации сле- дующего знакоместа АО Вход 1 21 Адресная линия. Высокий уровень сигнала индицирует передачу по шине D0—D7 команд или слова состояния. Низкий уровень АО указывает на передачу данных Обращение к регистру происходит при низком уровне адрес- ного сигнала на линии АО. Направление обмена и номер ячейки ОЗУ задаются в команде, предварительно занесенной в РУС. Система команд управления БИС КР580ВВ79 содержит во- семь команд (табл. 22): три команды являются общими и исполь- зуются во всех режимах; три команды управляют работой дис- плея и две — режимами ввода. Формат команды установки режимов работы БИС приведен на рис. 40. Значения битов команды указаны в табл. 23, 24. При задании режима работы дисплея указывается способ отображения данных, вводимых в ОЗУ дисплея: правый ввод: вновь введенный символ занимает крайнюю пра- вую позицию дисплея, ранее введенные символы сдвигаются 105
Р7 Об 05 04 03 02 01 00 влево на одну позицию, данный 0 0 0 0 0 К К К способ аналогичен вводу данных в современных калькуляторах; левый ввод: первый введен- ный символ занимает крайнюю левую позицию дисплея, вновь вводимый символ занимает еле- Рис. 40. Формат команды установки режима: DD — биты, определяющие режим работы дисплея; ККК — биты, определяющие ре- жим ввода данных дующую крайнюю левую сво- бодную позицию дисплея; данный способ аналогичен вводу дан- ных на алфавитно-цифровых дисплеях. Возможно задание одного из трех режимов ввода информа- ции: Система команд контроллера КР580ВВ79 Таблица 22 Тип команды Наименование команды Код Общие команды Установка режимов работы БИС Программная очистка Управление частотой сканирова- ния 000 DDKKK 1 1 0 D D D F 0 0 0 1 Р Р Р Р Р Управление работой дисплея Чтение на ОЗУ дисплея Запись в ОЗУ дисплея Бланкирование/запрещение записи 0 1 1 AI А А А А 1 0 0 AI А А А А 10 1 X IA IB BA ВВ Управление вводом информации Чтение ОЗУ ввода/FIFO Установка режима ошибки/сброс прерывания 0 1 0 AI X А А А 1 1 1 Е X X X X Значение битов DD Таблица 23 D D Примечания 0 0 Восьмиразрядный дисплей; 8 знакомест Левый ввод 1 0 Правый ввод 0 1 Восьмиразрядный дисплей; 16 знакомест (че- тырехразрядный дисплей; 32 знакоместа) Левый ввод 1 1 Правый ввод 106
Таблица 24 Значение битов ККК К к к Примечания 0 0 0 Режим ввода с кла- виатуры Две клавиши блокируются Кодирование линий СЛО-СЛЗ 0 0 1 Декодирование линий СЛО—СЛЗ 0 1 0 Нет блокирова- ния клавиш Кодирование линий СЛО-СЛЗ 0 1 1 Декодирование линий СЛО-СЛЗ 1 0 0 Опрос восьми вось- миразрядных портов Кодирование линий СЛО—СЛЗ 1 0 1 Декодирование линий СЛО—СЛЗ 1 1 0 Режим стробиро- ванного ввода Кодирование линий СЛО—СЛЗ 1 1 1 Декодирование линий СЛО—СЛЗ ввод данных с клавиатуры; опрос восьми портов ввода с фиксацией вводимых данных в ОЗУ ввода; стробированный ввод. Далее подразумевается, что матрица клавиатуры представ- ляет собой ортогональную матрицу проводников, в узлах которой расположены ключевые элементы. Особенности работы подоб- ных матриц клавиатуры рассмотрены в работе [14]. В каждом из режимов ввода возможны следующие варианты управления работой сканирующих линий: режим декодирования — информация на линиях СЛО—СЛЗ изменяется в унитарном коде, и при этом возможна работа без внешнего дешифратора; режим кодирования — информация на линиях СЛО—СЛЗ изменяется в двоичном коде. В режиме ввода данных с клавиатуры матрицы клавиш скани- руются линиями СЛО—СЛЗ. При обнаружении нажатой клавиши 107
D7 D6 D5 274 D3 D2 27/ DO Du S/E 0 и F N N N Флажок „Неготовность дисплея” Номер последней занятой строки FIFO Флажок установки режима опроса портов Флажок ошибки режима клавиатуры Флажок „ FlF0 заполнен” Флажок ошибки „Чтение из пустого FIFO” Флажок „FIFO переполнен” Рис. 41. Формат слова состояния формируется сигнал запроса прерывания для процессора, и код нажатой клавиши вводится в первую строку FIFO. Если до очередного нажатия клавиш предыдущая информация из FIFO не считана микропроцессором, в первую строку FIFO вводится код нажатой клавиши со сдвигом ранее введенной ин- формации на одну строку. Состояние FIFO может быть определено при выполнении операции чтения регистра слова состояния (рис. 41). Слово состояния содержит код последней занятой строки FIFO и различные флажки состояния и ошибок. При последова- тельном вводе данных с клавиатуры в FIFO код NNN увеличи- вается, а при чтении данных из FIFO микропроцессором — умень- шается. При заполнении FIFO (все восемь байтов введены) устанавливается флажок F, при записи данных в полный FIFO — флажок U. Если микропроцессор читает FIFO, не содержащий информации, устанавливается флажок О. Флажок Du сигнали- зирует об ошибке при выводе данных на дисплей, флажок S — об установке режима опроса портов. Назначение флажка Е по- казано ниже. Слово состояния может быть использовано для организации программного ввода данных с клавиатуры (см. пример 100). Возможны следующие варианты ввода данных с клавиатуры: ввод данных с запрещением (блокированием) нажатия двух клавиш; ввод данных с разрешением одновременного нажатия не- скольких клавиш. В первом случае при одновременном нажатии двух (несколь- ких) клавиш блокируется ввод данных в FIFO, и ввод не произ- водится до тех пор, пока в матрице клавиатуры не останется только одна нажатая клавиша. Во втором случае при одновре- менном нажатии двух (нескольких) клавиш коды всех нажатых клавиш вводятся в FIFO в порядке их сканирования. В данном случае возможна установка специального режима ошибки (фор- мат команды см. на рис. 51). При нажатии двух клавиш в течение 108
Состояние линий контри сдв (номер матрицы клавиатуры) ЮИТР СДВ СЛО СЛ1 СЛ2 КВ КВ КВ Двоичный номер линии В0-В7, с которой соединена нажатая клавиша Состояние сканирующих линий в момент замыкания клавиши Рис. 42. Формат данных FIFO в режиме сканирования одного цикла сканирования вводятся сигнал запроса прерывания и бит ошибки Е в слове состояния FIFO. При одновременном на- жатии двух клавиш, но в разных циклах сканирования клавиа- туры, коды нажатых клавиш вводятся в FIFO обычным образом. При этом формат данных определяется по рис. 42. В режиме опроса восьми восьмиразрядных портов ввода ин- формации линии СЛО—СЛЗ используются для стробирования ввода данных с портов на линии ВО—В7 (см. рис. 34). Введенные данные (рис. 43) записываются в ОЗУ ввода в соответствии с порядком их сканирования. Сигнал прерывания для процессора вырабаты- вается при изменении данных в одном из портов ввода. При этом дальнейший ввод информации в ОЗУ ввода прекращается. Режим может быть использован для ввода медленно изменяющихся сиг- налов. Номер порта ввода и характер изменения информации опре- деляются микропроцессором при чтении информации из ОЗУ ввода и сопоставлении ее с ранее считанной информацией. В этом режиме возможно обращение к произвольной ячейке ОЗУ ввода. При установке этого режима устанавливается бит S в слове состояния. В режиме стробированного ввода информация с линией ВО— В7 вводится в FIFO по фронту импульса на линии КОНТР (рис. 44). Ввод данных в FIFO и изменение слова состояния FIFO ана- логичны режиму ввода данных с клавиатуры. При выполнении команды программной очистки (рис. 45) ОЗУ дисплея заполняется определенным кодом, a FIFO очищается. Программирование битов DDD приведено в табл. 25. В контроллере КР580ВВ79 предусмотрена возможность про- граммного задания частоты на линиях сканирования СЛО—СЛЗ. Управление частотой сканирования выполняется программирова- нием второй ступени делителя частоты сигналов на входе «С» БИС. Коэффициент деления задается в специальной команде 07 06 05 04 ОЗ 02 27/ 00 Рис. 43. Формат данных, вводимых в режиме опроса портов клавиатуры 07 06 05 04 03 02 27/ 00 В7 В6 В5 В4 ВЗ В2 В1 ВО Рис. 44. Формат данных в режиме стро- бированного ввода 109
(рис. 46) и может принимать значение от 2 до 31. Выпол- нение программной очистки или подача сигнала сброса на БИС устанавливает коэффициент де- ления, равный 31. Коэффици- ент деления первой ступени делителя равен 100. Команда чтения данных из ОЗУ дисплея (рис. 47) выпол- няется следующим образом: в регистр управляющего слова БИС заносится код команды ЧТЕНИЕ ОЗУ ДИСПЛЕЯ, в котором указан адрес ячейки ОЗУ дисплея. После записи этой команды в контроллер информация из данной ячейки заносится в регистр данных БИС. Далее выполняется опе- рация «Чтение регистра дан- ных». Для чтения следующей строки ОЗУ дисплея необходи- Bl ВЬ 05 B4 03 В 2 01 ВО 1 1 0 в в в F 0 Рис. 45. Формат команды программ- ной очистки: DDD — код, управляющий очисткой дис- плея; F — бит очистки FIFO; О — бит об- щей очистки FIFO и дисплея Таблица 25 Программирование битов DDD D D D Примечание 0 0 X Запись в ОЗУ дисплея 0 1 0 нулей Заполнение ОЗУ дисплея кодом пробела (20Н), 0 1 1 Hex (00100000) Заполнение ОЗУ дисплея единицами 1 X X Заполнение ОЗУ дисплея нулями мо вновь провести все указанные выше действия. В контроллере имеется режим автоинкрементной адресации ОЗУ дисплея. Для этого в команде ЧТЕНИЕ ОЗУ ДИСПЛЕЯ устанавливается бит AI и начальный адрес ячейки ОЗУ дисплея. После каждого чтение регистра данных БИС в этот регистр зано- сится информация из следующей ячейки ОЗУ дисплея. Применение команды ЗАПИСЬ В ОЗУ ДИСПЛЕЯ (рис. 48) аналогично команде ЧТЕНИЕ ОЗУ ДИСПЛЕЯ. Команда ЧТЕНИЕ ОЗУ ВВОДА/FIFO (рис. 49) при вводе данных из ОЗУ работает аналогично команде ЧТЕНИЕ ОЗУ ДИСПЛЕЯ. Сигнал «Запрос прерывания БИС» сбрасывается при первом чтении информации из ОЗУ ввода (в случае, если AI — 0). Если бит AI установлен, сброс сигнала «Запрос прерывания БИС» осуществляется специальной командой (рис. 50). При чтении данных из FIFO значение битов ААА и AI без- различно, так как обращение к произвольной строке FIFO не- 17 16 15 Ш ВЗ 12 DI 10 0 0 I Р Р Р Р р В7 В6 В5 04 ОЗ 02 01 ВО 0 1 1 AI А А А А Рис. 46. Формат команды управления частотой сканирования: РРРРР — коэффициенты деления второй ступени делителя Рис. 47. Формат команды ЧТЕНИЕ ОЗУ ДИСПЛЕЯ: АААА — адрес ячейки ОЗУ дисплея; АИ — бит установки режима автоинкрементной адресации НО
277 06 05 04 03 02 01 00 1 0 0 А1 А А А А Рис. 48. Формат команды ЗАПИСЬ В ОЗУ ДИСПЛЕЯ: АААА — адрес ячейки ОЗУ дисплея; AI — бит установки режима автоинкрементной адресации 07 06 05 D4 03 02 01 00 0 1 0 AI X А А А Рис. 49. Формат команды ЧТЕНИЕ ОЗУ ВВОДА/FIFO: ААА — адрес ячейки ОЗУ ввода; AI — бит установки режима автоинкрементной адресации возможно. Чтение данных из FIFO всегда автоинкрементно, при этом читается старшая непрочитанная из FIFO строка. При со- ставлении команды УПРАВЛЕНИЕ БЛАНКИРОВАНИЕМ (за- прещением записи в ОЗУ дисплея) следует пользоваться рис. 51. Установка битов IA и IB запрещает запись соответственно старшей и младшей половин байта при записи данных в ОЗУ дисплея. Команда применяется, например, при отображении данных на дисплее из 32 знакомест (см. рис. 38), для вывода дан- ных на один из индикаторов. При установке битов BA (ВВ) линии порта вывода данных дисп- лея DA0—DA3 (DB0—DB3) устанавливаются в нуль. Информация в ОЗУ дисплея при этом не разрушается. Отмена режима отображения данных, установленного этой командой, производится при выполнении этой же команды с ин- версными значениями требуемых битов. Команда установки режима ошибки/сброса прерывания при- меняется в режиме ввода данных с клавиатуры (допускается одно- временное нажатие нескольких клавиш) и в режиме опроса портов ввода. Применение команды с установленным битом Е в режиме ввода данных с клавиатуры (допускается одновременное нажатие не- скольких клавиш) задает специальный режим ошибки. Подробно этот режим рассмотрен выше при описании команды установки режимов работы БИС. При использовании команды в режиме опроса портов ввода значение бита Е безразлично. Запись в РУС этой команды вызы- вает сброс сигнала «Запрос прерывания БИС» и разрешает даль- нейший ввод информации с портов в ОЗУ ввода. 07 06 05 04 03 D2 01 DO 1 1 1 Е X X X X Рис. 50. Формат команды установки режима ошибки/сброса прерывания: Е — бит установки специального режима ошибки при вводе данных с клавиатуры 07 D6 05 04 03 D2 01 D0 1 0 1 X IA IB ВА ВВ Рис. 51. Формат команды управления бланкированием/запрещением записи в ОЗУ дисплея: ЗА, ЗВ — биты управления запрещением записи в ОЗУ дисплея (соответственно старшей и младшей половин байта); БА, БВ — биты управления бланкированием портов вывода дисплея DAO —DA3, DB0 — DB3 111
Рассмотрим примеры программирования БИС КР580ВВ79. Присвоим условные адреса регистрам контроллера: регистр данных — адрес PORT79; регистр слова состояния и РУС — адрес (ROPT79 +1). Пример 98. Инициализация БИС: режим ввода данных с клавиатуры с бло- кировкой одновременного нажатия клавиш; восьмиразрядный дисплей на 16 знакомест с левым вводом; частота сканирования 5 кГц. Программа: DISK1: MVI A, C1H ; команда очистки с выводом OUT PORT79+1 ; нулей на дисплей MVI A, 08H ; команда режима OUT PORT79+1 MVI A, 24H ; коэффициент деления равен 4 OUT PORT 79+1 ; при /внешн. мГц RET Пример 99. Инициализация БИС: режим опроса портов ввода данных; вось- миразрядный дисплей на восемь знакомест с правым вводом; частота сканирова- ния 10 кГц. Программа: DISK2: MVI A, C8H ; очистка с выводом на дисплей OUT PORT79+1 ; кода «пробел» MVI A, 14H ; команда режима OUT PORT79+1 MVI A, 22H ; коэффициент деления равен 2 OUT PORT79+1 I ПРИ /внешн. =2 мГц Пример 100. Вывод на дисплей цифр 1—8 в коде КОИ-7. Режим работы БИС по примеру 99. Программа: DISK3: CALL MVI DISK2 A, 90H ; инциализация БИС ; команда ЗАПИСЬ В ОЗУ OUT PORT79+1 ; ДИСПЛЕЯ ; с автоинкрементом MVI A, 31H ; занесение в аккумулятор кода * а 1 Ml: OUT PORT79 ; вывод в регистр данных БИС INR A ; получение кода следующей CPI 09H ; цифры ; если код «9», то выход JNZ Ml ; если нет, вывод цифры в еле- ; дующую позицию RET Пример 101. Программа чтения кода знака, отображаемого на пятой позиции дисплея (режим работы БИС по примеру 98): DISK4: CALL DISKI ; инициализация БИС MVI A, 75H ; команда ЧТЕНИЕ СТРОКИ OUT PORT79+1 ; пять ОЗУ дисплея IN PORT79 ; чтение кода знака из регистра ; данных RET Пример 102. Программа обработки прерывания по вводу данных с клавиа- туры (режим работы БИС по примеру 98): DISK5: PUSH В ; запись в стек содержимого PUSH PUSH D PSW ; регистров микропроцессора MVI OUT A, 40H PORT79+1 ; команда ЧТЕНИЕ FIFO 112
IN PORT79 ; ввод кода нажатой клавиши CALL OBR ; передача управления про- ; грамме POP PSW ; обработки кода POP D ; чтение содержимого регистров POP В ; из стека RET Пример 103. Программа ввода данных с клавиатуры с использованием про- граммного опроса слова состояния FIFO (режим работы БИС по примеру 98); DISK6: CALL DISKI ; инициализация БИС Ml: IN PORT79+1 ; ввод слова состояния FIFO ANI OFH ; выделение номера строки JZ Ml ; FIFO пустой MVI A, 40H ; Команда ЧТЕНИЕ FIFO OUT PORT79+1 IN PORT79 ; ввод данных с клавиатуры CALL OBR ; обработка введенного кода JMP Ml * Пример 104. Программа копирования первоначального состояния портов ввода в области ОЗУ А1—А8 (режим работы БИС по примеру 99): DISK7: CALL DISKI ; инициализация БИС MVI B, OOH ; в регистре В счетчик строк ; ОЗУ ввода, введенных в па- ; мять LXI H, Al ; занесение в HL начального ; адреса области ОЗУ MVI A, 50H ; команда ЧТЕНИЕ ОЗУ OUT PORT79+1 ; ВВОДА с автоинкрементом ; чтение строки ОЗУ ввода Ml: IN PORT79 MOV M, A ; запись в память INX H ; HL=HL+1 INX В MOV В, A CPI 08H ; все строки введены? JNZ RET Ml ; нет «Запрос прерывания БИС» при Пример 105. Программа сброса сигнала работе в режиме по примеру 99: DISK8: PUSH PSW ; запись в ; регистров стек содержимого MVI OUT A, EOH PORT79+1 ; команда СБРОС ;ВАНИЯ » ПРЕРЫ- POP RET PSW ; чтение из ; регистров стека содержимого Пример 106. Режим работы БИС: ввод данных с клавиатуры (разре- шено одновременное нажатие нескольких клавиш), вывод данных на четы- рехразрядный дисплей на 32 знакоместа (см. рис. 38). Запретить вывод 113
новых данных Программа: на индикаторы 1—16, на индикаторы 17—32 ввести нули. DISK9: MVI A, D0H ; очистка дисплея OUT PORT79+1 ; MVI А, ОАН ; команда режима OUT PORT79+1 ; MVI А, А9Н ; команда запрещения записи OUT PORT79+1 ; на линии DA0—DA3, блан- ; кирование портов D30—D33 RET 4. АЛГОРИТМЫ И ПРОГРАММЫ САМОКОНТРОЛЯ МПС В настоящее время успешная эксплуатация МПС на базе мик- ропроцессорных БИС практически невозможна при отсутствии достаточно эффективных методов и средств их автоматизированной проверки. Автоматизированный контроль позволяет улучшить качество МПС; повысить достоверность решения задач, надеж- ность, готовность к работе и безотказность; уменьшить частоту ошибок из-за сбоев; сократить время восстановления нормальной работоспособности МПС при возникновении неисправностей. Существуют два основных вида контроля [31 ], различающихся способами получения информации по ошибке: аппаратный и про- граммный контроль. Основной недостаток аппаратного контро- ля — значительное количественное увеличение общего объема аппаратуры МПС и, следовательно, стоимости, но он обладает и существенным достоинством — минимальным временем контроля. Программные методы контроля могут применяться в процессе решения задачи, они не требуют дополнительного оборудования, но существенно снижают производительность микроЭВМ. Разу- меется, существует и комбинированный аппаратно-программный контроль, обладающий достоинствами обоих методов контроля. Особый интерес представляют специальные методы програм- много контроля — диагностические тесты, которые служат для локализации места отказа и индикации отказавшего элемента на устройстве отображения. Применяются в процессе функциони- рования микроЭВМ между решениями основных задач и входят в состав системного программного обеспечения. Программный контроль с использованием диагностических тестов основан на программной доступности всех узлов МПС, что позволяет микро- процессору выдавать на эти узлы управляющие сигналы, тестовые наборы и опрашивать их состояние. Чаще всего программы само- контроля МПС размещаются в ПЗУ. Аппаратные затраты в этом случае невелики: один-два кристалла ПЗУ [21]. Программа самоконтроля МПС реализует принцип последо- вательной проверки узлов системы (рис. 52) и, естественно, для своего функционирования предполагает исправным некоторое «ядро» МПС, а именно: источники питания, генератор синхроим- пульсов, часть микропроцессора. 114
Обычно программа са- моконтроля МПС запуска- ется сразу при включении питания и выработки сиг- нала системного сброса. Далее программа после- довательно проверяет от- дельные части МПС, при- чем блок, успешно про- шедший проверку, может использоваться для про- верки оставшихся блоков. Такой метод проверки на- зывается методом рас- крутки. В первую очередь про- верке подвергается цент- ральный микропроцессор. При этом работа микро- процессора проверяется не на уровне логических бло- ков, а на уровне простей- ших операций типа регист- ровых передач, записи в память, считывания из памяти, исполнения всех команд микропроцессора с известными наборами дан- ных и проверкой правиль- ности результата. Глубина проверки микропроцессора зависит от назначения МПС. Например, если эта провер ка осуществляется в микроЭВМ, то глубина проверки микропроцессора должна быть максимальна, т. е. тестовая программа должна циклически пере- бирать все возможные ва- рианты операндов, их на- значений, порядка следо- вания команд. Фактором, ограничивающим глубину проверки микропроцессо- ра, является время. В том случае, если проверяется специализированный ми- Системный сброс Рис. 52. Алгоритм самоконтроля МПС 115
кроконтроллер, то достаточно проверить микропроцессор только с системой реально используемых команд. Пример 107. Работоспособность регистров микропроцессоров [27] прове- ряется по следующему алгоритму. 1. Загрузить нуль в аппаратный счетчик № 1. 2. По команде LXH передать содержимое счетчика № 1 в регистровую пару HL. 3. Переписать содержимое Н во все другие регистры микропроцессора. 4. Переписать содержимое каждого регистра микропроцессора по очереди обратно в Н (по команде MOV rl, г2) с последующим контролем каждого со- держимого HL (по команде PCHL). 5. Повторить шаги 3 и 4 для регистра L. 6. Прибавить единицу к счетчику № 1. 7. Проверить значение счетчика № 1, если оно больше заданного числа, то конец проверки; в противном случае перейти к шагу 8. 8. Перейти на шаг 2. Следует подчеркнуть, что этот тест гарантирует работоспособность не всех регистров, а только программного счетчика PC и регистровой пары HL. Пример 108. Проверка наличия и однозначного функционирования всех регистров микропроцессора КР580ИК80 [27]. Программа имеет вид: MVI A, 000Q MVI B, 001Q MVI C, 002Q MVI D, 004Q MVI E, 010Q MVI H, 020Q MVI L, 040Q LXI SP, 125Q, 252Q MOV M, A MOV M, В MOV M, C MOV M, D MOV M, E MOV M, H MOV M, L Приведенная программа одновременно проверяет работу мик- ропроцессора в режиме косвенной адресации по регистровой паре HL. Пример 109. Проверка взаимодействия между функциональными элемен- тами микропроцессора, регистрами А и С осуществляется по следующей программе: MVI C, 125Q MOV A, C RLC ADD C PUSH PSW Первые четыре команды проверяют взаимодействие между регистрами А и С, а с помощью последней команды результат запоминается в стеке. В общем случае можно сформулировать три основных принципа эффективного способа проверки микропроцессора: проверка существования и однозначного функционирования каждого структурного элемента микропроцессора; 116
проверка различных взаимодействий, которые могут иметь место между элементами микропроцессора; фиксация внутреннего состояния микропроцессора при нали- чии ошибки. Убедившись в правильности функционирования микропроцес- сора, программа самоконтроля переходит к проверке ПЗУ. Конт- роль ПЗУ осуществляется с помощью подсчета контрольной суммы содержимого ПЗУ и сравнения с заранее известным значением. Проверка устройства индикации и отображения информации происходит с участием оператора. Проверка портов ввода-вывода осуществляется при замкнутых цепях ввода и вывода, т. е. когда информация, выдаваемая МПС, ею же и используется. Рассмотрим в заключение программу вычисления контрольной суммы (пример ПО). Примем, что контрольная сумма вычисляется сложением по модулю 216 старших и младших тетрад каждого байта по отдельности в заданном адресном пространстве, т. е. определяются только младшие два байта суммы. Примем также, что в регистровой паре HL находится начальный адрес ПЗУ, а в DE — конечный адрес ПЗУ. Контрольная сумма образуется в регистровой паре ВС. Пример 110. Программа вычисления контрольной суммы ПЗУ: LXI B, 0 CS1: MOV A, M ANI FOH RRC RRC RRC RRC CALL SUM MOV A, M ANI OFH CALL SUM INX H MOV A, H CMP D JNZ CS1 MOV A, L CMP E JNZ CS1 HLT SUM: ADD C MOV C, A XRA A ADC В MOV В, A RET Тестирование ОЗУ Методы синтеза тестов функционального контроля ОЗУ осно- ваны на предположении, что в большинстве случаев имеют место неисправности логического типа, вызываемые постоянными отка- зами, тождественными нулю или единице. 117
Существует два подхода к разработке функционального тести- рования для контроля ОЗУ, обнаружения отказов и локализации неисправностей: рассмотрение ОЗУ как цифрового автомата с известной функ- цией; использование блочного подхода, когда функциональное тести- рование ОЗУ выполняется с помощью различных функциональных тестов, контролирующих отдельные узлы или характеристики ОЗУ. Существуют многочисленные варианты алгоритмических функ- циональных тестов для контроля ОЗУ. Наиболее распространены следующие тесты: «шахматный» тест — для проверки влияния на выбранную ячейку информации, записанной в соседние ячейки в обратном коде; «адресный» тест — распределение информации в ОЗУ, при котором все поле ОЗУ заполняется случайной информацией; «бегущий» тест — для обнаружения сбоев в ОЗУ, обусловлен- ных переходными процессам в различных цепях. Сущность теста заключается в перемещении единицы на фоне нулей или нуля на фоне единиц; «сканирующий» тест — для проверки ОЗУ в условиях макси- мальной статической помехи, вызванной суммарным током уте- чки всех ячеек ОЗУ, находящихся в одном состоянии. По всем адресам записывается определенная информация (например, все единицы). Затем производится считывание по каждому адресу с проверкой. После этого информация во всех ячейках сменяется (все нули), и весь процесс повторяется. В мониторе простейшей МПС может быть применен тест ОЗУ, который обнаруживает ошибки, обусловленные взаимным влия- нием информации, записанной в соседних разрядах ячейки ОЗУ, а также ошибки, возникающие вследствие замыкания разрядных линий между собой, на корпус или на шины питания. Ячейки проверяются поочередно. В ячейку записывается байт «шахмат- ного» кода I (01010101 = 55Н), затем информация из ячейки считывается и проверяется на равенство 55Н. Если ошибки не обнаружено, в эту же ячейку записывается «шахматный» код II (10101010 — ААН), и снова информация считывается из ячейки и проверяется на равенство ААН. Если ошибки нет, то делается вывод, что ячейка исправна. После этого процесс повторяется для всех ячеек проверяемой области ОЗУ. В том случае, если об- наружено искажение информации, на индикацию МПС выводится текущий адрес ячейки и байт, содержащий единицы в разрядах, где обнаружена ошибка. Появление на индикации кода ООН и адреса последней ячейки проверяемой области ОЗУ свидетельст- вует об окончании теста. Выход из режима тестирования произ- водится клавишей «Сброс». Программа «Тест ОЗУ» приведена в прил. 1 (программа 17). Подпрограммы обслуживания рестартов (RST3, RST4) описаны в п. 2 гл. 4. 118
Тест индикации Этот тест предназначен для проверки работоспособности уст- ройств системы, связанных с выводом данных на индикацию, и входит в состав монитора оценочного модуля. Тест заключается в выводе на индикацию (на лампах или светодиодах) последова- тельности цифр от 0 до F во все позиции. Цифры выводятся с за- держкой (0,6 с). Текст программы «Тест индикации» приведен в прил. 1 (программа 18). Подпрограмма задержки (RST2) и подпрограмма вывода ре- гистров А, Н, L на индикацию (RST4) приведены в п. 2 гл. 2 5. ПРОГРАММЫ ВВОДА-ВЫВОДА С КОНТРОЛЕМ НА ЧЕТНОСТЬ- НЕЧЕТНОСТЬ. СИГНАТУРНЫЙ КОНТРОЛЬ При обмене информацией в МПС по линиям связи могут воз- никать систематические и случайные искажения информации. В связи с этим при проектировании МПС должны быть решены следующие задачи: контроль информации, участвующей в обмене, и регистрация ошибок; исправление искаженной информации. Стандартный подход к решению этих задач — помехоустойчи- вое кодирование. Введение дополнительных контрольных раз- рядов в каждое слово информации и проверка правильности об- мена могут быть организованы как аппаратными, так и програм- мными средствами. Наиболее простым способом избыточного кодирования явля- ется контроль по четности (нечетности). Если в слове информации число единиц нечетно, к слову добавляется один разряд, рав- ный единице. В противном случае дополнительный разряд ра- вен нулю. Любой стандартный интерфейс (ИРПР или ИРПС) имеет возможность проверки на четность. В нестандартных портах ввода-вывода для контроля на четность можно использо- вать программы. В качестве примера в прил. 1 (программа 19) приведены программы передачи и приема символов, закодирован- ных в КОИ-7 с одновременным контролем на четность. Контроль достоверности хранимой информации в микроЭВМ наиболее часто выполняется с помощью контрольного суммиро- вания. Расчет контрольной суммы может быть сделан простым суммированием единиц в кодах блока памяти, суммированием по модулю и т. д. В последнее время широко применяют сигнатурный метод контроля. Принцип сигнатурного контроля состоит в свертывании входной последовательности произвольной длины в последова- тельность, длина которой равна некоторому числу, например, двум байтам. Это число называется сигнатурой. Сигнатурный контроль реализуется специальной схемой — сигнатурным гене- 119
Регистр сдвига информация Рис. 53. Сигнатурный генератор ратором, представляющим собой регистр сдвига с обратной связью через сумматор по модулю 2 (рис. 53). Входная информация по- ступает на сумматор побитно, на другие входы сумматора посту- пают сигналы обратной связи с соответствующих разрядов. Ре- зультат суммирования по модулю 2 записывается в младший разряд регистра, и в следующем такте происходит сдвиг информа- ции в регистре. Полученные в результате обработки входной по- следовательности два байта запоминаются в качестве контроль- ного слова входной информации. Все последующие процедуры при- ема-передачи этого блока информации выполняются с вычислением текущей сигнатуры и последующим сравнением с эталонным значением сигнатуры. Если произошло искажение информации, то с вероятностью р = 14-2-16 можно утверждать, что текущая сигнатура не совпадает с эталонным значением. В прил. 1 при- ведена программа (программа 20), которая производит обработку одного байта информации сигнатурным генератором. 6. ПРОГРАММЫ КОДИРОВАНИЯ, ДЕКОДИРОВАНИЯ ДАННЫХ, ОБНАРУЖЕНИЯ И ИСПРАВЛЕНИЯ ОШИБОК С ПОМОЩЬЮ КОДОВ ХЕММИНГА В реальных системах наиболее часто используются коды Хем- минга, позволяющие обнаружить произвольную ошибку кратности 2 и исправить ошибку кратности 1. Например, для четырех раз- рядов передаваемого слова вычисляются три контрольных раз- ряда: Ki = 3 р © 5 р © 7 р; Л2 = 3 р © 6 р © 7 р; Л8 = 5р©6р@7р. где 3 р, 5 р, 6 р, 7 р — значения информационных разрядов формируемого байта (рис. 54). В бытовых компьютерах и МПС, имеющих НМЛ, целесообра- зно разбивать каждый байт данных на две тетрады, кодировать их г 7 6 5 4 3 2 1 X т4 m3 m2 К1 ml К2 КЗ Рис. 54. Запись f-го разряда форми- руемого байта: ml, m2, m3, m4 — информационные раз- ряды; К/, К2, КЗ — контрольные раз- ряды; X — 0 или 1 (свободный разряд) 120
I------------------- байт данных в шестнадцатеричном но де I___________________________ Байт данных в ходе Лемминга Рис. 55. Преобразование байта данных отдельно (тетрада преобразуется в семь разрядов) и передавать уже два байта в коде Хемминга. Свободный восьмой разряд может использоваться для контроля по четности (нечетности) (рис.55). После считывания или приема данных, закодированных в коде Хемминга, осуществляется их проверка. Для каждого байта выпол- няют три проверки: Pi= 1р©3р@5р@7р; Рг = 2р©3р©6р@7р; Рз = 4р©5р@6р©7р. Из трех разрядов р8, ра, составляется корректор р3, ра, р1г указывающий номер разряда, в котором произошла ошибка. Например, если рг — 1, ра = О, р3 — 1, то p8papi — 101, т. е. ошибка в пятом разряде. Рис. 56. Схема помехоустойчивого обмена информацией 121
Рис. 57. Алгоритм подпрограммы-ко- дировщика KHG Рис. 58. Алгоритм подпрограммы де- кодирования DHK Q Начало Рис. 59. Алгоритм подпрограммы формирования информационных разрядов кода Хемминга KOD
После проверки осуществляются исправление ошибок (если они кратности 1) и декодирование данных в обычный шестнадца- теричный (двоичный) код. Кодирование по Хеммингу приводит к снижению плотности полезной информации на носителе и скорости обмена информацией. Такое кодирование нашло применение в ЭВМ с большой шириной разрядной сетки (например, 32 разряда). Однако кодирование по Хеммингу может быть использовано в бытовых и лабораторных микропроцессорных комплексах, где используется бытовой магни- тофон и плотность упаковки информации на ленте, а также ско- рость записи не имеют принципиального значения. Алгоритм помехоустойчивого приема-передачи данных при- веден на рис. 56. Рис. 60. Алгоритм подпрограммы форми- рования контрольных разрядов Рис. 61. Алгоритм подпрограммы фор- мирования байта-корректора TES 123
(^Начало Сформировать байт -маску, содержащую 1 в разряде, номер которого равен байту - корректору С помощью маска выделать разряд (в дайте кода) , в котором произошла ошибка Рис. 63. Алгоритм подпрограммы де- кодирования кода Хемминга без коррекции DEC г— J-------------- Инвертировать выделенный разряд Рис. 62. Алгоритм подпрограммы кор- рекции информации KOR Сигнатура-аналог может или использоваться в качестве имени блока, или храниться в самом накопителе, или вводится в специ- альную ячейку ОЗУ и т. д. Если программа-корректор «исправила» ошибку кратности более I, т. е. данные остались искаженными, то контрольная сигнатура все равно зафиксирует ошибку, причем сигнатура поз- воляет обнаружить ошибки любой кратности. На рис. 57—63 приведены структуры алгоритмов кодирова- ния, декодирования данных, обнаружения и исправления ошибок с помощью кодов Хемминга. Программы и таблицы начальных адресов помещены в прил. 3 В прил. 3 приняты следующие названия (адреса) подпрограмм: KHG — подпрограмма-кодировщик (в код Хемминга). Перед запуском про- граммы байт данных должен находиться в регистре В, код Хемминга форми- руется в регистрах В, С; KOD — подпрограмма формирования информационных разрядов кода Хем- минга. Результат помещается в регистрах В, С. Двоичный код находится в ре- гистре В; EST — подпрограмма формирования контрольных разрядов для одного байта кода Хемминга. Перед запуском программы байт, содержащий информацион- ные разряды кода Хемминга, поместить в регистр В; 124
DHK — подпрограмма декодирования кода Хемминга в двоичный код и кор- рекции ошибок. Перед запуском программы два байта кода Хемминга должны находиться в регистрах В, С. Двоичный код получается в регистре В; TES — подпрограмма формирования в регистре D байта-корректора. Про- веряемый байт находится в регистре В; KOR — подпрограмма коррекции информации в коде Хемминга. Перед вызовом подпрограммы в регистре В находится код, а в регистре D — байт- корректор; DEC—подпрограмма декодирования кода Хемминга. В регистрах В, С должен находиться код Хемминга, в регистре В формируется двоичный код; DCB — подпрограмма декодирования байта кода Хемминга. В регистре А должен находиться байт кода Хемминга, в регистре Е получается тетрада двоич- ного кода. 7. ДИЗАССЕМБЛЕР ДЛЯ МИКРОКОНТРОЛЛЕРА <ЭЛЕКТРОНИКА К1-20» Дизассемблер применяется для восстановления в ассемблер- ную форму программного обеспечения средств вычислительной техники. Восстановление ассемблерной программы требуется в случае модификации объектных программ МПС, когда докумен- тация на них отсутствует или имеется низкое качество описания. Дизассемблер основан на принципе соответствия кодов машин- ных команд микропроцессора и их эквивалентов на языке ассемб- лера. Трудность восстановления ассемблерной программы возни- кает при разделении объектной программы микропроцессора на команды и данные. Перед дизассемблированием объектного кода программ необходимо определить адреса областей хранения дан- ных. Текст программ восстанавливается путем дизассемблирова- ния. Данные выводятся на печать в виде столбцов, строк или таб- лиц кодов. На основе анализа выведенных таблиц и программы возможно выделение линейных и циклических участков ассемблерной про- граммы, определение областей расположения данных, что позво- ляет построить схему алгоритма ассемблерной программы. Основной частью дизассемблера является таблица, обычно состоящая из 70 строк по 7 байт. Число строк (78) определяется числом различных команд (78), все остальные 166 команд полу- чаются из указанных 78 команд изменением операндов. В строке таблицы (рис. 64) байты имеют следующее назначе- ние: 1 — код-идентификатор; представляет собой неизменную часть кода команды, содержит нули в разрядах, определяющих операнд; служит для идентификации команды; Код Маска Признак Мнемоника (1) Мнемоника (2) 1-й байт 2-й байт 3-й байт Ч-й байт 5-й байт Мнемоника (3) 6-й байт Мнемоника (4) 7-й байт Рис. 64. Структура строки таблицы дизассемблера 125
2 — маска; служит для вы- байт -признак Признак 7-го операнда Признак 2-го операнда 7 + 3 О разряд деления в коде команды разря- дов, позволяющих идентифици- ровать команду; 3 — признак (рис. 65) ука- зывает тип операндов для дан- ной команды; О Операнд отсутствует 1 Операнд -номер рестарта 2 Операнд -регистр (0,7,2 биты команды) 3 Операнд -регистр (3,4,6 биты команды) Операнд -регистровая пара ( набор сим в оло в: в,Я,Н,ЗР) Операнд -регистровая пара (на бор символов: в, D, Н, PS W) 6 Операнд - 2-й байт команды 7 Операнд -2-й 3-й байты коман- ды Рис. 65. Кодирование признаков ко- манд Строка таблицы для «LXI» 4—7 — мнемоника команды. Пробелы, запятые и другие специальные знаки устанавли- ваются программно. В качестве примера соста- вим строку таблицы дизассемб- лера для команды LX I: 1) подбирается маска так, чтобы выделить в коде коман- ды биты, неизменные для всех операндов (маска CFH); 2) код-идентификатор полу- чается наложением маски на код команды LXI (с любыми операндами), например: 21 Д CF = 01Н; код-индентифика- тор — 01; 3) признаки операндов опре- деляются в соответствии с рис. 65, байт-признак — 47Н; 4) буквы мнемоники коман- ды кодируются в КОИ-7; «L» — 4СН, «X» —58Н, «I» —49Н; в четвертой позиции мнемони- ки — пробел (20Н). геет вид: 01 CF 47 4С 58 49 20. Рассмотрим вариант дизассемблера, ориентированный на мик- роконтроллер «Электроника К1-20». В комплекс аппаратуры вхо- дят микроконтроллер и принтер УВВПЧ-30-004. Алгоритм программы дизассемблера показан на рис. 66. Для распечатки таблиц (или объектного кода программ) вводится дополнительная программа табуляции. Структура программы табуляции приведена на рис. 67. В прил. 4 объединены программа дизассемблера, программа табуляции, подпрограмма связи контроллера «Электроника-К1-20» и принтера УВВПЧ-30-004. Адреса программ и подпрограмм при- ведены в табл. 26. Перед запуском дизассемблера необходимо занести исходные данные в следующие ячейки ОЗУ: 126
127
Установить начальный адрес ан распечатываемого фрагмента памяти а тек ~ а н — 4 1 " Установить т-число проделав перед строкой [— 5------------ Печатать продел Рис. 67. Алгоритм программы табуляции 20А2Н — младший байт начальный адрес дизассемблиру- 20АЗН — старший байт емой программы; 20А4Н — младший байт конечный адрес дизассемблирув' 20А5Н — старший байт J мой программы +1. Пуск дизассемблера: G 624В CR 128
Таблица 26 Адреса подпрограмм Начальный адрес Конечный адрес Название программы 6000Н 601СН Подпрограмма вывода символа на УВВПЧ 601DH 6033Н Подпрограмма печати байта в шестнадцатеричном коде 62А0Н 64С1Н Таблица дизассемблера 60CFH 6069Н Дизассемблер 6200Н 624АН Табуляция 624В Н Инициализация ИРПР и переход к дизассемблеру 6256Н Инициализация ИРПР и переход к табуляции Примечание. По остальным адресам записаны вспомогательные подпрограммы и таблицы. Для запуска программы табуляции следует дополнительно ввести следующие параметры: 20А6Н — число байтов в строке; 20А7Н — число пробелов в начале строки. Пуск табуляции: G 6256 CR. 5 В. Г. Майоров
ГЛАВА 5 ВЫЧИСЛЕНИЕ ЭЛЕМЕНТАРНЫХ ФУНКЦИЙ Помимо решения задач управления и контроля на микроконт- роллеры очень часто возлагают задачи предварительной обра- ботки информации. В этих случаях разработчику приходится зани- маться выбором и реализацией алгоритмов вычисления арифме- тических и элементарных функций на МПС. Наряду с выбором отдельных алгоритмов вычисления функций необходимо также подобрать совокупность алгоритмов, отвечающих заданным тре- бованиям. Сама по себе задача выбора оптимальных алгоритмов для конкретного применения представляет самостоятельную проблему, выходящую за рамки данной книги. Читатель может подробнее ознакомиться с этим вопросом, обратившись, например, к книге [22]. Материал, изложенный в этой главе, касается принципов по- строения программ для вычисления арифметических и элемен- тарных функций, дает практические средства (программы), ко- торые могут найти применение в разрабатываемых МПС, и поз- воляет, наконец, инженеру создать любые арифметические про- граммы, используя для этих целей богатейшую библиотеку про- грамм [7, 23, 34], на микрокалькуляторах на базе программной модели, разработанной авторами. Часть описываемых программ приводится в виде распечаток в кодах, однако, используя для этих целей разработанный авто- рами дизассемблер, описанный в п. 7, гл. 4, указанные программы легко перевести на язык ассемблера микропроцессора КР580ИК80. В данной главе описаны арифметические операции над одно- и многобайтовыми числами, арифметические действия над чис- лами, представленными в форме с плавающей запятой. И в заклю- чении раздела приведены структура и управляющая программа калькулятора, которая фактически является программной моделью микрокалькулятора БЗ—34 на базе микропроцессора КР580ИК80. 1. АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ НАД ЧИСЛАМИ ДЛИНОЙ В ОДИН БАЙТ Арифметические операции будем описывать для следующих форматов представления чисел (рис. 68): целое без знака; целое со знаком. 130
8р 7Р бр SP *Р Зр 2Р ’Р 7 6 5 4 3 2 1 0 0) •(Знак числа (о = ”+'\ 1 = "-”) зн 7Р 6р 5Р ‘•Р зр 2Р 1Р 7 6 5 4 3 2 1 0 Разряды байта Рис. 68. Форматы представления однобайтовых чисел в двоичном коде. а — целое число без знака; б —целое число со знаком Отсюда следует, что диапазон представления чисел указанного формата составляет: целое без знака — от 0 до 28 — 1; целое со знаком — от —27 до 27 — 1 Рассмотрим программную реализацию операций сложения, вычитания, умножения и деления целых чисел без знака. Сложение и вычитание целых чисел со знаком выполняется с по- мощью команд микропроцессоров ADDr и SUBr. Методы машинного умножения и деления детально описаны в работе [10]. Рассмотрим две программы, позволяющие произ- водить умножение и деление целых чисел без знака. Подпрограмма MUL88 (см. прил. 1, программу 21) [5] реали- зует алгоритм умножения «младшими разрядами вперед со сдви- гом частичной суммы». Множимое помещается в регистр D, мно- житель — в регистр С, произведение образуется в регистрах В, С. Длина подпрограммы MUL88 составляет 19 байт. Подпрограмма DIV88 (см. прил. 1, программу 22) [5] реали- зует алгоритм деления «со сдвигом остатков влево и восстановле- нием остатков». Делимое должно быть помещено в регистр Е, делитель — в D частное образуется в регистре Н, положительный остаток — в регистре С. Длина подпрограммы DIV 88 составляет 24 байт, а максимальное время выполнения соответствует 660 периодам синхронизации. Программная реализация арифметических операций над чис- лами со знаком требует в общем случае (при возможности пере- полнения разрядной сетки) учета знаков операндов при формиро- вании знака операции (табл. 27). Подпрограмма ADSIG (см. прил. 1, программу 23) выполняет операцию сложения однобайтовых чисел со знаком. Перед запуском программы слагаемые необходимо занести в регистры D и Е. Сумма образуется в регистре Е. Подпрограмма ADSIG занимает в памяти машины 40 байт. Подпрограмма SUSIG (см. прил. 1, программу 24), осущест- вляет вычитание однобайтовых чисел со знаком. Подпрограмма 5» 131
Таблица 27 Формирование знака результата арифметических операций Операция Знак X Знак Y Знак Z Z-X+У + + + + — +(|Х l> 1У1) + — - (|Х 1 < 1У1) — + - (И |>| Y |) — + +(ixi<m) — — — Z=X—Y + + + (|Х |> 1 Y I) + + -(IX 1< | Y |) + — + — + — — — - (|Х|> | Y 1) — — + (| X |< | Y |) Z—XXY + + + + — — — + — — — + Z=XlY + + + + — — — + — — __ + Примечание. Знаки результата при умножении и делении вычисляются по формуле Зн. Z — Зн. X ф Зн. У. SUSIG транслируется в объектный код сов- местно с подпрограммой ADSIG. Уменьшаемое на- ходится в регистре D, вы- читаемое — в регистре Е, разность получается в ре- гистре Е. Длина подпро- граммы SUSIG вместе с подпрограммой ADSIG равна 47 байт. Умножение однобайто- вых чисел со знаком мож- но выполнить с помощью подпрограммы MUSI G (см. прил. 1, программу 25). Подпрограмма MUSIG транслируется в объект- ный код совместно с под- программой MUL88. Мно- жимое помещается в ре- гистр D, множитель — в регистр С, произведение образуется в В, С. Длина подпрограммы MUSI G вместе с подпрограммой MUL88 составляет 38 байт. Подпрограмма DISIG (см. прил. 1, программу 26) выполняет деление це- лых однобайтовых чисел со знаком. Подпрограмма DISIG транслируется то- лько совместно с подпро- граммой DIV88. Делимое --------------------------------— заносится в регистр Е, делитель — в регистр D, частное получается в регистре Н, поло- жительный остаток — в регистре С. Длина подпрограммы DISIG вместе с подпрограммой DIV88 составляет 43 байт. 2. АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ НАД МНОГОБАЙТОВЫМИ ЧИСЛАМИ Рассмотрим программную реализацию операций сложения, вычитания, умножения и деления над целыми многобайтовыми опе- рандами. Форматы представления чисел показаны на рис. 69. Алгоритмы арифметических действий над многобайтовыми числами аналогичны применяемым для однобайтовых операндов. Усложне- 132
Формат 1 N-й байт • • • 1-й байт Целое число без знака < ЗнакоВый разряд (1 = 0 = ”+”) Формат 2 ЗН N-й байт • • • 1-й байт Целое число со знаком Рис. 69. Форматы представления многобайтовых чисел ние программ происходит лишь за счет того, что необходимо опе- рировать массивами данных и учитывать межбайтовые переносы. Подпрограмма ADDN (см. прил. 1, программу 27) [5] осущест- вляет сложение многобайтовых положительных чисел. Сложение начинается с младших байтов. Длина N операндов заносится в регистр В. Слагаемые хранятся в областях памяти с начальными адресами FIRST и SECND, результат сложения помещается в область FIRST. Длина подпрограммы ADDN составляет 19 байт. Для вычитания многобайтовых чисел без знака используется подпрограмма SUBN, которая может быть получена из подпро- программы ADDN заменой команды ADCM командой SBBM. В этом случае программа из числа с начальным адресом FIRST вычитает число с начальным адресом SECND, а результат вычи- тания помещает в область FIRST. Умножение многобайтовых чисел организуется путем умень- шения отдельных байтов сомножителей и суммирования соответ- ствующим образом сдвинутых промежуточных произведений. Простая подпрограмма умножения целых чисел без знака DMULT описана в работе [5]. Подпрограмма DMULT (см. прил. 1, программу 28) реализует умножение 16-битного множимого, на- ходящегося в регистрах D, Е, на 8-битный множитель, передавае- мый в аккумулятор. Старшие 8 бит произведения образуются в аккумуляторе, младшие 16 бит — в регистрах Н, L. Умножение производится старшими разрядами вперед. Длина подпрограммы DMULT составляет 17 байт. Деление выполняется по правилу «вычитание — сдвиг», и в практике программирования МПС реализуется метод деления со сдвигом остатка влево и его восстановлением. Подпрограмма DIV (см. прил. 1, программу 29) реализует деление 32-битного делимого на 16-битный делитель (без знаков). Делимое располагается в регистрах Н, L, D, Е; делитель — в регистрах В, С; частное — в регистрах D, Е; остаток — в ре- гистрах И, L. Длина подпрограммы DIV равна 40 байтам. Рассмотрим арифметические действия над числами со знаком. При умножении и делении знак результата получается сложением 133
по модулю двух знаков операндов. В прил. 1 приведены две под- программы (DIVS22, Ml616), удобные для практического исполь- зования. Подпрограмма М1616 реализует операцию умножения двух- байтовых чисел со знаком, представленных в формате 2 (см. рис. 69). Множимое помещается в регистры D, Е; множитель — в регистры В, С; результат образуется в регистрах В, С, Н, L. Текст подпрограммы Ml616 на ассемблере (без комментариев) приведен в прил. 1 (программа 30). Подпрограмма DIVS22 (см. прил. 1, программу 31) выполняет деление 16-разрядных чисел со знаком, представленных в формате 2 (см. рис. 69). Делимое должно быть занесено в регистры В, С. Делитель загружается в регистры D, Е; частное получается в ре- гистрах В, С; остаток — в регистрах Н, L. Подпрограмма DIVS22 должна транслироваться совместно с вспомогательными подпрограммами DIVN22 (см. прил. 1, программу 32) и CMPL (см. прил. 1, программу 33). Подпрограмма DIVN22 осуществляет деление положительных целых 16-разрядных чисел. Делимое находится в регистрах С; делитель — в регистрах D, Е; результат получается в регистрах В, С; остаток — в регистрах D, Е. Подпрограмма CMPL пере- водит операнд, находящийся в регистрах D, Е в дополнительный код. 3. АРИФМЕТИЧЕСКИЕ ДЕЙСТВИЯ НАД ЧИСЛАМИ, ПРЕДСТАВЛЕННЫМИ В ФОРМЕ С ПЛАВАЮЩЕЙ ЗАПЯТОЙ При вычислениях на ЭВМ действительные числа обычно пред- ставляются в форме чисел с плавающей запятой: с мантиссой q и порядком р, т. е. как <?х2р. В МПС с побайтовой отработкой мантисса обычно занимает 24 или 16 разрядов, а порядок — 8 разрядов. Представление чисел в форме с плавающей запятой и порядком обеспечивает возможность использовать больший ди- намический диапазон по сравнению с числами в форме с фикси- рованной запятой. Умножение чисел с плавающей запятой выполняется по сле- дующей формуле: 2Р1<712₽Чг = q^P^, где 71, q2 - мантиссы сомножителей; рь р2 — порядки сомножи- телей. Очевидно, что для выполнения операции умножения необ- необходимо просто умножить мантиссы и сложить порядки. При сложении порядки и мантиссы взаимосвязаны. Сложение выполняется по следующим формулам: 2Piqi + 2p>q2 = (2^t+^7j 4- 2p*q2); (2а) 2p>qi + 2p*q2 = (qr + 2p^q2) 2p>. (26) 134
Формула (2а) справедлива, если рх < р2; формула (26) от- вечает случаю, когда р2 > р2; если же р2 = р2, то результаты, полученные по обеим формулам, совпадают. Вычитание выполняется по формулам 2р,7х — 2р«<72 = (2"«-— дг) 2р>; (3) 2/^ — 2^<72 = (дг — 2p>~P‘q2) 2р>. (4) Формула (3) применяется при рх < р2, формула (4) при рх > р2. Деление производится в соответствии с формулой 2₽^х/(2₽^2) = (ср/дг) 2Р‘-р>. Иногда возникает необходимость в выполнении дополнитель- ных операций коррекции результатов арифметических операций. Например, при сложении результирующая мантисса может быть слишком большой, если мантиссы слагаемых имели один и тот же знак, и их суммирование привело к переполнению; или же в результате может получиться число, близкое к нулю, если мантиссы слагаемых имели разные знаки. В этих случаях резуль- тирующую мантиссу необходимо сдвигать вправо (когда она слиш- ком велика) и влево (когда она слишком мала) до тех пор, пока самая левая единица не попадет в старший разряд. Так как сдвиг мантиссы осуществляется умножением на степень 2, то для того, чтобы сохранить то же самое значение суммы, необходимо одно- временно со сдвигом изменять порядок суммы, прибавляя или вычитая единицу при каждом сдвиге вправо или влево соответ- ственно. Рассмотренные формулы позволяют шинной реализации арифметических операций над числами, представленны- ми в форме с плавающей запятой. Алгоритм сложения показан на рис. 70. Вычитание производится по этому же алгоритму, но вместо сложе- ния мантисс выполняется их вычита- ние. Для программной реализации ал- горитмов сложения и вычитания необ- ходимо иметь следующие подпрограм- мы: относительного нормирования двух операндов (выравнивания порядков); сложения мантисс двух операндов; нормализация мантиссы числа с кор- рекцией порядка; вычитания мантисс двух операндов. Алгоритм программной реализации операции умножения чисел с плаваю- щей запятой приведен на рис. 71. Для составить алгоритмы ма- Рис. 70. Алгоритм сложе- ния чисел в форме с пла- вающей запятой 135
выполнения умножения помимо указанных выше требуются до- полнительные подпрограммы: умножения мантисс двух чисел; сложения порядков двух чисел. Для реализации алгоритма программы деления чисел с плаваю- щей запятой (рис. 72) должна быть введена еще одна подпрограм- ма — деления мантисс двух чисел. Рассмотрим программную реализацию арифметических опера- ций над числами, представленными в форме с плавающей запятой, на примере библиотеки арифметики и элементарных функций микроконтроллера «Электроника К1 -20». Библиотека состоит из 20 подпрограмм, по которым произ- водятся четыре арифметические операции и вычисляется ряд элементарных функций (SIN, COS, LN и т. д.). Диапазон изме- нения чисел от 0,5867.10~38 до 0,1704.1039. Для работы библиотеки необходимо наличие ОЗУ емкостью 31 байт и стека «глубиной» не более 20 байт. Представление чисел в библиотеке. Целое число может быть двух- или однобайтовым (рис. 73). Примеры представления це- лых чисел в библиотеке: -f-127 = 7FH, —127 = FFH, +16383 = = 3FFFH, —16383 = BFFFH. Формат представления числа с плавающей запятой состоит из пяти полей, назначение которых показано на рис. 73. Знак «плюс» кодируется нулем, знак «минус» — единицей. О пере- полнении свидетельствует единица в разряде переполнения. Дво- ичная запятая располагается перед старшим (14-м) битом ман- тиссы. Адрес байта порядка обозначается XARf, адрес старшего байта мантиссы — MANSj, адрес младшего байта мантиссы — MANMb где i — номер регистра библиотеки. Рис. 71. Алгоритм умножения чисел в форме с плавающей запятой 136 Коней, ) Рис. 72. Алгоритм деления чисел в форме с плавающей запятой
Примеры представления чисел с плавающей запятой: —16<ю) = = 0000010—10,000000-00000000 = 04 АО 00 Н; 1(10) = = 00000001-00,100000-00000000 = 01 20 ООН, О(Ю) = = 00 00 00 н. При арифметических операциях округление чисел не проис- ходит. В микроконтроллере библиотека расположена в ПЗУ по ад- ресам 0800Н — 0FFFH; ОЗУ имеет адреса 2000Н — 23FFH. Ниже приведены адреса полей памяти для хранения операндов с плавающей запятой. Обозначение ячейки библиотеки Адрес ячейки в ОЗУ К1-20 XAR8 ..................... MANS8..................... MANM8 .................... INDEX .................... XAR3 ..................... MANS3..................... MANM3 .................... XAR4 ..................... MANS4..................... MANM4 .................... XAR7 ..................... MANS7..................... MANM7..................... XAR6 ..................... MANS6..................... MANM6..................... XAR1 ..................... MANSI..................... MANM1..................... XAR2 ..................... MANS2..................... MANM2 .................... XAR5 ..................... MANS5..................... MANM5 .................... XAR9 ..................... MANS9..................... MANM9..................... XARA...................... MANSA..................... MANMA .................... 2061H 2062H 2063H 2064H 2065H 2066H 2067H 2068H 2069H 206AH 206BH 206CH 206DH 206EH 206FH 2070H 2071H 2072H 2073H 2074H 2075H 2076H 2077H 2078H 2079H 207AH 207BH 207CH 207 DH 207EH 207FH Каждой подпрограмме библиотеки соответствует определенное поле памяти в ОЗУ. Подпрограммы библиотеки делятся на основные и вспомога- тельные (обслуживающие). К основным относятся подпрограммы арифметических операций и вычисления функций, к вспомога- тельным — подпрограммы обслуживания библиотеки арифме- тики с плавающей запятой; подпрограммы, обеспечивающие вы- полнение основных трех тригонометрических функций и вычисле- ние элементов рядов разложения функций. 137
Адрес XAR Адрес MANS Поле знака порядка Поле порядка Поле знака мантиссы Поле пере- полнения Мантисса / бит 7 бит 1 бит 1 бит /4 бит Формат числа с пладаmated запятой 1-й байт 2-й и 3-й байты Расположение числа с плавающей запятой в памяти: / байт 2 байт Адреса: XAR; MANS, MANM; 3 байт MANS; = XAR; + / MANM;-MANS;* 1 Рис. 73. Форматы представления чисел в библиотеке В библиотеке микроконтроллера можно выделить две основные части: библиотека арифметики с плавающей запятой; библиотека элементарных функций. Для подпрограмм арифметики с плавающей запятой примем представление в виде текста на ассемблере, восстановленного из объектного кода с помощью программы дизассемблера, без комментариев. Для перемещения подпрограмм библиотеки в новые области адресов, определенные пользователем, необходимо придержи- ваться следующих правил *: 1) распечатать текст перемещаемой подпрограммы с помдщью программы дизассемблера; 2) векторы переходов (JMP, JNZ и т. д.) корректируются путем прибавления к адресу перехода величины А = А2 — А1, где А2 — новый адрес начала подпрограммы, А1 — старый адрес начала подпрограммы. Коррекция команд вызова подпрограмм (CALL и др.) заклю- чается в следующем: по адресу подпрограммы, стоящему во вто- ром и третьем байтах команды CALL, определяется имя под- программы, а затем в команде CALL записывается новый адрес данной подпрограммы. Адреса подпрограмм арифметики приведены ниже. * Изложенные правила верны и для библиотеки элементарных функ- ций. 138
Название подпрограмм Адреса начала подпрограмм ONORM ...................... 092DH NORMO .................... 0877Н OUABC....................... 0А8СН WRABC ...................... 0А92Н ADXAR .................... 0849Н ADMAN ...................... 08DDH ADNUM .................... 0987Н MUMAN..................... 0994Н MUNUM....................... 09ЕСН SUMAN....................... 09F9H SUNUM....................... 0A6FH Например: CALL ОА92Н -> CALL WRABC -> CALL NEWAD, где NEWAD — новый адрес подпрограммы WRABC; 3) в командах обращения к ячейкам ОЗУ XAR, MANS, MANM ставятся новые адреса данных ячеек; 4) если пользователь транслирует какую-либо подпрограмму, в которой имеет место обращение к вспомогательным подпрограм- мам, то транслировать ее необходимо совместно со вспомогатель- ными подпрограммами. Перейдем к непосредственному рассмотрению подпрограмм библиотеки арифметики с плавающей запятой. Вспомогательные подпрограммы обслуживания чисел с плавающей запятой Подпрограмма ONORM нормирования мантиссы (см. прил. 1, программу 34). Число с плавающей запятой извлекается из па- мяти и нормализуется (14-й бит мантиссы равен нулю, а 13-й — единице) путем поразрядного сдвига мантиссы. При этом сдвиг мантиссы на один бит влево соответствует уменьшению порядка на единицу. Например: До нормирования После нормирования 02 10 00 Н 01 20 00 Н Подпрограмма нормирования оставляет знак числа без из- менений. Объем подпрограммы 90 байт. Начальный адрес под- программы 092DH, конечный — 09В6Н. Подпрограмма NORMO относительного нормирования (см. прил. 1, программ 35). Для выполнения операции сложения двух чисел с плавающей запятой необходимо, чтобы эти числа имели равные порядки. Поэтому подпрограмма извлекает характеристики из областей памяти первого и второго слагаемых (XAR1, MANS1, MANM1 и XAR2, MANS2, MANM2 соответственно) и сравнивает их абсолютные значения. Большая характеристика записывается вместо меньшей, а число с меньшей характеристикой сдвигается вправо без округления на число разрядов, равное разности этих характеристик. Например: 139
До нормирования После нормирования 1-е слагаемое: 4 28 00 Н 1-е слагаемое: 4 28 00 Н 2-е слагаемое: 2 20 00 Н 2-е слагаемое: 4 08 00 Н 1-е слагаемое: XAR1, MANSI, MANM1 2-е слагаемое: XAR2, MANS2, MANM2 Подпрограмма занимает 99 байт. Начальный адрес подпро- граммы 0877Н, конечный — 08DCH. Подпрограмма OUABC передачи числа из памяти в регистры (см. прил. 1, программу 36). В результате выполнения подпро- граммы число с плавающей запятой размещается в следующих регистрах: порядок — в аккумуляторе; старший байт мантиссы — в регистре В; младший байт мантиссы — в регистре С. Адрес памяти должен находиться на регистровой паре Н, L. Программа занимает 6 байт. Начальный адрес 0А8СН, ко- нечный — 0А91Н. Подпрограмма WRABC передачи числа с регистров в память (см. прил. 1, программу 37). В результате выполнения подпро- граммы число с плавающей запятой из регистров А, В, С пере- мещается в память. Адрес памяти должен находиться на регистро- вой паре Н, L. Программа занимает 6 байт. Начальный адрес 0А92Н, конечный — 0А97Н. Подпрограммы арифметических операций Подпрограмма ADXAR сложения однобайтовых чисел с фик- сированной запятой и со знаком (см. прил. 1, программу 38). Подпрограмма применяется для сложения однобайтовых чисел с фиксированной запятой (сложения характеристик). Слагаемые находятся в памяти по адресам XAR1 и XAR2, а результат раз- мещается по адресу XAR2. Подпрограмма занимает 46 байт. Начальный адрес подпрограммы 0849Н, конечный — 0876Н. Вре- мя выполнения подпрограммы 83 мкс. Подпрограмма ADMAN сложения двухбайтовых чисел с фик- сированной запятой и со знаком (см. прил. 1, программу 39). Подпрограмма применяется для сложения мантисс чисел с пла- вающей запятой. Слагаемые находятся в памяти по адресам MANSI, MANM1 и MANS2, MANM2, а сумма помещается по адресам MANS2, MANM2. Подпрограмма занимает 80 байт. На- чальный адрес подпрограммы 08DDH, конечный — 092СН. Время выполнения подпрограммы 134 мкс. Подпрограмма ADNUM сложения чисел с плавающей запятой (см. прил. 1, программу 40). Подпрограмма осуществляет сложе- ние чисел с плавающей запятой и использует следующие под- программы: NORMO, ADMAN, ONORM, слагаемые находятся в ячейках памяти XARI, MANSI, MANM1 и XAR2, MANS2, MANM2; результат — в ячейках XAR2, MANS2, MANM2. 140
Подпрограмма занимает 12 байт. Начальный адрес 0987Н, конечный — 0993Н. Время выполнения подпрограммы 330 мкс. Подпрограмма MUMAN умножения двухбайтовых чисел со знаком и с фиксированной запятой (см. прил. 1, программу 41). Подпрограмма применяется для умножения мантисс с 14 знача- щими разрядами чисел с фиксированной запятой. Сомножители находятся в ячейках памяти MANSI, MANM1 и MANS2, MANM2. Подпрограмма занимает 87 байт. Начальный адрес подпро- граммы 0994Н, конечный — 09ЕВН. Время выполнения под- программы 840 мкс. Подпрограмма MUNUM умножения чисел с плавающей запятой (см. прил. 1, программу 42). Подпрограмма умножения чисел с плавающей запятой MUNUM осуществляет умножение чисел с плавающей запятой и использует подпрограммы ADXAR, MUMAN, ONORM. Сомножители находятся в ячейках памяти XAR1, MANS1, MANM1 и XAR2, MANS2, MANM2, а произведение — в ячейках XAR1, MANSI, MANM1. Подпрограмма занимает 13 байт. Начальный адрес подпро- граммы 09ЕСН, конечный — 09F8H. Время выполнения под- программы 950 мкс. Подпрограмма SUMAN деления двухбайтовых чисел со знаком и с фиксированной запятой (см. прил. 1, программу 43). Под- программа применяется для деления мантисс с 14 значащими раз- рядами чисел с фиксированной запятой. Делимое и делитель на- ходятся в ячейках памяти MANS2, MANM2 и MANSI, MANM1, а частное — в ячейках памяти MANS2, MANM2. Начальный адрес подпрограммы 09F9H, конечный — 0А6ЕН. Максимальное время выполнения подпрограммы 883 мкс. Подпрограмма SUNUM деления чисел с плавающей запятой (см. прил. 1, программу 44). Подпрограмма осуществляет деление чисел с плавающей запятой и использует подпрограммы ADXAR, SUMAN, ONORM. Делимое находится в ячейках памяти XAR2, MANS2, MANM2, а делитель — в ячейках памяти XAR1, MANS1, MANM1. Частное заносится в ячейки памяти XAR2, MANS2, MANM2. Подпрограмма занимает 28 байт. Начальный адрес под- программы 0A6FH, конечный — 0А8ВН. Время выполнения под- программы 1163 мкс. Приведем примеры вычислений с помощью подпрограмм би- блиотеки арифметики с плавающей запятой микроконтроллера «Электроника КД -20». Пример 111. Сложить два числа: 3,5 и 6,5. Представим числа в форме с плавающей запятой: 3,5(10) = 00000010 00111000 00000000 — 02 38 00 Н; 6,5(10) = 00000011 00110100 00000000 = 03 34 00 н. Следует ввести в память контроллера следующую программу: PAD: CALL ADNUM HLT 141
Операнды занести в ячейки памяти с адресами: XAR1: 02 38 00 Н XAR2: 03 34 00 Н Запустить программы PAD. После этого из ячейки памяти XAR2 читать ре- зультат: XAR2 : 04 28 00 Н Можно проверить правильность результата путем перевода результата в де- сятичный код: 04 28 00 Н — 00000100 00101000 00000000 = Ю(10). Пример 112. Перемножить числа 6 и —2. Представим числа в форме с плавающей запятой: 6(10) = 00000011 00110000 00000000 = 03 30 00 Н; —2(10) = 00000010 10100000 00000000 = 02 АО 00 Н. Затем следует занести операнды в ячейки памяти: XAR1: 03 30 00 Н XAR2: 02 АО 00 Н После этого вводим в память контроллера программу: PMU: CALL MUNUM HLT Осуществить пуск программы PMU. После этого читаем результат в ячейке памяти: XAR2: 04 ВО 00 Н Для проверки вручную переведем результат в десятичный код: 04 ВО 00 Н = 00000100 10110000 00000000 = — 12. Аналогично производится обращение и к другим подпрограммам библио- теки. 4. ВЫЧИСЛЕНИЕ ЭЛЕМЕНТАРНЫХ ФУНКЦИЙ В микроЭВМ значения элементарных функций определяются путем разложения функций в ряд. При этом вычисляется конеч- ное число членов ряда. Условием останова обычно является до- стижение заданной точности. Для создания программ вычисления элементарных функций от аргумента, представленного в форме с плавающей запятой, необходимо иметь библиотеку подпрограмм арифметики. Под- программы арифметических действий позволяют сократить за- траты памяти в десятки раз. Представление функций в виде степенных рядов требует учи- тывать область сходимости ряда. В табл. 28 приведены разложе* ния некоторых элементарных функций в степенные ряды с ука- занием области сходимости. Область сходимости ряда значительно сужается вследствие погрешности машинных арифметических расчетов. Кроме того, достижение большей точности вычисления значений функций требует больших затрат времени. Это-связано с необходимостью учета дополнительных членов ряда. 142
Таблица 28 Разложение элементарных функций в степенные ряды Функ- ция Разложение Измене- ние ар- гумента „ X3 , X6 , , ,чП x2n+l sin X Х 31 51 4(0 (2п+1)1 ± 1 X | < оо cos X 21 1 41 61 1 ' 2л! -1- |Х<|оо , , X , Ха Xs , , X" , еЛ + 11 + 21 + 3! + + л! + |Х|>0 =X + 'х-l , (X—I)3 , Х + 1 1 3(Х + 1)3 1 "Г (X- l)2n+1 + ... 2 (2п + 1) (X + l)2rt+1 v , X8 , 1-3-Х3 , Х+ 2-3 + 2-4-5 + |’ 1 1-3-5---(2п — 1) X2n+1 1 2-4-6 (2n) (2п+1) + , X3 Хб X7 , , . ^•2п+1 1 i_ + 3 '5 7 1 1 ' 2п+ 1 ± 2 X + 3X3 X>0 I X|< 1 |X|<1 m>i In X arcs in X arctg X arcctg X arccos X + ( 1 «П + n X2n+1 ±'“ (Zfl -f- 1) Л n Fx х» X» X’ i |X|<i т L ~+"5—~± J 1 2L_ Fx + + ±-3-*i +1 -3±*L + ... |X|< i 2 L 2-3 2-4-5 2-4-Б-7 1-3-5-• • (2n — 1) X2n+1 "I + 2-4-6-•-(2n) (2n + 1) 4 J В микроконтроллере «Электроника KI-20» предусмотрена би- блиотека элементарных функций. Вычисляются следующие функ- ции: и!, Ха, LNX, SINX, COSX, TGX, CTGX, ARCSINX, ARCCOSX, ARCTGX, ARCCTGX. Аргументы и результаты вычислений представляются в форме с плавающей запятой. Основные недостатки библиотеки элемен- 143
тарных функций: малое быстродействие и узкий диапазон изме- нения аргумента. Точность вычислений составляет четыре деся- тичных знака. Рассмотрим подробнее подпрограммы библиотеки. Справоч- ные данные о быстродействии и диапазоне изменения аргумента, а также адреса подпрограмм библиотеки можно взять из табл. 29. Перемещение подпрограмм в памяти выполняется по методике, описанной в п. 3, гл. 5. Вызов любой подпрограммы из библиотеки выполняется следующим образом: ; загрузить операнд в ячейку памяти XAfy CALL FUNCTION ; вызов подпрограммы вычисления функции .................... ; чтение результата из ячейки памяти XAR/ ; номера I, / указаны в описании подпрограмм Подпрограмма FACTOR вычисления факториала (см. прил. 1, программу 45). Подпрограмма вычисляет значение факториала по формуле п\ = п (п — 1) (п — 2) ...21. Целое число п задается в аккумуляторе, а результат в виде вещественного числа помещается в ячейки памяти XAR5, MANS5, MANM5. Максимальным числом, факториал которого вычисляется без потери точности, является 7. Подпрограмма за- нимает 112 байт Начальный адрес подпрограммы 0А98Н, конеч- ный — 0В07Н. Время выполнения подпрограммы для 7! состав- ляет 1258 мкс. Подпрограмма XSTA, реализующая показательную функцию (см. прил. I, программу 46). Подпрограмма реализует функцию возведения в степень по формуле Ха = XX- . -X, а раз где X — вещественное число; а —. целое число, и использует следующие подпрограммы: OUABC, WRABC, MUNUM, SUNUM. Показатель степени а заносится в ячейку памяти INDEX, ос- нование степени X помещается в ячейки памяти XAR1, MANS1, MANM1, а результат записывается в ячейках памяти XAR2, MANS2, MANM2. Подпрограмма XSTA занимает 98 байт. Началь- ный адрес подпрограммы ОВ08Н, конечный — 0В6АН. Время выполнения подпрограммы для максимального числа составляет приблизительно 143 мс. Подпрограмма LOGE, реализующая логарифмическую функцию (см. прил. 1, программу 47). Подпрограмма реализует функцию натурального логарифма, используя формулу разложения в ряд ln х- гГ*"1 । (Х~1)3 । (*~1)8 । ...1 Л z LX+ 1 ^3(Х + 1)^5(Х+1)»^ J’ где X > 0. Значение вычисляется с точностью 0,15-10“*. 144
Характеристики подпрограмм библиотеки Имя под- программы Адрес начала Конечный адрес Вычисля- емая функция Область изменения аргумента FACTOR 0A98H 0В07Н n! 1—7 XSTA 0B08H 0В6АН Х° X — веще- ственное, а — целое LOGE 0B6BH 0С86Н In X Х> 0 SIN 0C87H 0D31H sin X 0^ Х^ 2л COS 0D32H 0D46H cos X 0^ Х^ 2л TANG 0E47H 0Е74Н tgX 0^ Х-с 2л X =/= л/2; Зл/2 CTANG 0F61H 0F8AH ctgX 0 < X < 2л ARTAN 0E75H 0F14H arctg X 0< Х^ 1 ARSIN 0D47H ODEDH arcsin X — Х^ 1 ARCOS 0E40H 0Е46Н arccos X —Х< 1 ARTAN 0F8FH OFBDH arcctg X 0^Х<с 1
Таблица 29 Время вычисления Регистры хранения аргумента Регистр хранения результата 1258 МКС Аккумулятор А XAR5, MANS5, MANM5 143 мс а -> INDEX Х-> XAR1, MANS1, MANM1 XAR2, MANS2, MANM2 до не- скольких секунд XAR8, MANS8,MANM8 XAR4, MANS4, MANM4 64,7 мс XAR8, MANS8, MANM8 XAR3, MANS3, MANM3 63,2 мс XAR8, MANS8, MANM8 XAR3, MANS3, MANM3 129 мс XAR8, MANS8,MANM8 XAR2, MANS2, MANM2 129 мс XAR8, MANS8, MANM8 XAR2, MANS2, MANM2 1,5 с XAR8, MANS8, MANM8 XAR3, MANS3, MANM3 71 мс XAR8, MANS8,MANM8 XAR3, MANS3, MANM3 73 мс XAR8, MANS8, MANM8 XAR3, MANS3, MANM3 1,5 с XAR8, MANS8, MANM8 XAR3, MANS3, MANM3
Подпрограмма использует подпрограммы OUABC, WRABC, ADNUM, SUNUM, XSTA, NORMO, ADMAN. Аргумент X рас- полагается в ячейках памяти XAR8, MANS8, MANM8, а значение функции записывается в ячейки памяти XAR4, MANS4, MANM4. Подпрограмма занимает 284 байт. Начальный адрес подпрограммы 0В6ВН, конечный — 0С86Н. Время выполнения подпрограммы в зависимости от значения аргумента колеблется от нескольких миллисекунд до нескольких секунд. Подпрограммы тригонометрических функций Используя формулы разложения в ряд, подпрограммы вычис- ляют прямые и обратные тригонометрические функции. Точность вычислений составляет 0,15-10"4. Функции оперируют радиальной мерой углов. Если значение аргумента выходит за пределы до- пустимой области изменения, то перед вызывом подпрограммы функции следует преобразовать аргумент с помощью тригоно- метрических формул приведения. Подпрограмма SIN вычисления синуса (см. прил. 1, программу 48). Подпрограмма реализует функцию синуса, используя фор- мулу разложения в ряд п=0 где 0 < X < л/4. Для вычисления функции синуса угла —л/2 < X < л/2 реко- мендуется пользоваться формулой SIN [(л/2) п + X] = + SIN X, + COS X, — SIN X, — COS X, если n — 4k; если n = 4k + 1; если n = 4k + 2; если n = 4k + 3, где k = 0; ±1; ±2; ... Подпрограмма SIN содержит обслуживающую подпрограмму SICOS и использует подпрограммы OUABC, WRABC. Аргумент X записывается в ячейки памяти XAR8, MANS8, MANM8, а значе- ние функции — в ячейки памяти XAR3, MANS3, MANM3. Под- программа SIN с учетом подпрограммы SICOS занимает 174 байт. Начальный адрес подпрограммы 0С87Н, конечный — 0D31H. Время выполнения подпрограммы составляет 64725 мкс. Подпрограмма SICOS, обслуживающая подпрограммы синуса и косинуса (см. прил. 1, программу 49). Программа вычисляет ряд вида 146
где Г 2п + 1 для SINX; { 2п для COS X, и использует подпрограммы FACTOR, OU ABC, XSTA, SUNUM, ADNUM, NORMO. В ячейку памяти INDEX заносится исходное значение Y (единица для SINX и нуль для COSX), а по адресам XAR3, MANS3, MANM3 — первый член ряда (для SINX — нуль, а для COSX — единица). Аргумент X записывается в ячейки памяти XAR8, MANS8, MANM8, а значение функции заносится в ячейки памяти XAR3, MANS3, MANM3. Подпрограмма занимает 151 байт. Начальный адрес подпрограммы 0С9ВН, конечный — 0D31H. Подпрограмма COS вычисления косинуса (см. прил. 1, про- грамму 50). Подпрограмма реализует функции косинуса, исполь- зуя формулу разложения в ряд ж—« у2л COSX = 2(-1)"1^T, где 0 < X < л/4. Для вычисления косинуса угла л/4 < X < л/2 рекомендуется пользоваться формулой COS (л/2 — X) = SIN X. Для приведения косинуса произвольного угла к косинусу острого угла используется формула приведения COS [(л/2) n + X] = + COS X, — SIN X, — COS X, .+ SIN X, если п — 4k\ если п = 4k + 1; если п = 4k + 2; если п — 4k + 3, где k = 0; ±1; ±2; ... Подпрограмма COS использует подпрограмму SICOS. Аргу- мент X записывается в ячейки памяти XAR8, MANS8, MANM8, а вычисленное значение косинуса заносится в ячейки памяти XAR3, MANS3, MANM3. Подпрограмма занимает 24 байт. На- чальный адрес подпрограммы 0D32H, конечный — 0D46H. Время выполнения подпрограммы составляет 63200 мкс. Подпрограмма TANG вычисления тангенса (см. прил. 1, про- грамму 51). Подпрограмма реализует функции тангенса, исполь- зуя формулу TG X = SIN X/COS X. Для приведения тангенса произвольного угла к тангенсу положительного угла, не превышающего л/4, необходимо поль- 147
зоваться формулами TG (л/2 — X) = CTG X; ( TG X, если п = 2k; TG [(л/2) п + X] = { _ у , (—CTG X, если п = 2k + 1, где k — 0; ±1; ±2; ... Подпрограмма TANG использует следующие подпрограммы: COS, OUABC, WRABC, SIN, SUNUM. Аргумент X заносится в ячейки памяти XAR8, MANS8, MANM8, а значение функции в ячейки памяти XAR2, MANS2, MANM2. Подпрограмма зани- мает 46 байт. Начальный адрес подпрограммы 0Е47Н, конечный — 0Е74Н. Время выполнения подпрограммы 129 мс. Подпрограмма CTANG вычисления котангенса (см. прил. 1, программу 52). Подпрограмма реализует функции котангенса, используя формулу CTG X = COS X/SIN X. Для приведения котангенса произвольного угла к котангенсу угла 0 X п/Ь рекомендуется пользоваться формулой ( +CTG X, CTG [X + (л/2) n] = < т„ v t — 1 Li А, если п = 2k; если п = 2k + I, где k = 0; ±1; ±2; ... Подпрограмма использует подпрограммы SIN, OUABC, WRABC, COS, SUNUM. Аргумент X выбирается из ячеек памяти XAR8, MANS8, MANM8, а значение функции заносится в ячейки памяти XAR2, MANS2, MANM2. Подпрограмма занимает 46 байт. Начальный адрес подпрограммы 0F61H, конечный — 0F8EH. Время выполнения подпрограммы 129 мс. Программа ARTAN вычисления арктангенса (см. прил. 1, программу 53). Программа реализует функцию арктангенса, используя формулу разложения в ряд: ARCTG X = X------у- + 4-------Т~ + ” Для значений X > 1 необходимо пользоваться соотношением ARCTGX = ARCCTG (1/Х), а для X < 0 — соотношением ARCTG (—X) = —ARCTGX. Аргумент X выбирается из ячеек памяти XAR8, MANS8, MANM8, а значение функции заносится в ячейки памяти XAR3, MANS3, MANM3. Подпрограмма использует подпрограммы OUABC, WRABC, ADNUM, NORMO, ADMAN и обслуживающие подпрограммы SOST и NEXT. Подпрограмма занимает 163 байт. Начальный адрес подпрограммы 0Е75Н, конечный—0F14H. Время выполнения подпрограммы составляет приблизительно 1,5 с. 148
Подпрограмма SOST (см. прил. 1, программу 54). Обслужи- вает подпрограммы вычисления арксинуса и арктангенса. Под- программа определяет очередной член ряда Хп/п, где п = 1, 3, 5, ... Основание X располагается в ячейках памяти XAR8, MANS8, MANM8, а п — в ячейках памяти XAR4, MANS4, MANM4. Результат заносится в ячейки памяти XAR2, MANS2, MANM2. Подпрограмма SOST использует подпрограммы OUABC, WRABC, XSTA, SUNUM и занимает 34 байт. Начальный адрес подпрограммы 0F15H, конечный — 0F33H. Программа NEXT (см. прил. 1, программу 55). Обслуживает подпрограмму вычисления арктангенса и арксинуса. Подпрограмма определяет очередной член ряда и = 1, 3, 5, 7, ... и использует подпрограммы OUABC, WRABC, ADNUM. Результат вычисления подпрограммы используется подпрограм- мой SOST для вычисления ряда Хп/п (п = 1, 3, 5, ...). Резуль- тат вычисления подпрограммы заносится в ячейки памяти INDEX и XAR4, MANS4, MANM4. Подпрограмма занимает 45 байт. Начальный адрес подпрограммы 0F34H, конечный — 0F60H. Подпрограмма COEF (см. прил. 1, программу 56). Обслужи- вает подпрограмму вычисления арксинуса. Подпрограмма вы- числяет коэффициент очередного члена ряда: 1-3-5 2-4-6 Эта подпрограмма включает подпрограммы OUABC, WRABC ADNUM, SUNUM. Числитель располагается в ячейках памяти XAR4, MANS4, MANM4, знаменатель — в ячейках памяти XAR6, MANS6, MANM6, а результат — в ячейках памяти XAR5, MANS5, MANM5. Подпрограмма занимает 82 байт. Начальный адрес подпрограммы 0DEEH, конечный — 0E3FH. Подпрограмма ARCSIN вычисления арксинуса (см. прил. 1, программу 57). Реализует функции арксинуса используя фор- мулу разложения в ряд: ARCSIN Х = Х + + + где — 1 < X < 1. Подпрограмма содержит подпрограммы OUABC, WRABC, MUNUM, ADNUM, NORMO, ADMAN и обслуживающие под- программы SOST, NEXT, COEF. Аргумент X выбирается из ячеек памяти XAR8, MANS8, MANM8, а результат вычисления заносится в ячейки памяти XAR3, MANS3, MANM3. Подпрог- рамма занимает 82 байт. Начальный адрес подпрограммы 0D47H, конечный—0DEDH. Время выполнения подпрограммы 71 мс. Подпрограмма ARCOS вычисления арккосинуса (см. прил. 1, программу 58). Реализует функции арккосинуса по формуле ARCCOS X = л/2 — ARCSIN X, 149
где —1 < X < 1. Подпрограмма включает подпрограмму ARSIN и обслуживающую подпрограмму АСОСТ. Аргумент X выбира- ется из ячеек памяти XAR8, MANS8, MANM8, а значение зано- сится в ячейки памяти XAR3, MANS3, MANM3. Объем подпро- граммы 7 байт. Начальный адрес подпрограммы 0Е40Н, конеч- ный — 0Е46Н. Время выполнения подпрограммы 73 мс. Подпрограмма АСОСТ (см. прил. 1, программу 59). Обслужи- вает подпрограммы вычисления арккосинуса и арккотангенса. Подпрограмма реализует формулу т = л/2 — п, где _ ГARCCTG X, если п = ARCTG X; т = ( ARCCOS X, если п = ARCSIN X, и включает подпрограммы: OUABC, WRABC, ADNUM. Значе- ние п располагается в ячейках памяти XAR3, MANS3, MANM3, значение результата т заносится в эти же ячейки. Подпрограмма занимает 43 байт. Начальный адрес подпрограммы 0F92H, конеч- ный — 0FBDH. Подпрограмма ARCTAN вычисления арккотангенса (см. прил. 1, программу 60). Реализует функцию арккотангенса по формуле ARCCTG X = л/2 — ARCTG X. Для значений X 0 необходимо применять соотношение ARCCTG X = ARCTG (1/Х), а для значений X < 0 — соотноше- ние ARCCTG (X) = л — ARCCTG X. Подпрограмма использует подпрограмму ARTAN и включает обслуживающую подпрограмму АСОСТ. Аргумент X выбирается из ячеек памяти XAR8, MANS8, MANM8, а значение функции заносится в ячейки памяти XAR3, MANS3, MANM3. Подпро- грамма занимает 46 байт. Начальный адрес подпрограммы 0F8FH, конечный — 0FBFH. Время выполнения подпрограммы при- близительно 1,5 с. 5. СТРУКТУРА И УПРАВЛЯЮЩАЯ ПРОГРАММА КАЛЬКУЛЯТОРА НА МИКРОПРОЦЕССОРЕ КР580ИК80 Программная модель серийно выпускаемого промышленностью микрокалькулятора «Электроника БЗ-34» реализована на базе микроконтроллера «Электроника К1-20». Целью создания дан- ной модели является: предоставление пользователю возможности, не обращаясь к языкам высокого уровня, создавать любые арифметические про- граммы с использованием богатейшей библиотеки программ на микрокалькуляторах [7, 23, 341; создание простых и эффективных средств для цифровой об- работки сигналов в микроконтроллерах, применяемых в системах управления объектами автоматики. 150
Программа «Калькулятор» опирается на библиотеку арифме- тики и элементарных функций микроконтроллера. Программная модель не является полным аналогом калькулятора БЗ-34, так как имеются некоторые отличия по организации переходов в про- грамме и моделируется только программный режим работы каль- кулятора. Параметры программной модели калькулятора: емкость оперативной памяти программ составляет не более 512 байт (адреса 2200H—23FFH); емкость постоянной памяти программ может достигать 8К байт (адреса 5800 Н—7FFF Н). Помимо оперативной и постоянной памяти программная модель калькулятора содержит 85 регистров. Ввод и представление чисел. Двоичные числа длиной в три байта вводятся с помощью команды S монитора микроконтрол- лера. Числа представляются в формате, принятом в библиотеке арифметики микроконтроллера «Электроника К1-20» (см. п. 2, гл. 5). Диапазон изменения чисел и точность вычислений опреде- ляются возможностями библиотеки. Десятичные числа могут быть введены в память калькулятора и преобразованы в двоич- ный код с помощью программы преобразования кодов (см. п. 6, гл. 5). Регистры. Для хранения чисел и результатов вычислений служат 85 регистров памяти с номерами ООН—54Н. Кроме того, существуют четыре операционных регистра (X, Y, Z, Т) и ре- гистр восстановления результата предшествующей операции (XI). Операционные регистры X, Y, Z, Т образуют стек Система команд калькулятора (табл. 30). Описание и действие большинства команд программной модели соответствуют мнемо- нике и действию команд программного калькулятора БЗ-34. Имеющиеся небольшие отличия (отмечается в тексте) связаны с вводом адресов переходов и объясняются расширенными воз- можностями программной модели, а также характеристиками библиотеки подпрограмм микроконтроллера «Электроника К1-20». В системе команд выделяются следующие группы команд. 1. Команды вызова чисел из памяти (ИПО—НПО) и записи в память (ПО—ПО) однобайтового формата; команды вызова числа из регистра (ИПР00—ИПР54) и записи числа в регистр (ПР00— ПР54) двухбайтового формата, причем второй байт — шестнад- цатеричный номер регистра. 2. Команды косвенной адресации памяти в операциях чте- ния (КИПО—КИПО) и записи (КПО—КПО) однобайтового формата. 3. Команды безусловных косвенных переходов (КБПО— КБПО) однобайтового формата и команда безусловного перехода (БП) трехбайтового формата, причем 2-й и 3-й байты — соответ- ственно младший и старший байты адреса. Адреса косвенных переходов могут меняться в диапазоне 0000Н—3FFFH. 151
Таблица 30 Коды команд калькулятора Операция Код (Н) Операция Код (H) Операция Код (Н) WRCN0 00 КП4 34 ИП8 68 WRCN1 01 КП5 35 ИП9 69 WRCN2 02 КП6 36 ИПА 6А WRCN3 03 КП7 37 ИПВ 6В WRCN4 04 КП8 38 ИПС 6С WRCN5 05 КП9 39 ИПО 6D WRCN6 06 КПА ЗА Feos X 6Е WRCN7 07 кпв ЗВ FtgX 6F WRCN8 08 кпе ЗС кху=оо 70 С/П(НЬТ) 09 кпо 3D КХу=01 71 + ОА Farcsin X ЗЕ КХ=/=02 72 /-/ ОВ Farccos X 3F кх=^оз 73 ИПР ОС ПО 40 КХ=£04 74 Сх 0D m 41 КХу=05 75 t ОЕ П2 42 КХУ=О6 76 OF ПЗ 43 КХу=07 77 кх-оо 10 П4 44 КХ#=08 78 КХ-01 11 П5 45 КХу=09 79 КХ-02 12 П6 46 КХ#=0А 7А кх-оз 13 П7 47 кх#=ов 7В КХ-04 14 П8 48 кху=ос 7С КХ-05 15 П9 49 KX=/=0D 7D КХ-06 16 ПА 4А Fit 7Е КХ-07 17 ПВ 4В КБП0 80 КХ-08 18 ПС 4С КБП1 81 КХ-09 19 ПО 4D КБП2 82 КХ-ОА 1А Farctg X 4Е КБПЗ 83 кх-ов 1В Fsin X 4F КБП4 84 кх-ос 1С C/n(RET) 50 КБП5 85 KX-0D ID БП 51 КБП6 86 Fig IE В/0 52 КБП7 87 Fin IF ПП 53 КБП8 88 кипо 20 НОП 54 КБП9 89 КИП1 21 X 55 КБПА 8А КИП2 22 -4- 56 КБПВ 8В кипз 23 FX^=0 57 КБПС 8С КИП4 24 FL2 58 КБПО 8D КИП5 25 FX^O 59 FX2 8Е КИП6 26 FL3 5А F1/x 8F КИП7 27 FL1 5В кх^оо 90 КИП8 28 FX<0 5С KX^Ol 91 КИП9 29 FLO 5D КХ^02 92 КИПА 2A FX=0 5Е кх^оз 93 кипв 2B X^Y 5F КХ^04 94 кипе 2C ИП0 60 КХ^05 95 КИПО 2D ИП1 61 КХ^Об 96 F10* 2E ИП2 62 КХ>07 97 Fex 2F ИПЗ 63 КХ^08 98 кпо 30 ИП4 64 КХ>09 99 КП1 31 ИП5 65 КХ>0А 9А КП2 32 ИП6 66 КХ^ОВ 9В КПЗ 33 ИП7 67 КХ^ОС 9С 152
Продолжение табл. 30 Операция Код (Н) Операция Код (Н) Операция Код (Н) KXz^OD 9D кппв АВ КХ<06 В6 FXi/ 9Е кппс АС КХ<07 В7 FBx 9F КППО AD КХ<08 В8 КППО АО КХ<09 В9 КПП1 А1 АЕ КХ<0А ВА КПП2 А2 1 О кх<ов ВВ кппз АЗ кх<ос ВС КПП4 А4 ПР AF KX<0D BD КПП5 КПП6 КПП7 КПП8 КПП9 КППА А5 А6 А7 А8 А9 АА кх<оо КХ<01 КХ<02 кх<оз ВО В1 В2 ВЗ Резервные позиции для КХ<04 В4 операций, определяемых КХ<05 В5 пользователем 4. Команды условных косвенных (КХ = ОМ, КХ < ОМ, КХ ОМ или КХ =# ОМ, где М — номер регистра 0—D) пе- реходов однобайтового формата и команды условных прямых (FX < 0, FX = О, FX =/= О, FX 0) переходов трехбайтового формата, причем 2-й и 3-й байты задают соответственно младший и старший байты адреса. Адреса переходов могут меняться в пре- делах 0000Н—3FFFH. 5. Команда прямого вызова подпрограмм (ПП) трехбайтового формата (за кодом операции следуют младший и старший байты адреса вызываемой подпрограммы) и команды косвенного вызова подпрограммы (КППО—КППО) однобайтового формата. Адреса перехода к подпрограмме могут меняться в пределах 0000Н— 3FFFH. 6. Команды организации циклов (FLO, FL1, FL2, FL3) трех- байтового формата, причем 2-й и 3-й байты — младший и стар- ший байты адреса перехода. 7. Арифметические операции, элементарные функции, опера- ции со стеком, по форме записи не имеющие отличий от аналогич- ных операций в микрокалькуляторе БЗ-34. Однако при исполь- зовании этих функций следует учитывать диапазоны представления аргументов, например, для тригонометрических функций аргумент может быть представлен в радианах и находиться в пределах 0— 2л. 8. Специальные команды: команды WRCNO—WRCNB записи констант в регистры; команда С/П (HLT) останова работы программной модели «Калькулятор»; команда С/П (RET) возврата из подпрограммы «Калькулятор» после обращения к ней командой CALL. Описанные команды кодируются в соответствии с табл. 30. 153
Таблица 31 Адреса регистров памяти калькулятора Позиция порядка числа 2100 00 00 00 2154 1С 00 00 21. 2103 01 00 00 2157 1D 00 00 21. 2106 02 00 00 215А 1Е 00 00 21. 2109 03 00 00 215D 1F 00 00 211 210С 04 00 00 2160 20 00 00 211 Позиция - старшего . Лоытя А8 38 001 001 мантиссы АВ 3! АЕ 3. В1 31 В4 3( Э 00 00 Позиция 00 00 младшего В 00 00 байта 3 00 00 мантиссы 210F 05 00 00 2163 21 00 00 21В7 31 2112 06 00 00 2166 22 00 00 21ВА 3 2115 07 00 00 2169 23 00 00 21BD 31 2118 08 00 00 216С 24 00 00 21С0 4< 211В 09 00 00 216F 25 00 00 21СЗ 4 21 IE 0А 00 00 2172 26 00 00 21С6 4: 2121 0В 00 00 2175 27 00 00 21С9 41 2124 ОС 00 00 2178 28 00 00 21СС 4' 2127 0D 00 00 217В 29 00 00 21CF 4! 212А ОЕ 00 00 217Е 2А 00 00 21D2 41 212D OF 00 00 2181 2В 00 00 21D5 4’ 2130 10 00 00 2184 2С 00 00 21D8 41 2133 11 00 00 2187 2D 00 00 21DB 4‘ 2136 12 00 00 218А 2Е 00 00 21DE 4. 2139 13 00 00 218D 2F 00 00 21Е1 4] 213С 14 00 00 2190 30 00 00 21Е4 4( 213F 15 00 00 2193 31 00 00 21Е7 41 2142 16 00 00 2196 32 00 00 21ЕА 41 2145 17 00 00 2199 33 00 00 21ED 41 2148 18 00 00 219С 34 00 00 21F0 5( 214В 19 00 00 219F 35 00 00 21F3 51 214Е 1А 00 00 21А2 36 00 00 21Е6 5! 2151 1В 00 00 21А5 37 00 00 21F9 51 D 00 00 Е 00 00 F 00 00 0 00 00 1 00 00 2 00 00 3 00 00 4 00 00 5 00 00 э 00 00 7 00 00 3 00 00 ) 00 00 А. 00 00 В 00 00 3 00 00 D 00 00 Е 00 00 ' 00 00 ) 00 00 1 00 00 2 00 00 3 00 00 1 21FC 54 00 00 Адрес регистра Номер регистра (шестнадца- теричный код) 154
Таблица 32 Адресное поле калькулятора Адрес Ячейки и области памяти Адрес Ячейки и области памяти 2080Н 2081Н 2082Н Операционные реги- стры RT 209ЕН 209FH АРАМ — ячейка хранения ад- реса начала области регистров памяти 2083Н 2084Н 2085Н RZ 20А1Н ERROR — ячейка хранения информации об ошибках 20В0Н 20DFH ASR — начальный адрес стека адресов возврата из подпро- грамм Адрес конца стека 2086Н 2087Н 2088Н RY 2089Н 208АН 208ВН RX 2200Н 23FFH Память программ 21 ООН 21FEH Область регистров памяти (00—54Н) 208СН 208DH 208ЕН RX1 — регистр хране- ния результата преды- дущей операции 5000Н 57FFH ПЗУ хранения программы «Калькулятор» (с адреса 56А0Н расположена таблица перехо- дов к функциям) 2098Н 2099Н Служебные ячейки упра- вляющей программы 2092Н 2093Н ANA — ячейка хране- ния начального адреса области программ 5800Н 5...Н ПЗУ *. Продолжение таблицы переходов калькулятора 5...Н 5FFFH ПЗУ *. Библиотека стандарт- ных подпрограмм специаль- ных функций пользователя 209СН 209DH ASSR — ячейка хране- ния текущего адреса стека для адресов воз- врата из подпрограмм 0800Н 0FFFH ПЗУ **. Библиотека арифме- тики и функций контроллера «Электроника К1-20» * Заполняется пользователем при необходимости долговременного хра- нения собственных программ или для расширения набора команд калькулятора. ** Поставляется в комплекте с контроллером. При выполнении некорректных операций (деление на нуль и т. п.) происходит останов программы с одновременным занесе- нием кода ошибки в ячейку ERROR. Можно выделить два режима работы с программной моделью «Калькулятор»: «Калькулятор» является программой; «Калькулятор» является подпрограммой. Первый режим используется для запуска программ, напи- санных в кодах команд калькулятора. Ввод программы в кодах команд калькулятора выполняется с помощью команды мони- 155
тора S микроконтроллера МС2702. Например, ftS 2200_02_03_55_09. Ввод чисел в регистры памяти и операционные регистры вы- полняется также с помощью команды S монитора, при этом адреса регистров памяти и формат вводимого числа определяются по табл. 31, адреса операционных регистров определяются по табл. 32. Форматы вводимых чисел задаются аналогично. Напри- мер, чтобы занести число 2 в регистр X, выполняются следующие действия: ftS 2089_02 20 00 Адрес Число в регистра X регистре X Пуск программы выполняется командой монитора G. Если программа записана, начиная с адреса 2200Н, то для ее выпол- нения следует запустить программу #G 503A CR Если программа записана с другого адреса, то необходимо сначала командой Е монитора ввести начальный адрес программы в регистры Н, L микропроцессора, а затем запустить программу #G 503D CR Результат может быть прочитан из любого регистра командой S монитора контроллера. Например, прочитать результат из ре- гистра X можно, набрав на клавиатуре ftS 2089 Теперь покажем, как работает калькулятор в качестве под- программы. Данный режим используется в том случае, если глав- ная программа пользователя написана на языке ассемблера, а программы-вставки на языке команд калькулятора служат для промежуточных арифметических вычислений. Основная прог- грамма имеет вид: LXI Н, ADRI ; текст на языке ассемблера ; установка адреса подпрограммы, написанной CALL 503DH HLT ; в командах калькулятора ; обращение к калькулятору ; текст на языке ассемблера ; останов В этом режиме ввод программы и данных в регистры, чтение результата выполняются так же, как в первом режиме. Использование калькулятора в качестве подпрограммы поз- воляет максимально упростить решение ряда задач, выполнение которых на языке ассемблера обычно вызывает следующие затруд- нения: обработка двумерных массивов данных; 156
вычисление параметров процессов по получаемым от АЦП значениям; обработка реакций на сигналы обратной связи в системах управления; интерполяция и вычисление рядов; и др. Распечатка программы «Калькулятор» в кодах микропроцес- сора КР580ИК80 приведена в прил. 5. Для поиска и дизассемб- лирования нужной программы моделирования команды кальку- лятора необходимо выполнить следующие действия. 1. К удвоенному коду команды (определяемому по табл. 30) прибавить адрес начала таблицы переходов (56А0Н). Например, код операции «+» равен 09Н; адрес вычисляется следующим образом: 09Н-2 + 56А0Н - 56В2Н 2. Полученный код является адресом строки таблицы пере- ходов, в который записан адрес программы, моделирующей вы- полнение данной команды: 56В2Н : С554. Итак, адрес программы «+» равен 54С5Н. 3. Определить ветвления программы, вызовы подпрограмм и дизассемблировать программу по частям. Перейдем к описанию непосредственно структуры программной модели калькулятора (рис. 74). Программа «Калькулятор» имеет четырехуровневую иерархическую структуру: уровень I — управляющая программа; уровень II — программы, моделирующие выполнение команд калькулятора; уровень III — вспомогательные подпрограммы, обслуживаю- щие программы второго уровня; уровень IV — библиотека арифметики с плавающей запятой и элементарных функций микроконтроллера «Электроника К1-20». На рис. 75 показано взаимодействие основных частей про- граммной модели калькулятора. Управляющая программа обеспечивает последовательное вы- полнение команд калькулятором в соответствии с алгоритмом программы пользователя (рис. 76). Она инициализирует про- граммный счетчик, а затем счетчик модифицируется после выпол- нения каждой команды (при линейной организации программ) или загружается новым значением (при выполнении команд переходов). В программном счетчике находится адрес очередной команды. Код команды суммируется с адресом начала таблицы переходов к функциям калькулятора. Далее осуществляется переход по сформированному адресу. После выполнения команды происходят модификация программного счетчика и возврат в уп- равляющую программу. Далее процесс обработки очередного 157
Рис. 74. Структура программной модели калькулятора кода команды повторяется до тех пор, пока в программе не встре- тится команда останова. Рассмотрим некоторые примеры применения описанной про- граммной модели. Пример 113 (см. [7, с. 64]). Вычислить гиперболический синус SHX = (ех - 1/ех)/2 при X = РХ = 1. Текст программы на языке калькулятора: Fex JF 1/Х -2-г-С/П После трансляции программы с помощью табл. 27 получим последователь- ность кодов. Загрузим полученную последовательность в ОЗУ МС 2702 («Элек- троника К1-20») с помощью команды #S 2200 ... : 2F 0Е 8F 0F 02 56 09 Далее вводим исходные данные (1 -*• РХ): #S 2089^01^20^00 Запускаем программу #G 503А CR и читаем результат в регистре РХ: #S 2089^ Получим: РХ = 01 25 9С Н Переводим в десятичный код: SH1 = 1,176. 158
Рис. 75. Алгоритм управляющей программы «Калькулятор» Пример 114 (см. [7, с. 64]). Вычислить гиперболический косинус СНХ = (ех + 1/ех)/2 при X = РХ = 1<10) = 0 1 2 0 0 0 Н. Текст программы: Fex | F 1/X + 2 ч- С/ П Коды программы (по табл. 30): 2F СЕ 8F 0 А 02 56 09 159
Управляющий блок Рис. 76. Взаимодействие блоков программной модели калькулятора': —> — цикл взаимодействия блоков программной модели; => — о вращение к подпро- граммам внутри вычисляющего блока Ввод и запуск программы осуществляется так же, как в примере 113. После запуска программы #G 503А CR в регистре X (2089Н) читаем результат: #S 2089^ Получим: РХ : 01 31 60 Н. Переводим в десятичный код: СН1 = 1,543 Пример 115 ([7, стр. 67]). Вычислить т У = Кп при т = 2010, п = 410 Текст программы.* П7Х Y П9 0 П4 П8 КИП4 ИП4 ИП9 X Y FXy ИП8 + П8 ИП7 ИП4 — FX == 0 06 22 ИП8 С/П С помощью табл. 30 кодируем программу и вводим ее в память контроллера командой #S 2200. Коды программы: 17 5F 19 00 11 18 21 61 69 5F 9Е 68 0А 18 67 61 OF 5Е 06 22 68 09 Введем п в РУ и т в РХ (n = 032000Н, т = 052800Н): #S086L-J03L.j20u-,00u-l05u_j28t_J00i_J # После запуска программы # G 503А CR читаем результат #S 2089 U-J ‘-J 160
Получим: 14 20 IB Переводим в десятичный код: у = 7,226- 10е. Пример 116 (см. [7, с. 57]). Вычислить определитель третьего порядка 2 5—3 1 4 -1 1 3 2 по формуле аг = Р7 b± = Р8 С1 = Р9 а, = Р4 6, = Р5 с. = Р6 Т С1 — а’ЬА + Сг (азЬ1 ~ а1Ьз) + + с3 (а^ — а2Ь1) а3 = Pl b3 — Р2 с3 = РЗ Текст программы: ИП4 ИП2 X ИП1 ИП5 X — ИП9 X ИП1 ИП8 X ИП7 ИП2 X — ИП6 X + ИП7 ИП5 X ИП4 ИП8 X — ИПЗ X + С/П Составляем дополнительную программу ввода исходных данных: 2 П7 5 П8 3 | —| П9 1 П4 П1 |-| П6 4 П5 3 П2 2 ПЗ Основная и дополнительная программы транслируются в коды с помощью табл. 30. Программа ввода данных записывается по адресу 2200Н с помощью команды S монитора К1-20: 02 ОВ 47 46 05 04 48 45 03 03 ОВ 42 49 02 01 43 44 41 Затем вводится основная программа по адресу 2212 Н (тем же способом) 64 62 55 61 65 55 OF 69 55 61 68 55 67 62 55 0F 66 55 0А 67 65 55 64 68 55 OF 63 55 0А 09 После запуска программ # G 503А CR читаем результат из РХ: #S 2089^. Получим: РХ = 04 2В 00 Н. Переводим результат из шестнадцатеричного кода в десятичный: 2 5—3 1 4 —1 1 3 2 = 10 6. АЛГОРИТМЫ И ПРОГРАММЫ ПЕРЕВОДА ЧИСЕЛ ИЗ ДВОИЧНОЙ ФОРМЫ ПРЕДСТАВЛЕНИЯ В ДЕСЯТИЧНУЮ И ОБРАТНО При работе с пакетами арифметических программ, входящих в математическое обеспечение МПС и микроконтроллеров (на- пример, МС2702), обычно возникает ряд затруднений, связанных с необходимостью перевода чисел из двоичной формы представле- ния, принятой в МПС, в десятичную, являющуюся естественной 6 В. Г- Майоров 161
для оператора МПС. Машинным эквивалентом кода с основанием 10 служит двоично-десятичный код. В данном параграфе рассмотрены основные методы и программы перевода чисел из двоично-деся- тичного кода в двоичный и обратно. Комплекс приведенных программ ориентирован на применение в составе программных средств контроллера МС2702 и служит для обеспечения ввода- вывода десятичных чисел в программной модели калькулятора (см. п. 5 гл. 5). Известны различные методы преобразования кодов: метод счета, метод табличного преобразования, поцифрового табличного преобразования, метод весовых коэффициентов и др. Перевод чисел из одной формы представления в другую. Рас- смотрим метод преобразования чисел с плавающей запятой, осно- ванный на разложении чисел по схеме Горнера. Перевод чисел из двоично-десятичной формы представления в двоичную (прямой перевод) выполняется в зависимости от по- рядка числа по следующим формулам. 1. Эквивалент целого десятичного числа А в двоичной системе счисления Л' = ((... (atp + Ог) р + Оз) р + ...) р + а„) рк, (5) где п — число десятичных разрядов A; k равно десятичной сте- пени числа А минус п (запятая стоит перед мантиссой числа 4); р = 10(2)0, — десятичная цифра в двоичном коде. Вычисления выполняются по правилам двоичной арифметики. 2. Эквивалент правильной десятичной дроби А в двоичной системе А' = (р’1 (й1 + р-' (аз + р'1 (аз + ... + Г1 (ап)) ... ) р*. (6) где k — равно десятичной степени числа А. Вычисления выполняются по правилам двоичной арифметики. 3. Эквивалент А' смешанной десятичной дроби А получается путем раздельного преобразования целой и дробной частей по формулам (5) и (6) с последующей «сшивкой» результатов. Перевод двоичных чисел в двоично-десятичный код (обратный перевод) выполняется по следующим формулам. 1. Эквивалент А правильной двоичной дроби А' в десятичной системе получается путем последовательного вычисления двоич- ных разрядов: ах = [Д'р1"*] 02 = [(4'р1-* — 01) р] ..................................................... (7) «П = [((...((Л'р1-* — aj р — а.,) р — Оз) ... ) р — ап_,) р], где квадратные скобки означают операцию выделения целой части числа; р = 10(2); п — число разрядов десятичного экви- 162
валента числа; at—двоично-кодированная десятичная цифра. Арифметические действия выполняются по правилам двоичной системы. 2. Эквивалент А целого двоичного числа А' в десятичной системе определяется по формуле (5). При этом считаем, что k равно двоичной степени числа Л, уменьшенной на п\ п — число двоич- ных разрядов; at— двоичный разряд (0 или 1). Вычисления выполняются по правилам двоичной арифметики. 3. Смешанные дроби разбиваются на целую и дробную части, десятичный эквивалент получается путем «сшивки» результатов перевода каждой части по формулам (5) и (7). Рассмотрим программы перевода чисел с плавающей запятой из двоцчно-десятичной системы счисления в двоичную («прямой перевод») и обратно («обратный перевод»). Структура программы преобразования двоично-десятичных чисел в двоичный код приве- дена на рис. 77, а двоичных чисел — в двоично-десятичный код на рис. 78. Программы в кодах приведены в прил. 6. Формат представления двоичных чисел в контроллере МС2702 описан в п. 3 гл. 5. Данный формат позволяет записывать двоич- ные эквиваленты десятичных чисел с четырьмя знаками мантиссы. Выбранная форма представления десятичного числа показана на рис. 79 (23FCH—23FFH — адреса ячеек ОЗУ, в которых хранится число). Число представляется в двоично-десятичном упакованном коде с плавающей запятой. Знак считается положительным, если в тетраде расположен нуль, и отрицательным в любом другом случае. Программы построены по блочному принципу. При пря- мом переводе общий блок DWDD (см. рис. 77) проверяет порядок числа (6), и в зависимости от значения порядка, инициализирует один из блоков: CHCEL (для k 4), CHDROB (для k < 0), SMESH (для 0 < k < 4). Блок CHCEL реализует преобразование по схеме Горнера согласно формуле (5), блок CHDROB работает согласно формуле (6), a SMESH использует обе формулы с после- дующей «сшивкой» результатов. Преобразуемое двоично-десятич- ное число при выполнении всех блоков содержится в двухбай- товом регистре RISH (мантисса) и однобайтовом регистре RSTEP (порядок). Получаемый в результате преобразования двоичный эквивалент исходного числа (без знака) оказывается (см. рис. 79) в двухбайтовом регистре RRE (мантисса) и однобайтовом регистре RPOR1 (порядок). Блок RRE добавляет к мантиссе знаковый разряд. При обратном переводе (см. рис. 78) инициализирован один из блоков CEL (если порядок k 14(Ю)), реализующий фор- мулу (5), DROB (k < 0), реализующий формулу (7), или DSM (0 < k < 14(Ю)), который производит «сшивку». Блок DROB использует принцип преобразования с операциями в исходной системе счисления ввиду сложности машинной реализации де- сятичного деления на 2. Преобразуемое двоичное число находится 6* 163
TCHCEL । Перевод мантиссы в двоичный код как целого с фиксированной запятой } 1 Установка начального порядка двоичного и десятичного чисел r-* rbwjDP obi Cr10 ( BW'BD ) 0<k<‘i Запись числа в промежуточный регистр Каков порядок числа ‘ //---------------------- Сдвиг целой части числа в RCE chdrobI 1L ♦ 1 Установка начального (0-го) порядка двоичного и десятичного чисел 1 — /с I 1 Перевод мантиссы в двоичный код как дроби с фиксированной запятой Да Умножение числа на 1010 | р Перевод дробной части —5--------1--------- Нормализация числа | ;j---------------- I I иел°й части [smes и__TZTZTZI Г 16 'Десятич^ 'ный порядок - 0? Hem — 17------" Деление числа на Ю г-20. 6---------1------------ Уменьшение десятичного порядка на 1 Да Окончательная нормализация числа Г21—------L------ Формирование знаковых разрядов есятич- ный порядок = О? Окончательная нормализация числа — 18----------------- Нормализация числа 19-------------------- Увеличение десятичного порядка на 1 г22 г9--------1-------- Запись числа в RRE Представить число в формате библиотеки К1-20 23------J------- Запись результата в RX 1 | Конец ) I K0NEC Рис. 77. Алгоритм программы перевода двоично-десятичных чисел в двоичный код (см. рис. 79) в регистрах RCE (мантисса) и RPOR1 (порядок). Результат получается в регистрах RISH, RSTEP и RZNAK. Погрешность преобразования мантиссы составляет ±5-10“б, погрешность преобразования двоичной мантиссы лежит в преде- лах от —10"4 до 0. Работа с программами. Перед запуском программы перевода числа из десятичной системы в двоичную необходимо занести код 164
г— [./2----I--------- Установка признака отрицательного порядка д DWDD~1 Переслать число из RX в RRE (с перестановкой байтов) ^Сброс RISH и RSTEP DROB Г Нет Н5------1------- Умножение на 10ю Исхдное число -О? Порядок = О? Нет Да L“l 5 Разделение целой и дробной частей. Сдвиг вправо мантиссы с коррекцией двоичного порядка (+1) Есть переполнение? г2 Сброс знаковых разрядов пень числа<0? Нет 0<К<0Е | 4 "какова степень числа? КъОЕ Г6---------1--------- Перевод целой части Г/Я—-----1-------- Увеличение на / десятичного порядка -20-------'-------- Сдвиг результата на одну значащую цифру влево г2/-------f--------— Запись десятичной цифры в младший разряд г22- Сброс байта переполнения Нет есятичные ифры полу- г7 Запись дробной части в RRE Нет г9 8 Все Ч десятичных цифры получу? Определение количества цифр дробной части числа 10 рмирование степени десятичного числа I Формирование степени десятичного числа Q Конец J Рис. 78. Алгоритм перевода двоичных чисел в двоично-десятичный код 165
31 23FFH 26 23 23FEH 16 15 23FDH в 7 23FCH О 1 z-и | i-й разряд | разряд 1 Знак | Знак мантиссы^ порядка Ъ-й разряд 3-й разряд 2-й разряд 1-й разряд RSTEP RZNAK PISH Порядок Знаковый байт Мантисса Рис. 79. Форма представления десятичного числа числа (в указанном выше формате) в ячейки 23FCH — 23FFH ОЗУ контроллера МС2702. Пуск программы осуществляется командой 6D90 CR. Результат перевода помещается в ячейках 2089Н— 208ВН (регистр X калькулятора). Для перевода числа из двоичной системы в десятичную не- обходимо ввести исходное число в формате библиотеки МС2702 (см. п. 3 гл. 5) по адресу 2089Н—208ВН (регистр X калькуля- тора). Пуск программы осуществляется командой ttG 6D96 CR. Результат перевода будет помещен в ячейки 23FCH—23FFH. Рассмотрим конкретные примеры преобразования чисел: Пример 117. Перевести двоично-десятичное число 0,7560-102 в двоичный код. 1. Загрузка исходных данных: ftS 23FC_60_75_00_02 2. Запуск программы перевода: ftG 6D90 CR 3. Контроль результата Информация на дисплее 2089 _ 2089 07 208А 25 208В CD Пример 118. Перевести двоичное код. 1. Загрузка исходных данных: число 0,37ЕВ1в-220 в двоично-десятичный ttS 2089_20_37_ЕВ 2. Запуск программы перевода: #G 6D96 CR 3. Контроль результата Информация на дисплее 23FC _ 23FC 52 _ 23FD 37 _ 23FE 00 23FF 10 166
ГЛ А В A 6 КРОСС-СРЕДСТВА ДЛЯ МИКРОПРОЦЕССОРА КР580ИК80 НА БАЗЕ КОМПЛЕКСА СПП-02 В конструировании устройств на микропроцессорах тесно переплетаются два основных направления: аппаратное и про- граммное. Разработка программного обеспечения для микрокон- троллеров и управляющих систем на базе микропроцессоров пред- ставляет собой достаточно сложную задачу при отсутствии у раз- работчиков доступа к специальным прототипным или кроссовым комплексам типа СМ1800 или АРМ2-05. В данной главе описан программный комплекс на базе микро- ЭВМ «Электроника ДЗ-28» с алфавитно-цифровым дисплеем, который, моделируя систему команд широко распространенного микропроцессора КР580ИК80, позволяет наглядно изучать воз- можности программирования и методику выполнения программ указанного микропроцессора [19]. Программный комплекс дает возможность проследить за ходом выполнения программы и предо- ставляет некоторые возможности, облегчающие составление и отладку программ. В данном описании использована система обозначения шест- надцатеричных кодов, принятая для ЭВМ ДЗ-28, а именно: каждая шестнадцатеричная цифра от 0 до F обозначается двузначным десятичным числом соответственно от 00 до 15. Байт записывается в виде двух таких чисел. Например, код 5Е1в имеет вид 0514. В программном комплексе девять функциональных блоков. Они начинаются метками с кодами от 0700 до 0708. Блоки вы- полняют функции: 0700 — ввод кодов в память; 0701 — вы- вод кодов с мнемоническим обозначением команд; 0702 — моделирование выполнения программы, 0703 — кросс-ассемб- лер; 0704 — ввод текста на языке ассемблера; 0705 — переключе- ние формы вывода; 0706 — редактор текста; 0707 — запись текста на магнитную ленту; 0708 — считывание текста с магнитной ленты. В этой главе используются обозначения, принятые в техни- ческом описании комплекса СПП-02. 1. БЛОК ВЫБОРА РЕЖИМА Блок выбора режима (рис. 80) подготовляет необходимые адреса в регистрах Т микроЭВМ, осуществляет прием команды с клавиатуры дисплея и в зависимости от введенного символа пе- редает управление соответствующему функциональному блоку. 167
Функциональным блокам соответствуют следующие буквы: А — 0700, L — 0701, Р — 0702, М — 0703, I — 0704, S — 0705, Е — 0706, W — 0707, R — 0708. Признаком работы блока выбора режима является символ «*» в начале строки на экране дисплея. Если введенный символ от- личается от перечисленных букв, на экран выводится знак «?» и на следующей Строке символ «*». Блок выбора режима имеет метку 0408, на которую передается управление после окончания работы функциональных блоков (исключение составляет блок ввода текстов 0704). Часть блока выбора режима перед меткой 0408 имеет метку 0514 и осуществляет начальный запуск программы. При этом устанавливаются на- чальные значения регистров В и ВР, режим вывода на дисплей и переписывается таблица адресов подпрограмм на адреса 07 13 00 00-07 14 15 15. 168
2. БЛОК ВВОДА КОДОВ Блок ввода (рис. 81) кодов предназначен для ввода и исправ- ления кодов в памяти. Блок имеет метку 0700, обращение к нему производится по команде А. После символа «А» подпрограммой 0208 вводится начальный адрес в восьмеричной системе и зано- сится в указатель адреса (регистр R12 микроЭВМ). Заданный адрес отображается на дисплее и выводится содержимое ячейки памяти с указанным адресом. Затем подпрограммой 0203 вводится восьмеричный код. После обращения к подпрограмме 0203 в блоке осуществляется проверка введенной информации. Кроме восьмеричного кода блок допускает ввод символов «—», «ПС», «А», «L», «Р». Восьмеричный код заносится по текущему адресу (R12) в память; символ «—» вызывает переход к предыду- щему адресу, т. е. уменьшение R12 на единицу; «ПС» (перевод строки) выполняет переход к следующему адресу без изменения кода по текущему адресу. Буквы A, L, Р вызывают переход к со- ответствующему функциональному блоку, минуя блок выбора режима. Ввод любого другого символа вызывает переход к блоку выбора режима. Чтобы иметь возможность работать с включенным режимом «Ролик» дисплея, в блоке предусмотрен счетчик строк. После вывода на экран 24 строк экран очищается, и вывод на- Рис. 81. Алгоритм блока ввода кодов 169
Рис. 82. Алгоритм блока вывода ко- дов и мнемоники код и мнемокод чинается с верхней строки. Счетчик организо- ван в регистре ТЗ микроЭВМ, начальное зна- чение заносится в него программой 0209 очист- ки экрана. 3. БЛОК ВЫВОДА КОДОВ И МНЕМОКОДОВ Блок вывода кодов и мнемокодов (рис. 82) предназначен для вывода на дисплей или пе- чатающее устройство записанных в памяти кодов и соответствующих мнемокодов. Блок имеет метку 0701, обращение к нему произво- дится по команде L. Так же как в блоке ввода кодов 0700, осуществляется ввод начального адреса. Затем по команде JSTT 0800 выпол- няется обращение к подпрограмме, устанавли- вающей адрес устройства вывода. После этого выводятся 23 строки, каждая из которых со- держит адрес, записанный по этому адресу код и соответствующий мнемокод. Счетчик строк организован в регистре R3 микроЭВМ. Адрес, выводятся подпрограммой 0213. После вывода 23 строк производится обращение к подпрограмме ввода байта 0200. Если введен символ «ПС», то выводятся следующие 23 строки (23 байт). Ввод любого другого символа вызывает пере- ход на блок выбора режима. Так же как блок ввода кодов, блок вывода кодов и мнемоники может работать при выключенном режиме «Ролик» дисплея. 4. БЛОК МОДЕЛИРОВАНИЯ ВЫПОЛНЕНИЯ КОМАНД Блок моделирования выполнения команд (рис. 83) является основным блоком программы. Он позволяет моделировать выпол- нение введенной программы по шагам и в автоматическом режиме, а также выполнение отдельных команд; задавать останов по ука- занному адресу, коду команды и содержимому аккумулятора; изменять содержимое всех моделируемых регистров микропро- цессора, следить за ходом выполнения программы. Каждой команде микропроцессора соответствует своя под- программа. Для них отведена область памяти от 24ОО1о до 4О951о (от 00 09 06 00 до 00 15 15 15). Обращение к подпрограммам производится по таблице, которая начинается с адреса 409610 (01 00 00 00) и занимает 512 байт. Адрес каждой подпрограммы занимает в таблице два байта и располагается со смещением отно- сительно начала таблицы, равным удвоенному коду моделируе- мой команды. Для моделируемой программы выделено 4К байт памяти начиная с адреса 819210 (02 00 00 00). Сразу за этой об- ластью расположены ячейки, изображающие регистры микропро- 170
Рис. 83. Алгоритм блока мо- делирования команд цессора в следующем порядке: В, С, F, Е, Н, L, D, А, Р. В ка- честве регистра PC микропроцессора используется регистр R12 микроЭВМ. При моделировании выполнения команд происходит обращение к моделирующим подпрограммам, которые преобразуют данные в памяти и модели регистров так же, как в реальной МПС при выполнении соответствующих команд. Блок моделирования имеет метку 0702, обращение к нему происходит по команде Р. Блок работает только при выключенном режиме «Ролик» дисплея, так как в нем широко используется команда управления положением маркера дисплея. При обращении к блоку вводится начальный адрес подпрограммой 0208, как 171
в описанных выше блоках. Затем подпрограммой 0315 на экран дисплея выводится разметка — обозначения моделируемых ре- гистров. После этого разрешается прерывание от клавиатуры дисплея ПР8 командами MOV#0008, SO, MOV SO, M и сбрасы- вается признак автоматического режима (записывается нуль в регистр Т1). Дальше начинается часть блока, которая при моде- лировании выполнения программы повторяется для каждой команды. Подпрограммой 0212 маркер устанавливается в место, соответ- ствующее содержимому PC, и на экран выводится текущий адрес (R12) в восьмеричной (или шестнадцатеричной) и двоичной фор- мах подпрограммами 0206 и 0207. Затем подпрограммами 0210 и 0213 в нижнюю часть экрана выводятся адрес, код и мнемокод команды, которая будет выполняться в текущем цикле. После этого проверяются условия останова — адрес (регистр Т13), код команды (регистр Т14) и данные (регистр Т15). Если содержи- мое какого-либо регистра равно нулю, то соответствующая про- верка не производится. В случае выполнения условия останова сбрасывается признак «автомат» (регистр Т1). Производится проверка признака «автомат». Если он уста- новлен (содержимое регистра Т1 не равно нулю), то происходит переход на выполнение очередной команды. Если признак «авто- мат» сброшен (содержимое регистра Т1 равно нулю), происходит обращение к подпрограмме 0200 ввода символа с клавиатуры. Блок допускает ввод символов «А», «В», «С», «D», «Е», «Ь», «Н», «К», «F», «О», «Р», «S», «ПС», «ВК». Ввод любого другого символа вызывает переход на блок выбора режима. Перечисленные сим- волы вызывают следующие действия: «ПС» — организует переход на выполнение очередной команды; «ВК»—то же, что и «ПС», но кроме того устанавливает признак «автомат», обеспечивая авто- матический режим; «К» — позволяет выполнить любую команду, код которой вводится после символа «К»; «О» — устанавливает условия останова или отменяет их. Остальные буквы из пере- численных позволяют занести введенный следом код в соответ- ствующий регистр. Выполнение очередной команды происходит следующим об- разом. Адрес, код и мнемокод команды выводятся в верхнюю часть экрана подпрограммами 0210, 0213. Затем код команды заносится в регистр S1, очищая регистр R9, что служит призна- ком выполнения программы, и происходит обращение к подпро- грамме 0314, моделирующей выполнение соответствующей команды. На этом цикл выполнения команды заканчивается. 5. КРОСС-АССЕМБЛЕР Блок кросс-ассемблера (рис. 84), как и остальные, описы- ваемые ниже блоки, предназначен для ввода моделируемой про- граммы в память. Он транслирует исходный текст на языке ассем- 172
Рис. 84. Алгоритм кросса-ассемблера блера в коды команд микропроцессора КР580ИК80. Блок имеет метку 0703, обращение к нему производится по команде М. Кросс-ассемблер является однопроходным. Во время транс- ляции он строит таблицу меток, куда заносятся: имя метки, ее 173
значение и длина списка адресов. Если метка встречается в поле операндов до того, как она будет определена, в таблице устанавли- вается признак неопределенной метки и в нее заносятся адреса, по которым должно быть записано ее значение. Когда метка становится определенной, ее значение заносится в таблицу и по всем адресам из списка. Первый байт каждой строки исходного текста является управляющим. В него кросс-ассемблер заносит длину команды и признаки ошибок. После окончания трансляции на дисплей или на печатающее устройство выводится объектный код и соответствующий ему исходный текст. При этом управляю- щие байты строк используются для синхронизации вывода объ- ектного кода и исходного текста. При обращении к кросс-ассемблеру вызывает подпрограмма установки устройства вывода. Затем в регистрах Т11—Т14 поме- щаются адреса таблиц мнемокодов, псевдокоманд, базовых кодов и списка регистров; в регистрах Т5—T9 — адреса начала модели памяти, начала исходного текста, таблицы меток, рабочей области и конца таблицы меток. После этого начинается обработка исход- ного текста. Цикл обработки повторяется для каждой строки. Первый байт каждой строки пропускается, но его адрес за- поминается в регистре R7. Второй байт строки проверяется на наличие метки. Если второй байт содержит пробел, это понимается как отсутствие метки. Если во втором байте имеется символ «;» или «*», то вся строка считается комментарием; в противном случае устанавливается признак наличия метки (содержимое регистра Т15 равно нулю). После метки должен следовать пробел или двоеточие. Если это не так, устанавливается признак ошибки в управляющем байте. Затем выбирается следующее слово и сравнивается с мнемокодами в таблице. Если оно не совпало с мнемокодом, производится поиск в таблице псевдокоманд; если совпало, проверяется признак метки, и если он установлен, первые восемь символов метки заносятся в таблицу меток, и за ее значение принимается текущий адрес. Затем из таблицы кодов выбираются соответствующий базовый код и код типов операндов. В таблице приняты следующие обозначения: 0 0 — нет операнда; 0 1 —допустимы операнды А, В, С, D, Е, L, М, 0—7; 0 2 —допустимы операнды В (ВС), D (DE), Н (HL), SP, PSW, 0, 2, 4, 6; 0 3 —допустимы операнды В (ВС), D (DE), 0, 2; 0 4 — однобайтовый операнд (значения 0—25510); 0 5 — двухбайтовый операнд (значения 0—6553510). Каждой команде в таблице соответствуют два байта. В первом содержится базовый код, во втором старшая и младшая тетрады определяют соответственно первый и второй операнды. Если какой-либо из операндов имеет тип 01, 02 или 03, то к базовому коду прибавляется значение операнда, для большинства команд умноженное на 8. 174
Операнды типа регистра имеют следующие значения: В, ВС —О С — 1 D, DE —2 Е — 3 Н, HL — 4 L — 5 М, SP, PSW — 6 А — 7 Значения операндов типа 04 и 05 записываются соответственно во второй или во второй и третий байты команды. Операнды проверяются на допустимость значений, и в случае недопустимых операндов устанавливается признак ошибки. При- знак длины команды устанавливается равным единице, при на- личии операнда типа 04 или 05 он соответственно увеличивается на 01 или на 2. В случае, если прочитанное слово совпадает с име- нем псевдокоманды, управление передается подпрограмме об- работки соответствующей псевдокоманды, адрес которой берется из таблицы псевдокоманд. После обработки всех строк исходного текста начинается вывод объектного кода и исходного текста. При этом из управ- ляющего байта каждой строки берется признак длины, выводятся адрес и соответствующее число байт. Если признак длины равен нулю, выводится соответствующее число пробелов. Затем ото- бражается исходная строка. Между словами, разделенными про- белами, при необходимости вставляются дополнительные про- белы так, чтобы слова располагались ровными столбиками. После вывода всей строки снова проверяется управляющий байт, и при наличии признака ошибки появляется предупреждение об ошибке «* * * * ERROR ****». Затем выводится следую- щая строка. После вывода всего объектного кода и исходного текста вы- водится таблица меток. При этом каждая строка содержит имя метки и ее значение или символ «****» для неопределенных меток. По окончании трансляции происходит переход на блок выбора режима. 6. БЛОК ВВОДА ТЕКСТА Блок ввода текста (рис. 85) позволяет вводить в память ма- шины текст на языке ассемблера, предназначенный для трансля- ции кросс-ассемблера. Блок имеет метку 0704, обращение к нему происходит по команде I. В начале блока, так же как и у кросс- ассемблера, устанавливаются адреса таблицы псевдокоманд, списка регистров, таблицы кодов в регистрах Т12—Т14, адрес начала исходного текста в регистре Тб. Первый байт каждой строки блок пропускает — резервирует управляющий байт строки. Признаком конца строки служит символ «ПС». Если вводится символ «забой» (код 07 15), то со- 175
Рис. 85. Алгоритм блока ввода текста держимое указателя (ре- гистр R1) уменьшается на единицу, а с экрана сти- рается последний введен- ный символ. Сигналом конца ввода является ввод кода 0003 «КТ» (одновременное на- жатие клавиш «УПР» и «С»). При этом ввод за- канчивается, в память за- писываются два нулевых байта, отмечающие конец исходного текста. Переход происходит сразу на блок кросс-ассемблера по мет- ке 0703. 7. БЛОК УСТАНОВКИ ФОРМЫ ВЫВОДА Блок установки формы вывода (рис. 86) позволяет устанавливать режим вывода информации в восьмеричной или шестнадцатеричной системе. Он имеет метку 0705, обращение к нему происходит по команде S. Блок вводит один символ с клавиатуры дисплея подпрограм- мой 0200. Если введен символ «О», то в таблицу подпрограмм заносится адрес подпрограммы вывода бай- та в восьмеричной системе. Если введен символ Н, в то же мес- то таблицы заносится адрес под- программы вывода байта в ше- стнадцатеричном формате. Ввод любого другого символа вызы- вает вывод знака «?» и переход к блоку выбора режима. Замена адресов происходит в таблице по адресу 07 13 04 12, что соответ- ствует подпрограмме, вызываемой командой JSTT0412. Рис. 86. Алгоритм блока установки формы вывода 176
8. РЕДАКТОР ИСХОДНОГО ТЕКСТА Блок редактора исходного текста (рис. 87) позволяет вносить изменения в текст программы, уже введенной в память микроЭВМ. Он имеет метку 0706, обращение к редактору — по команде Е. Редактор позволяет исправлять строки исходного текста, встав- г-11 Л Вывод строкина экран, установка на начало следу- ющей строки Г“ о । । .1 Редактирование I строки Г9----1------ Поиск кода „ПС‘‘ Установка на начало строки п 10'Новая х *а ^строка длин- нее ста-. Сдвиг текста вправо ги t — Замена отредактирован- ной строки или ПС“ Нет________ г12т±-------- Замена отредактирован ной строки Сдвиг остатка текста влево I г15—±— Ввод десятичного числа r-16 t г-^—---------- Ввод десятичного числа Пропуск заданного числа строк назад Пропуск заданного числа строк вперед Рис. 87. Алгоритм редактора текста 177
л ять и удалять в них любые символы, вставлять и удалять строки. Управляется клавишами редактирования на дисплее; при нажа- тии любой из этих клавиш сначала вводится код 0111, а затем код, соответствующий нажатой клавише. Редактор обрабатывает текст построчно следующим образом. Он находит начало строки и устанавливает его адрес в регистрах R1 и R2. Затем осуществляется ввод байта. Если введен код 0111, то вводится код клавиши редактирования, в противном случае происходит переход на ввод вставляемой строки. Команды редактирования имеют следующие обозначения. Клавиша «<-1» вызывает вывод на экран очередной строки, после чего и ее можно будет исправлять. При этом регистр R2 будет указывать на начало следующей строки. Клавиша « f » вызывает вывод на экран знака «—». Введенное после него десятичное число показывает, на сколько строк надо вернуться назад. Клавиша « | » аналогично клавише « f » вызывает вывод знака «+» и переход на заданное число строк вперед. В этих двух слу- чаях при выходе за пределы текста произойдет переход на начало текста. Клавиша «\» также организует переход на начало текста. При выводе на экран строки она переписывается в рабочую область, адрес которой указан в регистре Т8. Туда же вводится и вставляемая строка. При этом действует режим исправления строки, при котором несколько меняется смысл клавиш редакти- рования. Клавиша «<-1» означает конец редактирования строки и пере- ход к следующей строке. Клавиши «->», ««-» дают сдвиг маркера по строке вправо и влево на одну позицию. Клавиша « f » вставляет на указанное маркером место пробел, клавиша « |» удаляет указанный символ. Клавиша «ПС» действует аналогично клавише ««-I» и, кроме того, заканчивает строку на текущей позиции экрана. После окончания исправления строки регистр R2 указывает на начало следующей строки до исправления, a R3 — на начало следующей строки после исправления. Сравнивая содержимое регистров R2 и R3, можно определить, в каком случае новый текст длиннее старого, а в каком — короче. Если новый текст длиннее, сначала производится поиск конца исходного текста, а затем сдвиг текста вправо начиная с конца. После этого на место старой строки запи- сывается новая. Если новый текст короче, старая строка заме- няется новой, а затем оставшаяся часть текста сдвигается влево до конца. После исправления повторяется цикл обработки сле- дующей строки. Выход из блока редактора осуществляется при нажатии в пер- вом режиме (перед выводом строки) клавиши «». При этом происходит переход на блок выбора режима. 178
9. БЛОК ЗАПИСИ ТЕКСТА НА МЛ Блок записи текста записывает введенный исходный текст программы на кассету МК-60 с помощью встроенного НМЛ. Блок имеет метку 0707, обращение к нему осуществляется по команде W. В этом блоке вначале вводится с клавиатуры десятичное число, указывающее, сколько раз должна быть повторена запись. Затем производится поиск конца исходного текста в памяти ЭВМ, и после признака конца текста (два нулевых байта) записывается код команды END (0512), отмечающий конец записываемого на ленту массива. После этого в регистр «X» заносится адрес начала текста и командой VERX (1201) вычисляется контрольная сумма записываемого на ленту массива, которая выводится на дисплей. Затем массив с текстом SAVEX (1203) записывается на МЛ заданное число раз командой. 10. БЛОК СЧИТЫВАНИЯ ТЕКСТА С МЛ Блок считывания текста считывает с магнитной ленты запи- санный ранее текст программы. Он имеет метку 0708, обращение к нему производится по команде R. Вначале этот блок вводит десятичное число, задающее контрольную сумму блока, который необходимо считать с МЛ. Если контрольная сумма не указы- вается (нажата клавиша «ПС»), то считывается первый записан- ный на ленте блок. Считывание производится командой LOADX (1202). Если при считывании произошел сбой, то считывается следующий записан- ный на ленте блок. Если блок считался без ошибок, командой VERX вычисляется его контрольная, сумма, которая сравни- вается с заданной. Если контрольная сумма не была задана, то вычисленная контрольная сумма считанного блока выводится на дисплей, и управление передается блоку выбора режима. Если была задана контрольная сумма и она совпала с контроль- ной суммой считанного блока, также происходит переход к блоку выбора режима. В противном случае считывается следующий блок и т. д. 11. ОБЩИЕ ПОДПРОГРАММЫ Общие подпрограммы предназначены для обработки данных при моделировании выполнения команд и организации ввода и вывода информации. Почти все они имеют метки, к некоторым возможно обращение по таблице. Назначение подпрограмм сле- дующее: 0000 — обеспечивает выборку одного байта из памяти в ре- гистр S1 или, если установлен признак выполнения отдельной команды (ТЗ 0), ввод байта с клавиатуры. Кроме того, если 179
байт выбирается из памяти, на дисплей выводится его адрес и сам байт в шестнадцатеричной или восьмеричной системе. При этом содержимое регистра R12 увеличивается на единицу. 0001 —организует ввод двух байтов в регистр R11 с по- мощью подпрограммы 0000. 0002 — считывает в регистр S1 содержимое заданного в команде регистра, адрес которого помещен в регистр R4. 0003 — считывает в регистр R8 содержимое заданной в команде регистровой пары, адрес которой находится в регистре R3. 0006 — суммирует два двухбайтовых операнда в регистрах R8 и R10. В регистре R3 формируется признак переноса. 0007 — суммирует два однобайтных операнда, находящихся в регистрах S0 и S1. В регистр S1 помещается результат, в S3 — признак переноса, в S0 — признак вспомогательного переноса. 0008 — получает дополнительный код числа в регистре S1. 0009 — сдвигает содержимое регистра S1 влево на один раз- ряд. Признак переноса помещается в S3. 0010 — сдвигает содержимое регистра S1 вправо на один разряд. Признак переноса помещается в S3. ООН — заносит в регистр S1 содержимое модели аккумулятора. 0012 — заносит бит переноса из регистра S3 в модель реги- стра F флажков. 0013 — считывает в регистр S3 признак переноса из модели регистра F флажков. 0014 — заносит в регистр R8 содержимое модели регистровой пары HL. 0015 — заносит содержимое регистра R8 в модель регистровой пары HL. 0100 — осуществляет условный переход. При выполнении условий происходит возврат в вызвавшую программу или под- программу, при невыполнении — возврат в программу или под- программу предыдущего уровня. 0102 — записывает содержимое регистра R8 в стек. 0103 — считывает данные из стека в регистр R8. 0200 — организует ввод байта с клавиатуры дисплея в ре- гистр S3. 0201 — выводит байт из регистра S3 на дисплей при Т10 = = 1501 или на печать при Т10 = 1400. 0202 — выводит на дисплей или на печать пробел. 0203 — вводит байт с клавиатуры дисплея в восьмеричной системе. 0204 — выводит на дисплей код 0111, а затем байт из реги- стра S5. 0205 — вспомогательная подпрограмма, вычисляет и выводит цифры числа; используется в подпрограммах 0206 и 0207. 0206 — то же, что и JSTT0412, в зависимости от адреса в таб- лице подпрограмм выводит байт в восьмеричной или шестнадца- теричной системе. 180
0207 — выводит из регистра S1 байт в двоичной системе. 0208 — вводит с клавиатуры адрес из регистра R12 в восьме- ричной системе. 0209 — очищает экран, заносит единицу в регистр ТЗ. 0210 — выводит адрес из регистра R12 и байт, записанный по этому адресу. 0211 — при обращении к ячейке памяти М через регистровую пару HL получает адрес памяти. 0212 — устанавливает маркер в заданную позицию экрана дисплея. 0213 — выводит мнемокод команды, код которой записан в регистр S1. 0214 — выводит мнемокод, используется в подпрограмме 0213. 0215 — выводит обозначение регистров-операндов, исполь- зуется в подпрограмме 0213. Блок подпрограмм 0300—0306 предназначен для изменения флажков и записи в модели регистров и регистровых пар в раз- личных сочетаниях. После записи на экран дисплея выводится новое содержимое моделей регистров, в которые происходила запись. Блок имеет семь точек входа: 0300 — запись одного байта в регистр по адресу R03; 0301 — запись двух байтов в регистровую пару, адрес помещается в ре- гистр S3; 0302 — установка признаков в регистре флажков F; 0303 — вывод данных, уже записанных в регистр; 0304 — запись в аккумулятор и установка признаков; 0305 — запись одного байта в регистр по адресу, записанному в регистр R11; 0306 — запись содержимого R8 в регистровую пару, адреса — в регистр R11 0307 — выводит содержимое регистра S1 в десятичном формате. 0308 — организует ввод байта в двоичной системе в регистр S1. 0313 — является дополнительным входом в подпрограмму 0203. Она используется в том случае, когда перед обращением к подпрограмме 0203 первый символ уже введен. 0314 — запускает моделирование выполнения команды, код которой расположен в регистре S11. Из кода команды выделяются адреса используемых в ней моделей регистров. Затем код команды умножается на 2 и прибавляется к адресу начала таблицы моде- лирующих подпрограмм. После этого из таблицы выбирается адрес соответствующей подпрограммы и производится переход по этому адресу. 0315 — выводит текст, адрес и длина которого задаются со- ответственно в регистрах R8 и R2. Кроме перечисленных есть несколько подпрограмм, обращение к которым производится по таблице командой JSTT. В основном это подпрограммы кросс-ассемблера. 0800 — переключает устройство вывода. Выводит на дисплей текст «Вывод на дисплей (0) или на печать (1)?» и вводит ответ. 181
Если введен символ «О» или «ПС», то устанавливается адрес устрой- ства 1501 (дисплей); если введен символ «I», то устанавливается адрес 1400 (печатающее устройство). 0804 — выводит текст, который следует сразу за обращением к подпрограмме и заканчивается кодом 0000. 0806 — производит выборку из текста очередного слова, опре- деляет его длину и записывает разделитель в регистр S3. 0808 — пересылает слово в рабочую область. 0810 — определяет значение операнда. Если операнд является константой, она преобразуется в число. Если операнд — метка, производится поиск ее в таблице меток и подставляется ее зна- чение. 0812 — заносит метку или ее значение в таблицу меток. Если такая метка уже есть в таблице и определена, устанавливается признак ошибки. 0814 — проверяет допустимость операндов и формирует код команды. 0900 — раздвигает таблицу меток. 0902 — производит ввод десятичного числа. Метка исполь- зуется в блоке редактора текста. Кроме того, командой JSTT можно обратиться к подпрограм- мам 0201 (JSTT0402), 0202 (JSTT 0404) и 0206 (JSTT 0412). Подпрограммы, моделирующие выполнение команд, построены на основе общих подпрограмм 0000—0103 и 0300—0306 и неболь- шого числа дополнительных команд. 12. РАБОТА С ПРОГРАММОЙ Программа загружается в память микроЭВМ с нулевого шага. После проверки контрольной суммы она запускается клавишами «С», «S». На дисплее при этом должны быть включены клавиши «ДИАЛОГ», «ЛИН», «РОЛ». При запуске программы управление получает блок выбора режима, он выводит на экран дисплея сим- вол «*», требуемый режим задается соответствующей коман- дой: А — ввод кодов в память; L — вывод кодов и мнемоники; Р — моделирование выполнения программы; I — ввод текста на языке ассемблера; Е — редактирование текста; М — трансляция введенного текста; S — установка формата вывода; W — запись текста на МЛ; R — считывание текста с МЛ. Для работы в режиме Р клавиша «РОЛ» дисплея должна быть выключена, для остальных режимов включена. Чтобы записать коды в память, нужно ввести команду А и за ней начальный адрес в восьмеричной системе. После этого на экран будут выведены 182
адрес и код, записанный по этому адресу. Чтобы заменить старый код новым, достаточно ввести новый код в восьмеричной системе. Если изменить код не требуется, нужно нажать клавишу «ПС» и программа перейдет к следующему адресу. Чтобы вернуться к предыдущему адресу, нужно ввести символ «—». Если необхо- димо исправить код по другому адресу, следует снова ввести команду А и требуемый адрес. Если ввести символ L или Р и затем адрес, программа перейдет соответственно в режим вывода кодов или моделирования выполнения программы. Ввод любого другого символа, кроме перечисленных, приведет к выходу в блок выбора режима. Чтобы вывести содержимое памяти, нужно ввести команду L и затем начальный адрес в восьмеричной системе. После этого в ответ на вопрос следует указать требуемое устройство вывода. Символ «О» при этом можно заменить символом «ПС». В результате будет выведено 23 строки, каждая из которых содержит адрес, код и соответствующий мнемокод. Чтобы продолжить вывод, необходимо нажать клавишу «ПС». Ввод любого другого символа вызовет переход на блок выбора режима. Режим моделирования выполнения программы является основ- ным для данной программы. Для запуска этого режима нужно выключить клавишу «РОЛ», ввести команду Р и адрес в восьмерич- ной системе. После этого на экран будет выведена разметка и команда. Чтобы работать в пошаговом режиме, нужно нажимать клавишу «ПС». При этом будет выполняться одна очередная команда. Для запуска программы в автоматическом режиме сле- дует нажать клавишу «ВК». Чтобы остановить выполняющуюся программу, нужно нажать любую клавишу. Останов программы можно задать по достижению заданного адреса, выборке заданного кода команды, получению заданного содержимого аккумулятора. Для этого перед запуском про- граммы клавишей «В К» нужно ввести символ «О» и после вывода букв А (адрес), К (команда), D (данные) ввести соответствующие значения в восьмеричной системе. Если вместо ввода какого- либо значения нажать клавишу «ПС», то соответствующая про- верка будет отменена. Останов по адресу происходит, если содержимое PC стало больше заданного значения или равно ему. Чтобы останов про- исходил только по равенству, необходимо перед вводом адреса ввести символ «=». Останов программы также происходит при выполнении команд HLT, IN, OUT. Чтобы выполнить отдельную команду, нужно во время останова ввести символ «К» и код команды в восьмеричной системе. Для изменения содержимого любого регистра модели следует ввести его обозначение (В, С, D, Е, Н, L, A, F, S, Р) и данные в восьмеричном коде. Для регистров S (SP) и Р (PC) нужно ввести два байта. Ввод любого символа, отличного от перечисленных, приво- дит к переходу на блок выбора режима. 183
Чтобы ввести текст на языке ассемблера, нужно ввести команду I и затем построчно вводить нужный текст. Метки, сим- волы мнемоники, операнды должны быть разделены пробелами. Операнды, если их два, разделяются запятой. Строка должна заканчиваться символом «ПС». Если при вводе допущена ошибка, можно стереть последние введенные символы клавишей «—» при выключенной клавише «ЛАТ». После ввода последней строки нужно нажать одновременно клавиши «УПР» и «С». Программа перейдет в режим трансляции. Для исправления уже введенного текста можно воспользо- ваться программой «Редактор текста». Для запуска «Редактора» нужно ввести команду Е. Перед выводом каждой строки «Редактор» останавливается. В это время можно выполнить следующие дей- ствия: перейти на несколько строк вперед — нажать клавишу « |» и после появления знака «+» ввести в десятичном виде число про- пускаемых строк, после числа нажать клавишу «ПС»; перейти на несколько строк назад — аналогично, с использованием кла- виши «|». В этих режимах выход за пределы текста приведет к переходу на начало текста. На начало текста можно перейти также, нажав клавишу « ». Клавиша « » вызовет переход на блок выбора режима. Кла- виша «<-1» обеспечит вывод очередной строки текста на экран и возможность ее редактирования. Ввод любых других символов приведет к формированию новой строки, которая будет вставлена перед очередной старой строкой. Последние две возможности пере- водят «Редактор» в режим редактирования строки. В этом режиме имеются следующие возможности: перемещение маркера вправо и влево по строке клавишами «—>», «ч-»; замена любых символов путем ввода новых на их место; вставка символов в позицию, определяемую маркером, кла- вишей « f »; удаление символов в позиции, определяемой маркером, клавишей « |». Клавиша «<-1» заканчивает редактирование строки и пере- водит «Редактор» снова в режим ожидания перед выводом оче- редной строки. Такое же действие вызовет и клавиша «ПС», но ввод этого символа отсечет оставшуюся часть строки. Таким об- разом, для удаления строки достаточно сразу после ее вывода ввести символ «ПС». Для запуска кросс-ассемблера нужно ввести команду М и затем в ответ на вопрос указать требуемое устройство. После трансляции происходит переход на блок выбора режима. Для записи текста на МЛ нужно ввести команду W и после нее десятичное число, указывающее, сколько раз должен быть записан текст. Ввод числа заканчивается нажатием клавиши «ПС». Если не указывать число дублей, текст будет записан один раз. Для считывания записанного ранее текста следует ввести 184
команду R и затем контрольную сумму блока текста, который нужно считать. Ввод контрольной суммы заканчивается нажатием клавиши «ПС». Если контрольную сумму не указывать (сразу нажать «ПС»), то будет считан первый блок, при считывании ВАРИАНТЫ ЛИСТИНГОВ ПРОГРАММЫ НА КОМПЛЕКСЕ ; ; ПРОГРАММА СЛОВЕНИЯ ДВУХ ДЕСЯТИЧНЫХ ЧИСЕЛ 0000 2А1600 LHLD CONST1 0003 44 мои В/Н 0004 4D мои CjL 0005 211800 LXI Нл C0NST2 0008 79 мои А/ С 0009 86 ADD М 000А 27 DAA 000В 4F мои СлА 000С 23 IHX Н 80 0D 78 мои Ал В 000Е 8Е ADC М 000F 27 DAA 0010 67 мои НлА 0011 69 мои L/C 0012 221А00 SHLD RES 0015 76 HLT РАБОЧИЕ ЯЧЕЙКИ ПАМЯТИ: 0016 0500 CONST1: DU 5 0018 2000 C0NST2S DU 20H 001А 0000 RES: DU 0 CONST1 C0NST2 RES 0016 0018 001А 0000 2A LHLD 0001 16 0002 0© 0003 44 MOU ВлН 0004 4D MOU С я L 0005 21 LXI H 0006 18 0007 00 0008 79 MOU АлС 0009 86 HDD М 080 A 27 DAA 0008 4F MOU Сян 000C 23 INX Н 08 CD 78 MOU Ал В CO 0E 8E HDC М 00 OF DAA 0010 67 MOU Ня А 0011 69 MOU L*C 0012 SHLD 0013 1A 0014 00 0015 76 HLT Рис. 88. Варианты листингов программы на комплексе 185
которого не произошло сбоя, и его контрольная сумма будет выведена на дисплей. В табл. 33 представлено размещение программ в памяти ми- кроЭВМ. Примеры вариантов листингов программ, получаемых на комплексе, показаны на рис. 88. В прил. 7 приведена распе- чатка описываемого комплекса программ в шестнадцатеричном коде. Таблица 33 Размещение программ в памяти микроЭВМ Адрес (десятичный) Содержимое 00000—00010 00011—00111 00112—00153 00154—00163 00164—00331 00332—00800 Таблица подпрограмм обработки прерываний Подпрограммы 0204, 0205, 0207, 0211, 0212 Указатели подпрограмм 0210, 0213, 0215, 0315 Программа обработки прерывания с клавиатуры ПР8 Блок подпрограмм 0300—0306 Подпрограммы 0000—0003, 0006—0100, 0102, 0103, 0307, 0308 00849—00866 Блок повторного выбора дисплея 0407; блок обработки ими- тации прерывания (для будущего использования) 0604 00868—00895 00896—00925 00926—01038 01066—01477 01478—01535 01536—01667 01668—01831 01832—01872 01875—02380 02400—02929 03072—03445 03446—03511 03512—03551 03552—03591 03592—03626 03628—03795 03796—03827 04096—04607 04608—05255 05258—05339 05340—05351 05352—05467 05468—05549 05550—05587 05588—06251 06252—06325 06330—06477 06480—06521 06524—06560 06562—06987 06988—07177 07120—07167 07168—07207 07216—07335 07680—08191 Подпрограмма 0315 Программа начального запуска Блок выбора режима 0408 Блок моделирования команд 0702 Подпрограмма 0314 Подпрограммы 0200, 0203, 0208—0210 Блок ввода кодов 0700 Блок вывода кодов и мнемоники 0701 Подпрограммы 0214, 0215, 0213 Подпрограммы реализации команд Таблица мнемокодов Разметка экрана Текст Таблица позиций экрана Текст Таблица кодов команд Таблица псевдокоманд Таблица адресов подпрограмм реализации команд Кросс-ассемблер 0703 Подпрограмма кросс-ассемблера 0812 Подпрограмма 0202 Подпрограммы кросс-ассемблера Подпрограмма 0201 Подпрограмма 0206 (шестнадцатеричный вывод) Подпрограммы кросс-ассемблера Блок ввода кодов 0704 Подпрограммы JSTT 0902, JSTT 0800 Блок выбора формата вывода 0705 Подпрограмма 0206 (восьмеричный вывод) «Редактор текста» 0706 Подпрограммы JSTT 0904, JSTT 0910, JSTT 0906 Блок 0707 записи текста на МЛ Блок 0708 считывания текста с МЛ Подпрограмма псевдокоманд Таблица адресов подпрограмм JSTT, JSTF 186
ГЛАВА 7 МИКРОКОНТРОЛЛЕРЫ НА БАЗЕ МИКРОПРОЦЕССОРА КР580ИК80 И ИХ ПРИМЕНЕНИЕ Разработка МПС требует учета многих аппаратных и про- граммных аспектов. Во всех предыдущих главах авторы основное внимание уделяли практическим примерам программирования, идя от простого к сложному. Однако в этих главах полностью отстроиться от «диктата» аппаратуры не удалось, она незримо присутствовала при описании программируемых БИС и описании части относительно сложных программ с ориентацией их на аппа- ратные средства контроллера МС2702. Вместе с тем читатель, внимательно проработавший приведенный материал, может до- статочно легко перевести программы на другие аппаратные, в том числе и проектируемые, средства. В настоящее время в связи с серийным выпуском целого ряда микроконтроллеров (МК-01, МС2702, МКП-1 и др.) для огромного числа случаев применения микропроцессоров, видимо, снята проблема разработки центрального управляющего устройства. Безусловно, эта проблема еще остается для специализированных применений, связанных с минимальными габаритами и потребляе- мой мощностью, с максимальным быстродействием и особо слож- ными условиями работы. Однако остается проблема применения серийных микроконтроллеров с учетом не предусмотренных при их проектировании особенностей объекта. Последнее требует использования нестандартных устройств и модулей сопряжения. Основным материалом данной главы является описание ком- плекса на базе МС2702 и печатающего устройства УВВПЧ-30-004. Программное обеспечение, разработанное для этого комплекса, позволяет исследовать и реализовать все режимы печатающего устройства, а весь комплекс может быть основой для целого ряда лабораторных работ по изучению вопросов программирования микропроцессора, управления печатающими устройствами. Описываемый комплекс может иметь и самостоятельное при- менение в качестве управляющего или регистрирующего средства, обладающего развитыми функциональными возможностями. Приведенные в данной главе описания серийных микрокон- троллеров позволяют пользователям провести более обоснованный выбор технических средств. Описываемая здесь система контроля знаний и обучения на микроЭВМ «Электроника ДЗ-28», широко распространенных в ву- зах, школах и техникумах, позволит весьма просто реализовать 187
автоматизированный контроль знаний и обучение практически по любым учебным курсам, включая, разумеется, и обучение при- менению микропроцессоров. 1. МИКРОКОНТРОЛЛЕРЫ НА БАЗЕ МИКРОПРОЦЕССОРА КР580ИК80 Современная техника предъявляет к контролирующей и управ- ляющей аппаратуре повышенные функциональные, технико-эко- номические и эргономические требования: высокой надежности, экономичности, высоких эксплуатационных качеств, гибкость при перенастройке и переналадке производства и т. п. Всем этим требованиям аппаратура, построенная на жесткой логике, удо- влетворить уже не может. И поэтому вполне естественно, что от- ветом на эти требования явилось создание нового класса управ- ляющих и контролирующих устройств, которые получили назва- ние контроллеров или микроконтроллеров. Широкому распространению микроконтроллеров способство- вал тот факт, что в одну и ту же физическую структуру памяти можно заложить разные программы, реализующие совершенно разные алгоритмы контроля и управления; при этом аппаратура контроллера не изменяется; фактически контроллер становится универсальным по своему применению. Рассмотрим лишь несколько микроконтроллеров, которые выпускает наша промышленность. Всех их объединяет то, что они созданы на базе микропроцессора КР580ИК80 и БИС серии КР580. Предваряя описание характеристик микроконтроллеров, под- черкнем их главные отличия. Микроконтроллеры ПК 1024-3 и МКП-1 в сравнении с МК-01 и МС2702 отличаются четкой практической ориентацией на конкретную, хотя и достаточно широкую, область применения. И эта черта является достоинством, так как исключает чрезмерную аппаратную избыточность и струк- турную сложность. Микроконтроллеры МС2702 и МК-01 при про- ектировании были задуманы более абстрактно, и поэтому их об- ласть применения предполагается неопределенно широкой. Однако это требует в каждом конкретном случае разрабатывать свои нестандартные блоки сопряжения контроллера с объектами, что, вообще говоря, связано с введением аппаратной избыточ- ности. Микроконтроллер модели ПК 1024-3 Это универсальное унифицированно-блочное устройство [12], предназначенное для программного управления металлообраба- тывающими станками, автоматическими линиями и другим слож- ным оборудованием. Микроконтроллер может использоваться в цехах машиностроительных предприятий в среде, содержащей 188
Таблица 34 Основные характеристики микроконтроллеров Параметр мк-01 МС2702 «Электроника К1-20> Разрядность шины дан- ных Разрядность шины адреса Максимальное число пор- тов ввода-вывода Число групп команд Система прерываний 8 16 256 78 Программный по- 8 16 256 78 Приоритетная векторная, вось- Тип процессора иск источника КР580ИК80А миуровневая КР580ИК80А Время выполнения команд, мкс Частота тактирования, МГц Сила тока потребления, А, от источника питания: + 5 В 2,5—11,3 1,6 2 2—8 2 Менее 5 + 12 —5 В Емкость ОЗУ, К байт Емкость ПЗУ, К байт Интерфейс внешних уст- ройств Габаритные размеры, мм 0,1 0,02 2 6 Л КП ОСТ.4.271.003 212X150X140 0,4 0,1 1 2—16 358X244X57 Масса, кг БИС ОЗУ БИС ПЗУ 1,5 134РУ6 556РТ4 1,5 К565РУ2 К573РФ1, К573РФ2, К556РТ5 Число каналов ввода-вы- — Последовательного обмена — 1 вода Пульт управления Параллельного обмена — 2 Есть ввод (шестнадцатеричный) Пульт: габаритные размеры, — 237X 160X40 мм масса, кг Индикация информации — 0,8 Однострочный дисплей Параметр МКП-1 ПК 1024-3 Разрядность шины дан- ных Разрядность шины адреса Максимальное число пор- тов ввода-вывода Число групп команд Система прерываний 8 16 256 78 Приоритетная векторная, вось- 8 16 256 78 Тип процессора Время выполнения команд, мкс миуровневая КР580ИК80А 8 КР580ИК80 8 189
Продолжение табл. 34 Параметр МК-01 ПК 1024-3 Частота тактирования, МГц Сила тока потребления, А, от источника питания: 2 2 + 5 В Потребляемая мощность 60 Вт Потребляемая мощность 200 Вт + 12 — — —5 В — — Емкость ОЗУ, К байт 0,5—2 1 Емкость ПЗУ, К байт 2 — Интерфейс внешних уст- ройств ИРПС СМ ЭВМ — Габаритные размеры, мм 440Х275Х 170 — Масса, кг 10 — БИС ОЗУ КР188РУ2 — БИС ПЗУ К573РФ1 — Число каналов ввода-вы- — — вода Пульт управления Пульт: Есть ввод (шестнадцатеричный) — габаритные размеры, мм масса, кг Индикация информации — — Однострочный дисплей (8 зна- комест) — чугунную пыль, испарения эмульсий, масел, в условиях повышен- ной температуры и влажности. Высокая помехоустойчивость позволяет применять его в непосредственной близости от работаю- щего электрооборудования большой мощности, повышенной ча- стоты и т. п. ПК 1024-3 потребляет мощность не более 200 Вт, работает при температуре окружающей среды от +5 до +55 °C, относительной влажности до 90 % и естественном охлаждении. Входные (кон- тролируемые) сигналы имеют уровень 24 В при силе тока на- грузки 10 мА. Выходные (управляющие) сигналы имеют уровень 24 В при силе тока нагрузки 0,25 и 2 А. Выходные сигналы пере- менного тока имеют уровень НО В при силе тока 2 А. Контроллер обеспечивает диапазон выдержек времени 0,2— 10 с, энергонезависимую память емкостью 1К байт и временем хранения 2800 ч. Программирование ведется в релейных сим- волах, что не требует высокой квалификации программиста. Программа может вводиться с ленты кассетного магнитофона или с клавиатуры. Предусмотрен вывод программы на МЛ и семи сегментный монодисплей. Структура устройства согласова- ния с объектом представлена четырьмя блоками ввода-вывода, 190
каждый из которых может содержать до восьми модулей ввода- вывода с числом входов и выходов на одном модуле до восьми. Остальные характеристики приведены в табл. 34. Микроконтроллер модели МК-01 Микроконтроллер предназначен для встраивания в радио- измерительные приборы в целях выполнения функции управления внешними устройствами, записи, хранения, выдачи и обработки информации. Микроконтроллер рассчитан на эксплуатацию в пре- делах рабочих температур от —10 до +55 °C. Микроконтроллер представляет собой систему модулей, объ- единенных системной шиной. Модули МК-01 имеют электрическую совместимость с системами отладки МПС типа СО-01—СО-04. При построении системы на базе МК-01 пользователь может подключить к системной шине свои собственные устройства. Микроконтроллер содержит четыре модуля, объединенные системной шиной: центрального процессора, ОЗУ, ПЗУ, ввода- вывода Л КП. Питание МК-01 получает от внешних источников через магистраль питания системной шины. Остальные характеристики МК-01 приведены в табл. 34. Микроконтроллер модели «Электроника МС2702» Микроконтроллер предназначен для использования в автома- тизированных системах контроля и управления технологическими процессами, в системах автоматизации научного эксперимента, в системах управления контрольно-измерительным оборудова- нием. Микроконтроллер рассчитан на эксплуатацию в пределах рабочих температур от +5 до +40 °C и относительной влажности до 95 %. Питание микроконтроллера осуществляется от внешних источников стабилизированных напряжений +5, +12, —5 В. Микроконтроллер имеет систему приоритетных прерываний (8 векторов с возможностью увеличения до 64). Для связи с объ- ектом предусмотрены программируемые каналы ввода-вывода: два последовательных (один на ввод и один на вывод) и 48 парал- лельных, в том числе восемь с гальванической развязкой (по четыре на ввод и на вывод). Имеются также три шестнадцатираз- рядных интервальных таймера. Диалог с оператором осуще- ствляется с помощью программируемого пульта управления и управляющей программы МОНИТОР, которая также предназна- чена для отладки и запуска на выполнение программы пользо- вателя в реальном масштабе времени. В ПЗУ контроллера размещена библиотека подпрограмм об- работки чисел с плавающей запятой (20 подпрограмм), по кото- рым производятся четыре арифметические операции со знаком, вычисляются тригонометрические функции, извлекается квадрат- 191
ный корень, вычисляются факториал, экспоненциальная, пока- зательная и логарифмическая функции. Для контроля работоспособности контроллера в его составе имеются соответствующие тест-программы. Остальные характеристики приведены в табл. 34. Микроконтроллер модели МКП-1 Микроконтроллер МКП-1 выпускается в нескольких модифи- кациях и предназначен для циклового двухпозиционного управле- ния манипуляторами и технологическим оборудованием. Областью наиболее эффективного применения микроконтроллера является управление робототехническими комплексами и автоматическими линиями в условиях серийного и мелкосерийного производства, когда требуются развитое программно-логическое управление, оперативная смена управляющих программ. Микроконтроллер рассчитан на эксплуатацию при температуре от +5 до + 40 °C и относительной влажности 40—80 %. Микроконтроллер в зависимости от исполнения имеет 16— 48 входа и 16—48 выхода. Он выполняет следующие функции, программируемые оператором: управление выходами на исполни- тельные устройства, прием информации, поступающей с датчиков состояния оборудования, формирование выдержек времени, управ- ление счетчиками, обращение к подпрограмме, организация услов- ных и безусловных переходов по программе, связь по ИРПС с ЭВМ верхнего уровня. Микроконтроллер позволяет выполнять также и ряд сервисных функций: редактирование программ, тестовый контроль модулей, контроль рабочих программ (дискрет- ность задания выдержек времени 0,1 с) и коммутирует сигналы для управления исполнительными устройствами. Параметры вы- ходных сигналов: напряжение 20—30 В, сила тока 0,5 А; пара- метры входного сигнала: напряжение 20—30 В, сила тока 13 мА. Микроконтроллер обеспечивает световую индикацию каждого входа и выхода, имеет энергонезависимую память. Остальные характеристики МКП-1 приведены в табл. 34. 2. СИСТЕМА КОНТРОЛЯ ЗНАНИЙ И ОБУЧЕНИЯ ПРИМЕНЕНИЮ МИКРОПРОЦЕССОРА. ПРОГРАММА НА ЯЗЫКЕ БЕЙСИК СП П-02 В условиях массового обучения применению микропроцессоров и микроЭВМ только использование технических средств обучения может на высоком уровне реализовать принципы индивидуаль- ности обучения и контроля и вместе с тем улучшить организацию рабочего времени студентов, позволит преподавателю оперативно получать представительную информацию о ходе учебного про- цесса и, наконец, высвободить время от повторяющейся, часто 192
шаблонной работы по контролю знаний. Вполне естественно для целей обучения и контроля использовать средства вычислительной техники. Ниже приведена программа контроля знаний, написанная на языке БЕЙСИК, работающая под управлением БЕЙСИК-интер- претатора (вариант ЗА) на комплексе СПП-02, в состав которого входят микроЭВМ «Электроника ДЗ-28», дисплей и печатающее устройство [18]. Описываемую программу можно использовать для контроля знаний практически по любому учебному курсу. В программе можно выделить три блока: блок загрузки вопросов с МЛ; блок вывода вопросов с вариантами ответов; блок контроля знаний в режиме диалога. Программа работает в трех режимах. Режим /. Контроль знаний с выдачей оценки — числа пра- вильных ответов на пять предложенных вопросов. Режим 2, Контроль знаний с зачетом, когда вопросы выдаются до получения трех правильных (зачет) или трех неправильных (не зачет) ответов. В режимах 1, 2 по окончании опроса каждого студента на пе- чать выдаются его фамилия, результат, номера вопросов и от- ветов. Режим 3. Самоконтроль знаний студента. В этом режиме сту- денту предлагается пять вопросов, на каждый можно отвечать 2 раза. После двух неправильных ответов микроЭВМ выдает правильный ответ и переходит к следующему вопросу. Вопросы во всех трех режимах выбираются случайно, однако таким обра- зом, чтобы одному студенту дважды не был задан один и тот же вопрос. Блок вывода вопросов с вариантами ответов и указанием правильного ответа включается в работу в спорных ситуациях. Набор вопросов для контроля знаний записывается на МЛ от- дельно в виде фрагмента программы. Его строки нумеруются, начиная с номера 150. Кроме того, в строке с номером 140 пере- менным № 1 (номер первого вопроса), № 2 (номер последнего вопроса), № 3 (шаг вопросов), № 4 (признак наличия подсказки) должны присваиваться значения. Строки должны заканчиваться оператором RETURN. Строки с вопросами должны содержать операторы на языке БЕЙСИК, которые выводят на экран дис- плея вопросы и варианты ответов и присваивают переменной 0 — номер правильного ответа. Подсказка к вопросу, если она есть (в этом случае значение переменной № 4 равно единице), должна для каждого вопроса иметь номер строки, на единицу меньший номера строки следующего вопроса. Вопросы и ответы должны состоять только из заглавных букв русского и латинского алфавитов, цифр и знаков препина- ния и математических операций. Это ограничение связано только с применением дисплея 15ИЭ 200Х 140-017. 7 В. Г. Майоров 193
Рис. 89. Алгоритм работы программы контроля зна- ний Рассмотрим работу программы (рис. 89) и опишем инструкцию по работе с ней. Перед запуском программы в память микроЭВМ должен быть загружен БЕЙСИК-интерпретатор. После загрузки описываемой программы командой RUN она выводится в режим загрузки вопросов с МЛ и выдает на дисплей указание «По- ставьте кассету с вопросами». В ответ оператор устанавливает кассету и нажимает клавишу «ПС». Желательно, чтобы на кассете, кроме файла с вопросами, не было записано других программ. МикроЭВМ после считывания файла выводит на дисплей его за- головок и вопрос «Прочитан требуемый файл?». Если да, то сле- дует нажимать клавишу «ПС»; если нет, — любую цифру и кла- вишу «ПС». Если загружен нужный файл, программа обращается к строке 140 и затем выводит на экран вопрос «Используется часть вопросов ?». Если требуются все вопросы, то следует нажать клавишу «ПС»; если только часть вопросов, — любую цифру и клавишу «ПС». МикроЭВМ далее задает вопрос «Диапазон во- просов?», в ответ на который оператор должен ввести два числа — номера первого и последнего используемого вопросов. На этом заканчивает работать блок загрузки с МЛ, программа входит в точку смены режимов и выдает на дисплей: «Режим?». На этот вопрос возможны следующие ответы: 0, 1,2, 3, 4, 5. Режим 0 — останов программы и выход в интерпретатор. Режим 1 — контроль знаний с оценкой. На дисплей выводится запрос «Введите свою фамилию, нажмите «ПС». После выполне- ния запрошенных действий на экран выводится первый вопрос, варианты ответов на него и загружается номер правильного от- 194
® г2б---1----- Счетчик непра- вильных ответов на вопрос РЗ=РЗ+1 вета. Номер ответа вводится с клавиатуры дисплея. После этого на экран будет выведено соответственно слово «Правильно» или «Неправильно». Таким образом, студенту задаются пять вопросов, выбирае- мых из заданного множества вопросов случайным образом. Число правильных и неправильных ответов подсчитывается, и затем выводится оценка, равная числу правильных ответов. Далее микроЭВМ выводит на печатающее устройство фамилию, оценку, номера заданных вопросов и номера указанных студентом от- ветов. Правильные ответы помечаются знаком «+», неправиль- ные — знаком «—». 7* 195
Если фамилию не вводить, а сразу нажать клавишу «ПС» (ввод пустой строки), то программа выйдет в точку смены ре- жимов. Режим 2 — контроль знаний с зачетом. В этом режиме вместо оценки на дисплей выводится «Зачет» и «Незачет». Режим 3 — самоконтроль знаний студента. В этом режиме при неправильном ответе на дисплей выводится подсказка, если она предусмотрена в массиве вопросов, и дается возможность исправления ответа. Если ответ снова неверный, программа выводит на дисплей номер правильного ответа и переходит к сле- дующему вопросу. В этом режиме оценка не ставится. Назначение этого режима — повторить материал, проверить свои знания. Режим 4 — печать вопросов. Предназначен для вывода части или всех вопросов на печать. Режим начинается с вопроса «Вывод на дисплей или на печать?». Если ввести 0 и нажать клавишу «ПС», вопросы выводятся на дисплей; если ввести 1 и нажать клавишу «ПС», вопросы выводятся на печатающее устройство. Затем про- грамма запрашивает номер вопроса и, получив его, выводит текст вопроса на выбранное устройство. Далее цикл повторяется. Если задать номер вопроса «999», то выводятся все вопросы, если «О» — то происходит выход в точку смены режима. Режим 5 — загрузка вопросов с МЛ (рассмотрен при описании начального запуска программы) используется для смены вопро- сов. Листинг описанной программы и листинг блока вопросов (сокращенный) по курсу «Применение микропроцессора КР580ИК80» приведены в прил. 8. 3. КОМПЛЕКС НА БАЗЕ МИКРОКОНТРОЛЛЕРА МС2702 И ПЕЧАТАЮЩЕГО УСТРОЙСТВА УВВПЧ-30-004 В настоящее время у большинства специалистов, начинающих применять МПС или микроконтроллеры, возникает задача: каким образом документировать результаты работы МПС, т. е. получить «твердую копию». Дело в том, что многие серийные микрокон- троллеры не имеют стандартных интерфейсов для сопряжения с печатающим устройством, например интерфейсов ИРПР или ИРПС. Соответственно отсутствуют и драйверы — программные средства, выполняющие операции по выводу информации. Ниже описан вычислительный комплекс на базе микрокон- троллера МС2702 и печатающего устройства УВВПЧ-30-004. Комплекс, с одной стороны, может служить основой для про- ведения целого ряда лабораторных работ по исследованию работы интерфейса ИРПР и режимов работы печатающего устройства, а с другой имеет и самостоятельное значение как простейшее вычислительное и регистрирующее средство. Для описываемого комплекса разработаны следующие систем- ные программы: программа инициализации ИРПР; 196
программа выдачи байта в коде КОИ-7 из МС2702 в УВВПЧ-30-004; программа печати байта в шестнадцатеричном коде; программа-драйвер; программа и методика формирования изображения в режиме растровой печати; программа и методика формирования изображения в режиме столбцовой печати; программа и методика реализации графического режима УВВПЧ-30-004; программа распечатки кодовых наборов обмена информацией. В заключении этого раздела приведены программы, иллю- стрирующие возможности комплекса как вычислительного уст- ройства. Организация обмена информацией между микроконтроллером и печатающим устройством Печатающее устройство (ПУ) управляется от микроконтрол- лера МС2702 по интерфейсу ИРПР. Микроконтроллер является источником информации, а ПУ — приемником информации. Еди- ницей обмена данными для интерфейса является байт. В табл. 35 перечислены сигналы интерфейса ИРПР. Передача данных от микроконтроллера к ПУ сопровождается обменом управляющих сигналов, важнейшими из которых яв- ляются: ЗП — запрос приемника. Логическая единица на линии ЗП означает, что приемник запрашивает новую информацию от ис- точника. Логический нуль означает, что приемник не готов к при- ему нового символа. Сигнал ЗП поступает от ПУ к микрокон- троллеру; Таблица 35 Сигналы интерфейса ИРПР Обозначение сигнала Название сигнала Обозначение сигнала Название сигнала русское между- народное русское между- народное Д0-Д7 КРО ЗП СТР ГИ(ГП) DO—D7 DP0 АС SC SO(AO) Данные Контрольный разряд млад- шего байта Запрос Строб Готовность источника (приемника) СИ1—СИ8 СП1—СП8 Д8-Д15 КР1 э ОВ SI—S8 Al—А8 D8—D15 DPI S Z Состояние Состояние Данные Контрольный разряд стар- шего байта Экран Общий вывод 197
ги Рис. 90. Временная диаграмма работы ИРПР СТР — строб источни- ка. Логическая единица на линии СТР означает, СТР Д1-Д7 (Д1-Д16) Значения не должны меняться СИ1 - СИ8 зНачения СП1-СП8 недолжны ... меняться что на линии данных ИРПР подан от источни- ка байт информации; при этом ЗП = 1. Временные диаграммы работы ИРПР приведены на рис. 90. Рассмотрим передачу байта по интерфейсу ИРПР в динамике. ПУ делает запрос на получение данных в микроконтроллер, который в ответ выставляет на линиях ДО—Д7 байт данных и сопровождает их сигналом СТР. По этому сигналу ПУ принимает байт данных и выполняет его обработку (печать), на время кото- рой ПУ устанавливает ЗП = 0. Микроконтроллер, определив, что сигнал ЗП = 0, сбрасывает сигнал СТР. После этого цикл обмена завершается. Кроме основных управляющих сигналов в состав сигналов интерфейса входят сигналы: ГИ, ГП (готовность источника и готовность приемника), свидетельствующие о работоспособности устройств, участвующих в обмене информацией; КРО, КР1 — контрольные разряды (контроль на нечетность); СП1—СП8 — состояние пассивного устройства; СИ1—СИ8 — состояние актив- ного устройства. При физической реализации интерфейса следует учитывать, что состоянию логической единицы соответствует низкий уровень сигнала, состоянию логического нуля — высокий уровень сиг- нала. Схема соединений микроконтроллера и печатающего уст- ройства приведена на рис. 91. Интерфейс ИРПР мо- жет быть реализован как аппаратными, так и про- граммными средствами. В микроконтроллере МС2702 отсутствуют необходимые аппаратные средства, и поэтому временную диа- грамму работы ИРПР Рис. 91. Схема соединения ми- кроконтроллера и печатающего устройства ХСЗ Микроконтроллер ИРПР ПУ С25 1А0 ДО ДО 519 825 1А1 Д1 Д1 513 С23 1А2 Д2 Д2 512 823 1АЗ дз ДЗ 511 С21 1А9 Д9 510 821 1А5 Д5 Д5 58 С19 1А6 Д6 до 59 819 1А7 Д7 Д7 57 83 3 СТР СТР 55 87 ЗП ЗП 59 * * Соединить через резистор /Л с шиной +58 198
(см. рис. 90) будем формировать специальной программой — программой обмена. Программа обмена в этом случае должна быть составной частью системного программного обеспечения микроконтроллера МС2702. Перед началом обмена следует провести инициализацию пор- тов вывода микроконтроллера, через которые будет осуществляться обмен по интерфейсу ИРПР. Для этих целей используется под- программа, приведенная в прил. 1 (программа 61). Операцию выдачи символа на печать и выдачу байта в шестнадцатеричном коде выполняют подпрограммы, приведенные в прил. 1 (про- граммы 62, 63 соответственно). Перед обращением к подпрограмме в аккумулятор (А) микропроцессора должен быть помещен вы- водимый символ или байт. Адреса, принятые в программе: F6 — адрес порта адаптера (КР580ВВ55), на 7-й разряд кото- рого приходит сигнал ЗП; F4 — адрес порта адаптера, через который происходит связь с ШД печатающего устройства; F7 — адрес регистра управляющего слова адаптера; 04, 05 — управляющие слова установки и сброса разрядов порта С адаптера. Применение микроконтроллера для управления ПУ УВВПЧ-30-004 является современным ПУ с широкими воз- можностями, которые обеспечиваются встроенным микропроцес- сором КР580ИК80. УВВПЧ-30-004 обеспечивает получение графического изобра- жения (с помощью графического режима, столбцовой печати, растровой печати). Легко изменяются наборы символов (КОИ-7НО, КОИ-7Н1, КОИ-7Н2, КОИ-8, ШП-7Н0, ШП-8), а также формат печати. Однако для решения конкретных задач требуется составлять специальные программы, оперирующие набором команд и управ- ляющих слов УВВПЧ-30-004. Например, для растровой печати необходим цикл, так как команда РАСТР выводит на печать только одну строку точек. Очевидно, что можно выделить стандартные процедуры обслу- живания различных режимов печати и составить библиотеку подпрограмм, позволяющую упростить управление печатью. Опи- сываемую ниже библиотеку подпрограмм можно использовать для исследования режимов ПУ. Режим растровой печати ПУ. Для обслуживания режима растровой печати используется подпрограмма PER. Пусковой адрес: 7200Н. В результате работы подпрограммы PER на печать выводится фрагмент растра заданного размера. Текст и коды подпрограммы PER приведены в прил. 1 (программа 64). 199
239Е 00 71 24 10 06 Рис. 92. Изображение куба и содер- жимое служебных ячеек ОЗУ Рис. 93. Значение параметров печати в графическом режиме ПУ Перед запуском программы PER следует загрузить следую- щие служебные ячейки ОЗУ: 239ЕН, 239F Н — ячейка хранения адреса начала таблицы кодов изображе- ния; 23АиН — число строк в изображении; 23А1Н — число пустых точек (Х8) от начала листа до левой границы; 23А2Н — число байтов в строке изображения. Для проверки работоспособности подпрограммы PER (начиная с адреса 7100Н) служит таблица кодов изображения куба. На рис. 92 приведена распечатка изображения куба, выполненная с помощью подпрограммы PER. Ниже рисунка приведено содер- жимое служебных ячеек ОЗУ (исходные данные). Графический режим. Программа PRINT (см. прил. 1, про- грамму 65) позволяет строить прямые линии. Для каждой линии вводится команда LIN, состоящая из пяти байтов: 1) хэл, г/эл; 2) Ах; 3) Аг/; 4) режим печати (печать стоя — 5Е, печать лежа — 5F, печать столбца — 4F); 5) код печатаемого символа в КОИ-7. Назначение хэл, г/эл, Ах, Аг/ приведено на рис. 93. Линия закан- чивается при достижении хотя бы одного из условий: Ах = О, Аг/ = 0. С помощью программы PRINT можно также перемещать каретку, не печатая символ. Последовательность команд LIN1, LIN2, .... LINN заносится в ОЗУ, начиная с адреса 2300Н. Число команд (N) заносится в ячейку AN : 22FFH. Пусковым адресом программы PRINT является 7536Н. Для контроля программы PRINT показан при- мер кодирования и распечатки изображения треугольника (рис. 94). Режим «Столбцовая печать». Программа 66, приведенная в прил. 1, обслуживающая этот режим, имеет несколько пусковых адресов: STLP — 757СН PSTR — 7570Н POUI — 75D9H 200
\-----------------7 22FF 03 \ / 2300 11 40 40 4F \ / 2304 02 1F 40 40 \ / 2300 4F 02 F0 00 \ / 230С 00 4F 02 Рис. 94. Пример кодирования и распечатка изображения треугольника Программа STLP печатает изображение, коды которого на- ходятся в таблице по адресу, заносимому пользователем в регист- ровую пару Н, L микропроцессора. Координата X начала печати изображения заносится в регистровую пару D, Е микропроцес- сора. Параметры изображения заносятся в служебные ячейки ОЗУ: в ячейку NSTL (адрес 23А4Н) — число столбцов в строке изображения; в ячейку NSTR (адрес 23А5Н) — число строк в изображении (по семь точек в строке). Программа PSTR является демонстрационной. Она выводит на печать изображение транзистора. Исходные данные заносятся в программу автоматически при запуске программы. Таблица кодов изображения транзистора расположена начиная с адреса 7300Н. Таблица кодов программы приведена в прил. 1 (про- грамма 67). Программа POUT аналогична программе STLP, за исключе- нием того, что вместо регистровых пар HL и DE для задания пара- метров выделяются две служебные ячейки: AXN (адрес 23А0Н), в которой записывается координата X начала печати изображения; ATSN (адрес 23А2Н), в которой записывается адрес начала таблицы кодов изображения. Печать кодовых таблиц обмена информацией Программа РК распечатки кодовых таблиц (см. прил. 1, программу 68) является демонстрационной, делает распечатки таблиц кодов, с которыми может работать ПУ. С помощью про- граммы РК можно получить таблицы кодовых наборов: КОИ-7НО, КОИ-7Н1; КОИ-7Н2, КОИ-8, ШП-8, ШП-7Н0. В частности, приведенные в гл. 1 таблицы кодов КОИ-7 и КОИ-8 могут быть получены с помощью этой программы. Программа РК запускается с адреса 749АН и имеет следующие служебные ячейки: 23A3H — число пробелов между столбцами печатаемой таб- лицы; 23А4Н — номер набора: 7 — КОИ-7НО, 1, 2; 8 — КОИ-8, ШП-8; 9 — набор пользователя ШП-7Н0; 23А5Н — записывается код признака 02Н для кодов КОИ-7НО, 1; КОИ-8, набора пользователя и ООН—для КОИ-7Н2; 201
23В0Н — специальная ячейка, определяющая начало управ- ляющей последовательности для ПУ при смене печатаемого кодового набора; 23А9Н — число (/) байт управляющей последовательности. Перед вводом начальных условий в служебные ячейки необ- ходимо привести ПУ в исходное состояние. Ниже приведены управляющие последовательности для переходов между наборами кодов: КОИ-7Н2 -> КОИ-7Н2: (ПУС), (АР2), (МОДШ), (тип шр), при этом I — 0,4; КОИ-7Н2 -> КОИ-7НО: (ВХ), (АР2), (МОДШ), (тип шрифта); I — 0,4; КОИ-ТН2-> КОИ-7Н1: (ВЫХ), (АР2), (МОДШ), (тип шрифта); I — 0,4; КОИ-7Н2 -> КОИ-8: (СУЗ), (АР2), (МОДШ), (тип шрифта); I = 0,4; КОИ-7Н2 ШП-7НО: (СУЗ), (ВЫХ), (АР2), (МОДШ), (тип шрифта); I = 0,5. Программы-драйверы Большая часть описанных программ использует подпрограм- мы-драйверы, позволяющие вводить в УВВПЧ последователь- ность кодов команд и символов. Текст подпрограмм-драйверов приведен в прил. 1 (программа 69). Подпрограмма PDRV (пусковой адрес 74А0Н) позволяет передавать в ПУ коды, записанные в ОЗУ начиная с адреса 23В0Н. Подпрограмма использует служебную ячейку I (адрес 23А9Н), в которой задается длина передаваемой последовательности. Подпрограмма PDRV1 (пусковой адрес 74АЗН) позволяет передавать в ПУ коды, которые расположены в ОЗУ по адресу, задаваемому регистровой парой Н, L микропроцессора. Под- программа использует ячейку I (адрес 23А9Н), в которой задается длина передаваемой последовательности. Программа DRVM (пусковой адрес 74В1Н) осуществляет р-кратное использование подпрограммы PDRV, где р — служеб- ная ячейка (адрес 23А8Н), в которой задается число повторений передаваемой последовательности. Программа DRV (пусковой адрес 74BDH) один раз выполняет подпрограмму PDRV, и затем следует останов. Программа DRVM1 (пусковой адрес 74С1Н) осуществляет выполнение подпрограммы PDRV1, и затем следует останов. Программа DRVM1 (пусковой адрес 74С8Н) осуществляет р-кратное повторение подпрограммы PDRV1, и затем следует останов. 202
Программы, иллюстрирующие графические возможности комплекса Чтобы иметь возможность строить графические изображения с помощью программы «Калькулятор», необходимо в дополнение к имеющимся программным средствам комплекса «МС2702— УВВПЧ-30-004» записать в ПЗУ (начиная с адреса 6500Н) вспо- могательную программу «ПЕЧТ» (см. прил. 1, программу 70). В систему команд «Калькулятора» при этом добавляется соответ- ствующая программе «ПЕЧТ» команда ПЕЧТ (код 7F). При выпол- нении команды ПЕЧТ микроконтроллер, управляя принтером, строит точку с координатами Хпеч, ^печ, где Хпеч равно целой части числа, хранящегося в регистре С калькулятора; Упеч равно целой части числа, хранящегося в регистре D «Калькулятора». В подпрограмме «ПЕЧТ» используется подпрограмма «OUTS». Следует помнить, что если в систему команд «Калькулятора» входит команда ПЕЧТ, то перед работой «Калькулятора» не- обходимо произвести инициализацию ИРПР МС2702 : # OF7 8А CR # 0 F7 04 СК4Ф- В качестве единицы измерения параметров графических изображений (Хпеч, Упеч, ^о, Кит. п.) принимается минимальное перемещение каретки или бумагоопорного вала. Ниже приведен ряд примеров построения геометрических фигур по их формулам. Пример 119. Построить окружность заданного радиуса (R = 40Н), центр которой имеет координату Хо = АСН. Решение. Пусть окружность задается параметрическими формулами: X — R cos a, Y — R sin а, где R — радиус; а — угол (а = 0~-2л). Чтобы обеспечить отсутствие разрывов в линии, принимаем: Да = 1/R. Пусть R хранится в РО, Да — в регистре Р4, текущее значение а — в регистре Р2, конечное значение ак — в Р1, координата центра окружности Хо — в Р6. Считаем, что центр окружности является центром системы декартовых координат. Составим программу (начальный адрес 2300Н): НПО Fl/Х П4 Fn 2 X П4 + Ш ИП4 П2 НПО ИП2 F COS X ИП6 + ПС КИПС ИПО ИП2 F SIN X ПД КИПД ПЕЧТ ИП4 ИП2 + П2 ИП1 — FX < 0 ОВ 23 С/П (HLT) Коды программы (см. прил. 1, программу 71) вводятся, начиная с адреса 2300Н с помощью команды S монитора контроллера. Затем исходные данные с помощью команды S загружаются в регистры: R = 0Е0040 РО (адрес 21 ООН), Хо 0Е 00 А0-> Р6 (адрес 2112Н). После этого командой монитора Е в регистры Н, L загружаются начальный адрес программы (2300Н) и производится ее запуск: #G 503D CR На УВВПЧ строится окружность (рис. 95). Меняя значения R и Хо, можно с помощью описанной программы получать окружности различного радиуса и перемещать их центр по координате X. 203
2100 0Е 00 40 2112 0Г 00 fl0 Рис. 95. Изображение окружности 2100 0Е 00 50 2112 0Е 00 Д9 Рис. 96. Изображение «восьмилепестко- вой розы» Пример 120. Построить восьмилепестковую розу с центром в точке Хо = 49Н, R = 50Н. Решение. Данная геометрическая фигура описывается следующими форму- лами: Y = R cos 4ср sin ср, X — a cos 4ср cos <р, ср = 0ч-8л, Дер = 1/(4/?). Так как sin X вычисляется в «Калькуляторе» от 0 до 2л, то составляется вспомогательная подпрограмма построения 1/4 части фигуры и программа, из- меняющая знаки координат X и Y и вызывающая вспомогательную подпрограм- му 4 раза. Считаем, что центр декартовых координат находится в точке Хо. Рас- пределение регистров: R -► РО, Дер -> Р4, ср -> Р2, конечное значение срк —► Р1; Хо -> Р6; Р7, Р5, Р8 — вспомогательные. Текст вспомогательной подпрограммы (ее начальный адрес — 2300Н): ИПО Fl/Х 4-Т-П4 Рл2-^ИП4 + П1 ИП4 П2 ИП2 F COS ИП2 4 X F COS П7 X ИПО X ИП5 X ИП6 + ПС КИПС ИП2 F SIN ИП7 X ИПО ИП8 ПР КИПР ПЕЧТ ИП4 ИП2 + П2 ИП1 — FX < 0 0D 53 В/О Текст главной программы (начальный адрес 2340Н): 1 П8 П5 ПП 00 23 ИП8 | — | П8 ПП 00 23 ИП5 |-| П5 ПП 00 23 ИП8 | — | П8 ПП 00 23 С/П (HLT) Коды вспомогательной подпрограммы и главной программы (см. прил. 1, программу 72) вводятся в контроллер командой S монитора. После этого вво- дятся исходные данные: R = 0Е 00 50 -> Р0, Хо = 0Е 00 А9 Р6. Командой Е контроллера в регистрах Н, L устанавливается начальный ад- рес главной программы (2340Н). Затем запускается программа #G 503D CR, и УВВПЧ строит геометрическую фигуру (рис. 96). 204
Рис. 98. Комбинационная геометри- ческая фигура 2100 0Е 00 40 2112 0Е 00 fl0 Рис. 97. Изображение астроиды Данная программа позволяет строить «восьмилепестковую розу» различного радиуса R (при этом сдвигать центр фигуры Хо по координате X). Пример 121. Построить астроиду, радиус R = 20Н, координаты центоа Хо = АОН. Решение. Астроида строится по следующим формулам: X = R cos3 ср, Y = R sin3 <р, где ср — 0ч-2л, шаг Дер = 1/R. Распределение регистров: R -► РО, Хо -► Р6, Дер Р4, ср —> Р2, ср конеч- ный -> Р1. Пусть центр декартовой системы координат лежит в точке Хо. Текст про- граммы: НПО Fl/Х П4 Fit 2 X П4 + П1 ИП4 П2 3 ИП2 F COS FXy ИПО X ИП6 + ПС КИПС 3 ИП2 F SIN FXy ИПО X ПО КИПО ПЕЧТ ИП4 ИП2 + + П2 ИП1 — FX < О ОВ 23 С/П (HLT) Коды программы (см. прил. 1, программу 73) вводятся в контроллер коман- дой S с начального адреса 2300Н. Исходные данные заносятся в регистры коман- дой S : R = ОЕ 00 40 РО (адрес 21 ООН), Хо = 0Е 00 АО -> Р6 (адрес 2112Н). Командой Е монитора устанавли- вается начальный адрес программы: Н, L — 2300Н. Производится за- пуск программы #G 503D CR, и УВВПЧ печатает изображение астро- иды (рис. 97). Используя поочередно программы построения окружности и астроиды, изменяя значения R, можно постро- ить геометрическую фигуру, показан- ную на рис. 98. Рис. 99. Изображение геометрических фигур 2100 0Е 00 40 2112 0Е 00 Р0 205
Пример 122. Построить четырехлепестковые розы, вписанные одна в другую (радиус изменяется от максимального до нуля с шагом 5). Решение. Четырехлепестковая роза может быть построена по формулам X = R cos3 ф, Y = sin3 ф, где ф = 0ч-2л, шаг Дф = 1/(2R). Программа в кодах (см. прил. 1, программу 74) загружается в контроллер с адреса 2300Н. Данные вводятся в регистры: Rmax — ОЕ 00 40 РО (адрес 2100Н), Хо = 0Е 00 АО-> Р6 (адрес 2112Н). Командой Е устанавливается Н, L = 233АН. Пуск программы #G 503D CR Получаемое изображение показано на рис. 99.
ПРИЛОЖЕ НИЕ 1 1. ПРИМЕРЫ ПРОГРАММ ДЛЯ МИКРОПРОЦЕССОРА КР580ИК80* ; ВОСЬМИ ПЕРЕМЕННЫХ €000 3A0000 EBF: LHLD FAN 0003 DB00 IN EJNB €005 4F мои C,A 0006 0600 MUI B,00H 0008 09 DAD В 0009 7Е мои A/M 000А D300 OUT AUS1 NLT ; ПРОГРАММА МОДЕЛИРОВАНИЯ СИСТЕМЫ ВОСЬМИ ФАЛ EBF 0000 FAN жжжж EINB жжжж AUS1 жжжж Программа 1 ; ПРОГРАММНАЯ МОДЕЛЬ ПРЕОБРАЗОВАТЕЛЯ КОДОВ ; €000 310000 PMPCs LXI Н/ATAB i 0003 78 мои A/В i 0004 37 STC i ПЕРЕНОС 0005 3F CMC i C « 0 0006 17 RAL i <A> = 2(B> 0007 85 ADD L > 0008 6F мои L/A i 0009 3E08 MUI Ал 00H i 000B 8C ADC H > 000C 5E мои E/M > 000D 23 INX H i 000E 56 мои D>M i 000F C9 RET i РМРС 0000 АТАВ жжжж Программа 2 * Приведенные программы иллюстрируют материал, описанный в тексте. 207
\ ПОДПРОГРАММА MODI МОДЕЛИРОВАНИЯ СИСТЕМЫ ФАЛ ; х ЗАНЕСТИ В D: И- B'E's АДРЕС ТАБЛИЦЫ - В H,L > РЕЗУЛЬТАТ - В В/С В'Е 't АДРЕС ТАБЛИЦЫ - В H/L 6000 D5 MODT: PUSH D СОХРАНИТЬ РЕГИСТРЫ 0001 Е5 PUSH H : В СТЕКЕ 0002 D5 PUSH D j 6003 14 INR D i 0004 CD1900 CALL MUL I ВЫЧИСЛИТЬ НОМЕР БИТА (X ж М> 0007 2В ncx H ; 0008 79 MOU A/C ; 000? CD2900 CALL FBI j ОПРЕДЕЛИТЬ АДРЕС БАЙТА 000С 46 MOU C/M i 000D 2В DCX H i ЗАНЕСТИ 3 БАЙТА ИЗ ТАБЛИЦЫ В Ь 000Е .46 MOU B/M ; 60 0F 2В DCX H л 0010 56 MOV IbM i 0011 Е1 POP H i 0012 7D MOU A»L i М В 'А' 0013 СПЗ100 CALL UPK ФОРМИРОВАНИЕ ВЫХОДНОГО КОДА В 6016 Е1 POP H ; ВОССТАНОВИТЬ 6017 D1 POP D ; РЕГИСТРЫ 0018 С9 PET 5 ; УМНОЖЕНИЕ 0019 0ЕОО MUL: MUI С» OOH i ^МНОЖИТЬ D*E» 0018 ЗЕОО L1: MUI А.» 0OH ; РЕЗУЛЬТАТ В 'С' 001D БА CMP D ; 081Е С8 PZ ; 00 1F 79 мои A»C ; 0020 83 ADD E J 0021 4F MOU C»A 0082 15 DCR П 0083 С31В00 JMP LI Г НАЧАЛУ ЦИКЛА ’> гоиск АДРЕСА 0026 5F FBI: мои E»A j СЧЕТЧИК А = НАМЕРЗ БИТА 0087 FE8S CPI 08H i ЧИСЛО В СЧЕТЧИКЕ < 8? 0029 F8 LI 1: PM ЕСЛИ ДА» ВОЗВРАТ СОЗА О 7 I NX H i ПРИРАЩЕНИЕ АДРЕСА ТАБЛИЦЫ 0О88 5F MOU Ef A G02C НЕ 08 SB I 08H УМЕНЬШИТЬ СЧЕТЧИ1 НА 8 00 ЗЕ С32980 ..IMP LU 1 НАЧАЛА ЦИКЛн НОРМИРОВАНИЕ ЮДА 0031 F5 iJPk: PUSH PSbl G032 ЗЕ08 MUI A»08H ВЫЧИСЛИТЬ число сдвигов 0034 Ч л SUB E <8 - Е> О© 35 5Г M0‘1 E»H 00 36 Сй4600 М2: JZ Ml i ЕСЛИ СДВИГ ЗАКОНЧЕН 6039 7й MOU Ar D СОЗА 1F PAR 5 СДВИГ D ВПРАВО НА 1 РАЗРЯД Программа 3 208
003В Р03С 003D 57 78 1F мои мои RAR D/A A/B i i i СДВИГ 'В' 00 ЗЕ 47 мои B,A f 003F 79 мои A/C 0040 1F RAR i СДВИГ 'C' 0041 4F мои C/A 0042 1D DCR E i E = E - 1 0043 С33600 JMP М2 i К НАЧАЛУ НИКЛА /0046 F1 МВ POP PSW 004? 215F00 LXI H, ATM i В Я/L ЗАНЕСТИ АДРЕС ТАБЛИЦЫ МАО 60 4 А 1600 MUI D, 00H 004С FE08 CPI 08H i М > 8? 004Е FA5700 JM М3 ; ЕСЛИ НЕТ/ИДТИ К М3 0051 5F мои E/A 0052 19 DAD D > ВЫЧИСЛИТЬ АДРЕС МАСКИ В ТАБЛИЦЕ 0053 7Е мои A,M 0054 А0 ANA В ; ВЫДЕЛИТЬ ЗНАЧАЩИЕ РАЗРЯДЫ В 0055 47 мои В/ A ; ВЫХОДНОМ КОДЕ 0056 С9 RET 0057 5F М3: мои E/A ; ВЫЧИСЛИТЬ АДРЕС МАСКИ 0058 19 DAD D > ВЫЧИСЛИТЬ АДРЕС МАСКИ 0059 7Е мои A/M > ВЫДЕЛИТЬ ЗНАЧАЩИЕ РАЗРЯДЫ 005А А1 ANA C > В ВЫХОДНОМ КОДЕ 805В 4F мои C/A 005С 0600 MUI B.»00H > 'СБРОС' СТАРШЕГО БАЙТА КОДА 005Е С9 PET i 005F FF ATM: DB FF i 0060 01 DB 01 i 0061 03 DB 03 i 0062 07 DB 07 i 0063 0F DB 0F i 0064 1F DB IF i 0065 3F DB 3F i 0066 7F DB 7F i 0067 00 DB 00 i 0068 01 DB 01 i 0069 03 DB 03 ? 006А 07 DB 07 5 006В 0F DB 0F i 0060 1F DB IF 0О6П 3F DB 3F 006Е 7F DB 7F i 006F FF DB FF MODT MUL UPK LI PEI Lil М2 ATM М3 0000 001? 0031 0018 0026 00?? 0036 0046 005Г 805? Программа 3 (продолжение) 8 В. Г. Майоров 209
i ПРОГРАММНАЯ МОДЕЛЬ СИСТЕМЫ ФАЛ» ЗАДАННЫХ В СНДФ ; i ВЫЧИСЛЕНИЕ СИСТЕМЫ ФАЛ < В СНДФ ) 0000 BE SND: CMP М 0001 CA0C00 JZ Ml 0004 23 INX Н 0005 13 INX D 0006 0D DCR C 0007 C20000 JNZ SND 000A AF XRA A 000В C9 RET ПОИСК ТЕРМА В ТАБЛИЦЕ ВХОДНЫХ НАБОРОВ ЕСЛИ ТЕРМ НАЙДЕН ПЕРЕХОД НА СЛЕДУЮЩУЮ СТРОКУ ТАБЛИЦЫ ТАБЛИЦА ПРОСМОТРЕНА ЦЕЛИКОМ? ЕСЛИ НЕТ 0 В 'А' ВОЗВРАТ O00C 1A Ml: LDAX D 000D C9 RET ЕСЛИ ТЕРМ НАЙДЕН/ ЗАНЕСТИ В 'А' ВЫХОДНОЙ НАБОР ИЗ ТАБЛИЦЫ ВЫХОДНЫХ ЗНАЧЕНИЙ SND 0000 Ml 000С Программа 4 ; ПРОГРАММНАЯ МОДЕЛЬ ПЛМ НА 8 ВХОДОВ И 8 ВЫХОДОВ 0000 47 PMPLM! мои Вл A > ЗАПОМНИТЬ АРГУМЕНТ В 'В' 0001 Об 00 MUI C»00H . ПОДГОТОВИТЬ РЕГИСТР 'С' • ДЛЯ РЕЗУЛЬТАТА 0003 тс NEXT: мои A»B 0004 йб ANA M '; ВЫДЕЛИТЬ ЗНАЧИМЫЕ ПЕРЕМЕННЫЕ йй05 23 INX H 0006 йЕ XRA M > В РЕЗУЛЬТАТЕ НУЛЬ,ЕСЛИ ТЕРМ =1 0007 23 INX H 0008 С20Е00 JNZ CHEtt л ПЕРЕХОД, ЕСЛИ ТЕРМ = 0 G008 79 мои A»C 00ОС 86 ORA' M ; ДОБАВЛЕНИЕ ЕДИНИЦ В ФУНКЦИИ F, 000 D 4F мои СлА л ВКЛЮЧАЮЩИЕ ВЫЧИСЛИТЕЛЬНЫЙ ТЕРМ G00E 23 СНЕСИ INX H 000F 97 SUB A л ОБНУЛЕНИЕ 'А' 0010 86 ADD M л ПРОВЕРКА ОЧЕРЕДНОГО СЛОВА НА НУЛЬ 0'011 С20300 JNZ NEXT Л Ил ЕСЛИ НУЛЬл КОНЕЦ 0014 79 мои АлС С015 09 RET FMPLM 0000 NEXT 0003 СМЕСЬ ОООЕ Прогреми 5 ; ПРОГРАММНАЯ МОДЕЛЬ К155ЛР1 СО0О 5А LF1: мои E»D 0001 7 В мои A»E 0002 0F RFC 0003 нл AHA E 0004 5F мои Ел A 0005 OF RRC 0006 0F RPC С007 БЗ ORA E С 008 2F СМА 0809 5F MOU E»n С.00Й 09 RET I.R1 0000 Программа 6 210
i ПРОГРАММНАЯ МОДЕЛЬ К155ИДЗ 0000 310100 ID3: LXI Нл0001Н ** —— — —* —— — — ——— — • i 0003 С30СО0 JMP L2 i 0006 78 L1: M0U Ал В : 0007 FE00 CPI 00Н ; 0009 С8 RZ : 000й 05 вс₽ В 0008 29 DAD Н Л СДВИГ НА 1 РАЗРЯД ВЛЕВО 000С 7D L2s MOU нл1_ &00D 2F С МА 000Е 330000 STA DSH > СДВИГ НА 1 РАЗРЯД ВЛЕВО 0011 7С мои АлН 6012 2F С МА ; £013 320000 STA DSH+1 0016 С30600 JMP L1 • I £ 3 0000 1.2 000С L1 0006 DSH Программа 7 iПРОГРАММНАЯ МОДЕЛЬ СЕЛЕКТОРА-МУЛЬТИПЛЕКСОРА К155КП7 ; С 000 78 PMSM: мои АлЕ > ПРОВВРКА ПРИЗНАКА 'РАЗРЕШЕНИЕ' 0001 Е610 AHI 10Н 1 8003 С21700 JHZ РР2 i ПЕРЕХОД К УСТАНОВКЕ У=0 И ВОЗВРАТ 6006 78 мои АлЕ 0007 0F RRC 6008 5F мои Ел А 0009 Е607 AHI 07Н : 0008 47 мои Вл А i РЕГИСТР В СЧЕТЧИК НОМЕРА КАНАЛА 000С 7А PP1S мои АлЛ i В ЦИКЛЕ УМЕНЬШЕНИЕ НА Ч' НОМЕРА 000D 0F RRC i КАНАЛА ПРИ ОДНОВРЕМЕННОЙ ФИКСАЦИИ В 000Е 57 мои Вл А i ТРИГГЕРЕ 'С* ЗНАЧЕНИЯ ВХОДНОГО СИГНАЛА 000F 05 DCR В i СООТВЕТСТВУЮЩЕГО НОМЕРУ КАНАЛА 0010 С20С00 JNZ РР1 i ВЫХОД ИЗ ЦИКЛА ПО НОМЕРУ КАНАЛА = 0 0013 78 мои ЙлЕ i ЗАНЕСЕНИЕ ПРИЗНАКА 'С' 0014 17 RAL ; В РЕГИСТРЕ Е 0015 5F мои Ел А 6016 С9 RET 0017 78 РР2: мои АлЕ » УСТАНОВКА У=0 В РЕГИСТРЕ Е 0018 E67F АН1 7FH ж ПРИ СОХРАНЕНИИ ИСХОДНЫХ УСЛОВИЙ G01A С9 RET PMSM 0000 ₽Р2 0017 FP1 000С Программа 8 8* 211
Г ПОДПРОГРАММА, РЕАЛИЗУЮЩАЯ ЦИКЛОГРАММУ РАБОТЫ ; РОБОТА - МАНИПУЛЯТОРА £000 210000 PMSRM: LXI H,BOS i ЗАГРУЗКА НАЧАЛЬНОГО АДРЕСА i ТАБЛИЦЫ ДАННЫХ 0003 0Е30 MUI C»30H > УСТАНОВКА НАЧАЛЬНЫХ ЗНАЧЕНИЙ i СЧЕТЧИКОВ ТАКТОВ И БАЙТОВ 0005 7Е Ml • мои A, M i ЗАПИСЬ В ПОРТ 1 0006 D300 OUT PORT1 i КОДА УПРАВЛЕНИЯ 0008 23 INX H 0009 7Е мои A, M i ЗАПИСЬ 000А D300 OUT P0RT2 i В ПОРТ 2 000С 23 INX H i 000D 7Е мои A,M 000Е D300 OUT P0RT3 ; ЗАПИСЬ В ПОРТ 3 0010 23 INX H i 0011 7Е MOU A, M 0012 D300 OUT P0RT4 i ЗАПИСЬ В ПОРТ 4 GG14 23 INX H i С015 7Е MOU A, M 0016 D300 OUT P0PT5 } ЗАПИСЬ В ПОРТ 5 0018 23 INX H > АДРЕС СТРОКИ ТАБЛИЦЫ УВЕЛИЧИТЬ НА 1 0019 0D DCR 0 ; СЧЕТЧИК ТАКТОВ УМЕНЬШИТЬ НА 1 001А 08 RZ 001В CD0000 CALL DELAY ; ЗАДЕРЖКА 001Е С3050О JMP Ml ; К НАЧАЛУ ЦИКЛА PMSRM 0000 60S ЖЖЖЖ г.1 0005 РОРТ1 жжжж Р0РТ2 жжжж F0PT3 жжжж F0RT4 жжжж F0RT5 жжжж BELAS' жжжж Программа 9 ; ПОДПРОГРАММА ФОРМИРОВАНИЯ 8 ПОСЛЕДОВАТЕЛЬНОСТЕЙ ; ИМПУЛЬСОВ 0000 7Е PMIs мои A,M i БАЙТ ОПИСАНИЯ 0001 D300 OUT PORT i ВЫВЕСТИ В ПОРТ 0003 CD0000 CALL DELAY ; ЗАДЕРЖКА 0006 23 INX H i ПЕРЕХОД К СЛЕДУЮЩЕМУ БАЙТУ ОПИСАНИЯ 0007 0D DCR C » ЧИСЛО ИНТЕРВАЛОВ (БАЙТОВ ОПИСАНИЯ) ; УМЕНЬШИТЬ НА 1 0008 0008 С20000 С9 JNZ RET PMI i ЕСЛИ ПЕРИОД НЕ ЗАКОНЧЕН j PMI ©ООО PORT жжжж DELAY жжжж Программа 11 212
'i ПОДПРООГРАММА ФОРМИРОВАНИЯ ПОСЛЕДОВАТЕЛЬНОСТИ л ИМПУЛЬСОВ ФОРМИРОВАНИЕ ИМПУЛЬСОВ 0000 210000 IM: LXI НлATAB ; В НлЕ ЗАНЕСТИ АДРЕС ТАБЛИЦЫ ОПИСАНИЯ 0003 110000 LXI D> NT i В ВлЕ ЗАНЕСТИ ЧИСЛО БАЙТ ОПИСАНИЯ 0006 0Е08 L2: MUI Сл08Н ; 8 - В С 0008 7Е мои АлМ л БАЙТ ТАБЛИЦЫ - А - В 0009 47 мои Вл A ; 000А Е601 L1: ANI 01H л ВЫДЕЛИТЬ ОЧЕРЕДНОЙ БИТ 000С D3O0 OUT PORT л ВЫВЕСТИ БИТ В ПОРТ 000Е 78 мои Ал В 000F 1F PAR ; СДВИГ БАЙТА ОПИСАНИЯ 0010 47 мои Вл A : 0011 С5 PUSH В ; 0012 CD0000 CALL DELAY ; ЗАДЕРЖКА 0015 С1 POP В 6016 0D DCR С л С = С - 1 0017 С22300 JNZ L3 л ЕСЛИ БАЙТ НЕ ВЫДАН ПОЛНОСТЬЮ 001А 23 INX Н ; ЕСЛИ БАЙТ ВЫДАНл УВЕЛИЧИТЬ АДРЕС л СТРОКИ ОПИСАНИЯ 0018 1В DCX D i УМЕНЬШИТЬ СЧЕТЧИК БАЙТ НА 1 001 С AF XRA А л ВСЯ ТАБЛИЦА ОПИСАНИЯ 001 D В2 ORA D i ВЫВЕДЕНА В ПОРТ? 001Е ВЗ ORA Е 001F С2О6О0 JNZ L2 ; ЕСЛИ НЕТ 0022 С9 RET л ВОЗВРАТ 0023 34 L3: I NR М Л ЗАДЕРЖКА 0024 35 DCR М л НА 49 ТАКТОВ 0025 7F мои Ал А ; 0026 В7 ORA А 0027 С30А00 JMP L1 л К МЕТКЕ L1 IM АТАВ NT L2 L1 PORT DELAY L3 0090 <<<< 0006 000Й «ж»* ♦жж* G023 Программа 10 \ ПОДПРОГРАММА ВЫДАЧИ БАЙТА ИЗ АНмМиЛЯТОРА > НА МАГНИТОФОН ( АДРЕС ЗОН ) 0000 С5 BWRT: PUSH В Л 0001 F5 PUSH PSW л ЗАПОМИНАНИЕ ВЫЗЫВАЕМОГО БнйТй Б CTEFE 0002 AF XRA A ; ЗАГРУЗКА НУЛЯ В АККУММЛЯТОР 0003 D330 OUT 30H ; ВЫДАЧА СТАРТОВОГО БИТн 0005 CD0000 CALL DEL л ЗАДЕРЖКА 0008 F1 POP PSW л ВОССТАНОВЛЕНИЕ ВЫДАВнЕМОГО БАЙТА > b АККУМУЛЯТОРЕ Программа 12 213
0009 0608 MUI В, 08H i ЗАГРУЗКА СЧЕТЧИ1 А ЦИКЛА 0008 D330 LOOP: OUT 30H ; ВЫДАЧА СТАРШЕГО Е.ИТА АККУМУЛЯТОРА 0000 CD0000 CALL DEL ; ЗАДЕРЖКА 0010 05 DCR В ; УМЕНЬШЕНИЕ СОДЕРЖИМОГО СЧЕТЧИЬА UHFЛн 0011 СА180О JZ BEND л ВЫХОД ИЗ ЦИКЛА 0014 17 PAL i СДВИГ СОДЕРЖИМОГО АККУМУЛЯТОРА ВЛЕВО 0015 С30В00 JMP LOOP л К НАЧАЛУ ЦИКЛА 0018 3EPF BEND: MUI A,0FFH i ВЫДАЧА ПЕРВОГО 001А D330 OUT 30H л СТОПОВОГО БИТА 0G 1С CD0000 CALL DEL л ЗАДЕРЖКА 001F D330 OUT 3GH л ВЫДАЧА 2-ГО СТОПОВОГО БИТн 8021 Fl POP PSW ; 0022 Cl POP В i 0023 C9 RET BWRT ОООО DEL жжжж LOOP COOP BEND 0018 Программа 12 (продолжение) ; ПРОГРАММНАЯ МОДЕЛЬ ГЕНЕРАТОРА СЕРИИ ИМПУЛЬСОВ 0000 1600 PMSI: Л MUI D, NMAX 0002 AF XRA A 0003 2F Ml: СМА 0004 D30O OUT PORT 0006 010000 1X1 B,T1 0009 CD00O0 CALL DELAY 000С AF XRA A 600D D300 OUT PORT 000F 010000 LXI В/ T2 0012 CD0000 CALL DELAY 6015 15 DCP D 0016 С20300 JNZ Ml 0019 С9 RET pmsi NMAX Ml PORT T1 DELAY T2 0000 ЖЖЖЖ 0003 ЖЖЖЖ жжжж жжжж жжжж Программа 13 л ————““ л ИЗМЕРЕНИЕ ЧАСТОТЫ ; 6000 110000 FRQCYt LXI D/00H ; ЧИСЛО ИМПУЛЬСОВ « 6 - В D/E 0003 010000 LXI B/TSEC i КОД 1 СЕКУНДЫ ПОМЕСТИТЬ В В,С 6006 DB00 Ml: IN PORT ; ЧИТАТЬ ПОРТ 0008 E601 ANI 01H л 0? 000A C20600 JNZ Ml i ЕСЛИ НЕТ 000D DB00 М2: IN PORT л ЧИТАТЬ ПОРТ 000F E601 ANI 01H i 0? 0011 CA0D00 JZ М2 i ЕСЛИ ДА 0014 7F М3: мои A, A л ЗАДЕРЖКА 5 ТАКТОВ Программа 14 214
0015 0016 7F ОВ М31: мои DCX Ал A В J КОД ВРЕМЕНИ УМЕНЬШИТЬ НА 1 0017 AF XRA A : 0018 60 ORA В i ИЗМЕРЕНИЕ 0019 В1 ORA C i ЗАКОНЧЕНО ? 001А С8 RZ i ЕСЛИ ДАл ВОЗВРАТ 001В DB00 IN PORT > ЧИТАТЬ ПОРТ 001D Е601 ANI 01H i 0? 001F С21480 JNZ М3 i ЕСЛИ НЕТ 0022 13 INX D > ЧИСЛО ИМПУЛЬСОВ УВЕЛИЧИТЬ НА 1 0023 7F мои Ал A 1 0024 0В М4: DCX В i КОД ВРЕМЕНИ УМЕНЬШИТЬ НА 1 0025 AF XRA A 0026 ВО ORA В i ИЗМЕРЕНИЕ ЗАКОНЧЕНО? 0О27 В1 ORA C 0О28 С8 RZ ; ЕСЛИ ДАл ВОЗВРАТ 0029 DBO0 IN PORT ; ЧИТАТЬ ПОРТ 002В Е601 ANI 01H i 002D СА330О JZ M41 i ЕСЛИ ДА 0030 С3160О JMP M31 i ЕСЛИ НЕТ 0033 С324О0 М41: JMP M4 i FRQCY TSEC Ml PORT М2 М3 M31 M4 M41 0000 жжжж O006 жжжж 000D 0014 0016 0024 0033 Программа 14 (продолжение) ПОДПРОГРАММА ИЗМЕРЕНИЯ ПЕРИОДА ИМПУЛЬСНОЙ ПОСЛЕДОВАТЕЛЬНОСТИ ’> ИМПУЛЬСЫ ПОСТУПАЮТ ЧЕРЕЗ МЛАДШИЙ РАЗРЯД ПОРТА PORT G000 DB0O DET: IN PORT , ЗАФИКСИРОВАТЬ ООО? Е601 ANI 01H i ФРОНТ 0004 С2000О JNZ DET i ИМПУЛЬСА 0007 DBO0 Ml: IN PORT О0О9 Е601 ANI 01H л 000В С20700 JNZ Ml i 000Е 0Е00 MUI C.00H i СБРОС СЧЕТЧИКА ВРЕМЕНИ <ТИ) ИМПУЛЬСА 0010 0С М2: INR C ; ИЗМЕРИТЬ ТИ 0011 DB00 IN PORT i 0013 Е601 ANI 01H 0015 С2О7О0 JNZ Ml 0018 320000 STA TIMP ; ТИ ЗАНЕСТИ В ЯЧЕЙКУ ПАМЯТИ TIMP 0018 0600 MUI Вл 00H > СБРОС СЧЕТЧИКА ВРЕМЕНИ ПАУЗЫ <ТП> 001D 04 М3: INR В J 061Е DBO0 IN PORT > ИЗМЕРИТЬ ТП 0020 Е601 ANI 01H 0022 CA1D00 JZ М3 ; 0025 320000 STA TPAU ; ТП ЗАНЕСТИ В ЯЧЕЙКУ TPAU 0028 78 М4: MOU Ал В > РАССЧИТАТЬ ПЕРИОД ПОСЛЕДОВАТЕЛЬНОСТИ 0029 81 ADD С ; ИМПУЛЬСОВ <Т> 002А 00 2D 320000 С9 STA RET TPER ; Т ЗАНЕСТИ В ЯЧЕйГ' ТРЕЕ i ВОЗВРАТ Программа 15 215
DET 0000 PORT жжжж Ml 0007 М2 0010 TIMP жжжж М3 001D TP AU жжжж M4 O028 TPER жжжж Программа 15 (продолжение) 'i ПРОГРАММА - МОНИТОР ; МОНИТОР i ПРОГРАММА ВЫБОРА РЕЖИМА G000 ЗЕ08 МОНIT: MUI A»DIP i ЗАДнТЬ РЕЖИМ РнБОТЫ ППИ 0002 320000 STA PPI 0005 3100О0 LXI SP»STEk i ИНИЦИАЛИЗАЦИЯ СТЕКА С008 DF RST ; ЧТЕНИЕ КЛАВИШИ 6009 С600 ADI АТАВМ • ПОИСК СТРОКИ 0008 2600 MUI H»00H , В ТАБЛИЦЕ G00D 6F мои L,A ; АДРЕСОВ 000Е 6Е мои L.»M ; ФОРМИРОВАНИЯ АДРЕСА ПЕРЕХОДА 00 0F Е9 PCHL ; ПЕРЕХОД ПО АДРЕСУ 0010 С33300 JMp PPI i ВЕКТОРЫ ПЕРЕХОДОВ К 0013 00 NOP i РЕЖИМАМ РАБОТЫ 0014 00 NOP 0015 00 NOP ; PST2 0016 00 NOP 0017 00 NOP 0018 С34200 JMP PP2 ; RST3 0018 00 NOP 001С 00 NOP 001D 00 NOP G01E 00 NOP GO 1F 00 NOP 0020 DF PST *7 0021 035200 JMP РРЗ ; PST4 6024 00 HOP 0025 00 HOP 6026 00 HOP 0027 00 NOP 6028 C35D60 JMP PP4 ; PST5 002В 00 HOP О02С 00 HOP 60 2D 00 HOP 002Е 0Й NOP O02F 00 HOP 0030 С36860 JMp PP5 ; PST6 6033 Е5 i ПОДПРОГРАММА ЧТЕНИЯ БнйТА PPls PUSH H 6034 0035 Е7 67 PST PLC 4 • ЧИТАТЬ F ЛАВИШУ 0036 £037 G7 67 PLC PLC 4 СДВИГА 0038 07 PLC 0039 003А СОЗС 603D 6F мои L» А • 4 СДВИГА D30G OUT POPTd i ВЫВОД ЦИФРЫ в ППИ Е7 В5 PST OPA 4 L ; ЧИТнТЬ КЛАВИШУ Программа 16 216
СОЗЕ D300 OUT PORT0 i ВЫВОД БАЙТА Б ППИ 0040 El POP H i 0041 С9 PET i ; ПОДПРОГРАММА ЗАДЕРЖКИ , 6042 Е5 РР2: PUSH H л 0043 F5 PUSH PSW i 0л6 СЕК. G044 210000 LXI НлПМЕ i 0047 3E00 L21: MUI Ал 00H л 0 В 'А' 0049 2В DCX H I ДЕКРЕМЕНТ СЧЕТЧИКА 004А 84 OPA H i ПРОВЕРКА НА КОНЕЦ СЧЕТА 0046 85 OPA L i ЕСЛИ НЕ КОНЕЦ 004С С24700 JNZ L21 j 004F F1 POP PSW i ЕСЛИ СЧЕТ ЗАКОНЧЕН 0050 Е1 POP H i 0051 С9 PET i ; ПОДПРОГРАММА ЧТЕНИЯ КЛАВИШИ 0052 3A0000 РРЗ! LDA KL i ЧИТАТЬ РЕГИСТР КЛАВИАТУРЫ 0055 FE00 CPI 00H i 0? (НЕ НАЧАТА) 0057 СА5200 JZ PP3 i ЕСЛИ 0 005А E60F ANI 0FH i ЕСЛИ НАНАТАл ВЫДЕЛИТЬ ЦИФРУ 005С С9 RET i 005D F5 РР4: PUSH PSW i 005Е D300 OUT PORTO i А - ПОРТО ППИ (ДАННЫЕ) 0060 7С мои АлН i 0061 D300 OUT P0PT1 i Н - П0РТ1 ППИ (АДРЕС СТ.) 0063 7D мои A/L i 0064 D30O OUT P0PT2 i L - П0РТ2 ППИ (АДРЕС МЛ.) 0066 F1 POP* PSW i 6067 С9 PET i ; ЧТЕНИЕ 2 БАЙТ В ЮлЕ ИЗ 1 РЕГИСТРА КЛАВИАТУРЫ 0068 F5 РР5: PUSH PSW i 0069 D7 RST 2 / ЧИТАТЬ 1 БАЙТ 006А 57 мои Ил A л 1 БАЙТ В D 0068 D7 RST 2 j ЧИТАТЬ 2 БАЙТ 006С 5F мои Ел A i 2-Ой БАЙТ В 'Е' 006D F1 POP PSW i 006Е С9 RET ; КОРРЕКЦИЯ ОЗУ (КО) 006F F7 КО: RST 6 i ВВЕСТИ С КЛАВИАТУРЫ В НлЬ £070 ЕВ XCHG j АДРЕС ЯЧЕЙКИ ОЗУ G071 С37400 JMP LO i ПЕРЕХОД К ЗАГРУЗКЕ ; ЗАГРУЗКА ОЗУ (30) G074 210000 L0: LXI Нл NAO НАЧАЛЬНЫЙ АДРЕС ОЗУ 0077 3E00 L011: MUI Ал 00H i 0079 EF RST 5 Л ИНДИКАЦИЯ АДРЕСА 007А CF RST 1 Л ЧИТАТЬ БАЙТ С КЛАВИАТУРЫ 0078 77 мои Мл A i ЗАГРУЗИТЬ ЯЧЕЙКУ 007С DF RST 3 • ЗАДЕРЖКА 0л6 СЕК. 007D 23 INX H i НАРАЩИВАНИЕ АДРЕСА ОЗУ 007Е С37700 JMP L011 ЗАЦИКЛИВАНИЕ Программа 16 (продолжение) 217
; ПРОВЕРКА ОЗУ (ПРОСМОТР) (ПО) Г 081 21О000 POZ: LXI Н»НАО ; НАЧАЛЬНЫЙ АДРЕС 03^ С-084 Е7 РОИ! RST 4 5 ЗАДЕРЖКА ДО НАЫАТИЯ КЛАВИШИ Г0йб 7Е мои А/М ; ЧИТАТЬ ОЗУ' Б 'А' 0086 ЕЕ RST ; АДРЕС/ ДАННЫЕ - НА ИНДИКАЦИЮ Г0А7 IHX Н i УВЕЛИЧЕНИЕ АДРЕСА ОЗУ G088 С38400 JMP РОИ ; ЗАЦИКЛИВАНИЕ \ ПРОВЕРКА (ПРОСМОТР) ОЗУ С ЗАДАННОГО ШАГА (ПШ) 6088 F7 POZls RST 6 i ВВЕСТИ НАЧАЛЬНЫЙ АДРЕС 008С ЕВ XCHG i С КЛАВИАТУРЫ 008 D С38400 JMP РОИ i ПЕРЕХОД К ПРОГРАММЕ ПРОСМОТРА \ ПРОГРАММА ПУСКА ( ПУСК 2 ) 0090 D7 PADR! RST 7 0091 67 мои Н»А ; ПУСКВОй АДРЕС 0092 D7 PST 2 i ЗАНЕСТИ 0093 6F мои U А > В H/L С КЛАВИАТУРЫ 0094 3E00 MUI Ал 00Н i ИНДИКАЦИЯ С 096 EF RST 5 i .АДРЕСА 0097 DF RST Г? л ЗАДЕРЖКА 0/6 СЕК. 0098 Е9 PCHL i ПЕРЕХОД ПО АДРЕСм , Г^’СЬ С НАЧАЛА ОЗУ (ПУСК 1) 0099 С30000 PIJSK ! JMP NAO ; ПЕРЕХОД К ПРОГРАММЕ В ОЗУ ; ТАБЛИЦА ПЕРЕХОДОВ К ФУНКЦИЯМ МОНИТОРА ; 009С 6F АТАМЕ:: DB КО ; 'КО'.КОД КЛАВИШИ: 00Н C09D 74 DB LO ; '30'.КОД КЛАВИШИ: 01Н 609Е 81 DB POZ ; 'ПО'.КОД КЛАВИШИ: 02Н 009F 00 DB TI ; 'ТИ'.КОД КЛАВИШИ: 03Н 00А0 00 DB ТО ; 'ТО'.КОД КЛАВИШИ: 04Н и0А1 8В ив POZ1 > 'ПШ'.КОД КЛАВИШИ: 05Н 00А2 99 DB PUSK , 'ПУСК1'.КОД КЛАВИШИ: 06Н 00 АЗ 90 DB PADP ; 'ПУСК2'.К0Д КЛАВИШИ: ©7Н MONIT 0000 P0RT1 жжжж DIR ЖЖЖЖ P0RT2 жжжж PPI жжжж КО 006F STEK жжжж L0 0074 АТАВМ жжжж МАО жжжж РР1 0033 L011 0077 РР2 0042 POZ 0081 РРЗ 0052 РОИ 0084 РР4 O05D P0Z1 008В РР5 0068 PADR 0090 PORT0 жжжж PUSK 0099 TIME жжжж АТАМВ 009С L21 KL 0047 жжжж TI ТО жжжж жжжж Программа 16 (продолжение) ТЕСТ ИНДИКАЦИИ ; ТЕСТ ИНДИКАЦИИ (ТИ) 0000 3E00 TI: MUI А»0ОН > 00 В ’А' 0002 67 МТИ: мои Н/А ; 'А' В 'Н' 0003 6F мои L/A ; ' н ’ В ' L' 0004 EF RST 5 ; A/H/L ВЫВЕСТИ НА ИНДИКАЦИЮ 0005 ЗС IHR А ; СЛЕДУЮЩАЯ ЦИФРА В 'А' 0006 С202О0 JNZ МТИ > ЕСЛИ ПЕРЕБРАЛИ НЕ ВСЕ ЦИФРЫ 0009 С7 PST 0 ; ВОЗВРАТ В НАЧАЛО МОНИТОРА TI £000 МТИ 0002 Программа 18 218
ПРОГРАММА * ТЕСТ ОЗУ 03V (ТО; 0000 21000О ТО: l:;i Нл МАО , НАЧАЛЬНЫЙ АДРЕС ОЗ*-1 0003 ЗЕ55 МТ01: MUI Ал 55Н ; ДАННЫЕ РАВНЫ 55Н 0005 Г Z мои Мл А ; ЦИКЛ 0006 7Е мои АлМ i ЗАПИСЬ - СЧИТЫВАНИЕ 0007 ЕЕ55 XPI 55Н , ДАННЫЕ = 55Н9 0009 022400 JNZ ЕРТО i ЕСЛИ НЕТ О00С 07 PLC ; ДАННЫЕ РАВНЫ ААН 0000 77 мои Мл А ; ЦИКЛ 00ОЕ 7Е мои АлМ ; ЗАПИСЬ - СЧИТЫВАНИЕ 00 OF ЕЕАА XRI ААН ; ДАННЫЕ = ААН" 0011 С22400 JNZ ERTO ; ЕСЛИ НЕТ 0014 23 INX Н ; ПЕРЕЙТИ К СЛЕДЯЩЕЙ ЯЧЕЙКЕ 0015 110000 LXI БлКАО ; КОНЕЧНЫЙ АДРЕС ОЗУ + ЕДИНИЦА 0018 78 мои АлЕ 6019 BD СМР L ; ВСЕ ЯЧЕЙКИ ПРОВЕРЕНЫ"* 001А С20300 JNZ МТСИ ; ЕСЛИ НЕТ 0010 7А мои A»D 001Е ВС СМР Н ; COIF С2030О JNZ МТ01 ; ЕСЛИ НЕТ 0022 2В do: Н О023 AF УРА А * 0024 7Е ERTO: мои АлМ ; ЕСЛИ ВСЕ ЯЧЕЙКИ ПРОВЕРЕНЫ , ьЛИ ЯЧЕЙКА ИСПРАВНА С 025 EF RST 5 ; ВЫВОД НА ИНД1Н АЦИЖ АДРЕСА i ЯЧЕЙКИ И СОДЕРЖИМОГО 0026 £7 RST 4 . ЗАДЕРЖКА ДО НАЖАТИЯ F ЛАВИШИ 0027 С303О0 JMP МТ01 i ПРОДОЛЖИТЬ ТЕСТ ТО МАО МТО1 ERTO КАО 0000 жжжж 0003 0024 жжжж Программа 17 ; ПРОГРАММЫ ПЕРЕДАЧИ И ПРИЕМА СИМВОЛА В ПОРТ ; ПРИГРАММА ПЕРЕДАЧИ СИМВОЛА В ПОРТ 0000 3E00 DOU: MUI Ал61МВ i ЗАНЕСТИ СИМВОЛ В АККУМУЛЯТОР 6002 E6EF ANI EFH i ОЧИСТИТЬ КОНТРОЛЬНЫЙ РАЗРЯД и > УСТАНОВИТЬ ФЛАЖОК ПРИЗНАКА ЧЕТНО 0004 ЕА090О JPE Ml i ЕСЛИ ЧИСЛО ЕДИНИЧНЫХ РАЗРЯДОВ КО i ЧЕТНОл ИДТИ К МЕТКЕ Ml 0007 F680 OR I 80H ; УСТАНОВИТЬ КОНТРОЛЬНЫЙ РАЗРЯД В 0009 0006 D300 76 Mi: OUT PORT® ; ПЕРЕДАТЬ ДАННЫЕ В ПОРТ ВЫВОДА HLT ; ОСТАНОВ ; ПРОГРАММА ПРИЕМА СИМВОЛА ЧЕРЕЗ ПОРТ 00 ОС DB0O DIN: IN P0RT1 > ЗАГРУЗИТЬ ДАННЫЕ ИЗ ПОРТА ; 6В0ДА В АККУМУЛЯТОР 000Е В7 ORA A i УСТАНОВИТЬ ФЛАЖОК ЧЕТНОСТИ 000F 0012 Е20000 76 JPO HLT ERROR i ЕСЛИ ЧИСЛО ЕДИНИЦ В КОДЕ НЕЧЕТНО i ИДТИ К ИНДИКАЦИИ ОШИБКИ j ОСТАНОВ DOU 0000 SIMB жжжж Ml 0009 PORT0 жжжж DIN 000С Р0РТ1 ERROR ЖЖЖЖ жжжж Программа 19 219
; ПОДПРОГРАММА 'СИГНАТУРНЫЙ ГЕНЕРАТОР' ; ПОДПРОГРАММА 'СИГНАТУРНЫЙ ГЕНЕРАТОР' 0000 0Е01 SIGNG: MUI C»01H ; В РЕГИСТРЕ 'С' СФОРМИРОВАТЬ МАСКУ ; ДЛЯ ВХОДНОГО БнйТА 0002 2АВ100 LOOP: LHLD Bl i ПОМЕСТИТЬ В 4»L 2 БАЙТА РЕГИСТРА ; СИГНАТУРЫ 0005 3E00 MUI АлMASC1 i ВЫДЕЛИТЬ В 1 БАЙТЕ СИГНАТУРЫ 0007 А5 ANA L i РАЗРЯДЫ ДЛЯ ОБРАТНОЙ СВЯЗИ 0008 F5 PUSH PSW i ПОМЕСТИТЬ БАЙТ ПРИЗНАКОВ F В СТЕК 0009 3E00 MUI Ал MASC2 i ВЫДЕЛИТЬ ВО 2 БАЙТЕ СИГНАТУРЫ 0008 А4 ANA H > РАЗРЯДЫ ДЛЯ ОБРАТНОЙ СВЯЗИ 600С F5 PUSH PSW ; И ПОМЕСТИТЬ БАЙТ В СТЕК 000D 79 мои АлС ; ВЫДЕЛИТЬ В БАЙТЕ ВХОДНЫй ИНФОРМАЦИИ 0006 АО ANA В > ОЧЕРЕДНОЙ РАЗРЯД 000F F5 PUSH PSW > РЕГИСТР ПРИЗНАКОВ F ПОМЕСТИТЬ В СТЕК 0010 33 INX SP J УКАЗАТЕЛЬ СТЕКА УВЕЛИЧИТЬ НА 1 0011 F1 POP PSW ; СЛОЖИТЬ ПО МОДУЛЮ 2 БАЙТА ПРИЗНАКОВ 0012 5F мои Ел A > ДЛЯ 1»2 БАЙТ СИГНАТУРЫ И БАЙТА» 0013 F1 POP PSW i СОДЕРЖАЩЕГО РАЗРЯД ВХОДНОЙ ИНФОРМАЦИИ 0014 АВ XRA E ; 0015 5F MOU Ел A ; 0016 F1 POP PSW ; 0017 ЗВ DCX SP ; СДВИНУТЬ ПОЛУЧЕННУЮ СУММУ ПО 0018 АВ XRA E i МОДУЛЮ 2 НА 2 РАЗРЯДА ВПРАВО 0019 0F RRC ; И ВЫДЕЛИТЬ БИТ ЧЕТНОСТИ 001А 0F RRC ; <сУММУ ПО МОДУЛЮ 2) 001В А1 ANA 01H ; 00 1С 29 DAD H ; СДВИГ РЕГИСТРА СИГНАТУРЫ 00 1D 6016 В5 6F OPA L ; СОДЕРЖИМОЕ СУММнТОРА ПО МОДУЛЮ 2 • ПОМЕСТИТЬ В МЛАДШИЙ РАЗРЯД мои Ел A . РЕГИСТРА СИГНАТУРЫ 00 1F 22В100 SHLD Bl 0022 79 мои A»C ; МОДИФИКАЦИЯ РЕГИСТРА - МАСКИ 'С' 6023 87 ADD A > (СДВИГ 'С> НА 1 РАЗРЯД ВЛЕВО- 00 24 4F мои СлА 0025 0028 С2О2О0 С9 JNZ LOOP ; ЕСЛИ МАСКА = 0» ПЕРЕХОД К . началу ЦИКЛА RET • ВОЗВРАТ ИЗ ПОДПРОГРнММЫ л 61 EQU 230ОН»BI-АДРЕС ЯЧЕЕЬ ПнМЯТИ» ; ГДЕ ХРАНИТСЯ РЕГИСТР СИГНАТ"РЫ ; БАЙТ ВХОДНОЙ ИЧФОРМнЦИИ НЕОБХОДИМО • ПЕРЕД ВЫЗОБОМ ПОДПРОГРнММЫ SIОНО • ЗАГРУЗИТЬ В РЕГИСТР ‘В’ SIGNG ОО0О LOOP 0002 МАSCI ♦♦♦♦ Мн SC 2 ♦♦♦♦ Программа 20 220
; ПОДПРОГРАММА УМНОЖЕНИЯ 8-БИТНЫХ ЦЕЛЫХ ЧИСЕЛ i БЕЗ ЗНАКА 0000 0600 MIJL88: MUI ВлО ; СБРОС СТАРШЕГО БАЙТА ПРОИЗВЕДЕНИЯ 0002 1Е08 MUI Ел 8 ; ИНИЦИАЛИЗАЦИЯ 0004 79 NXBITs мои А.» С > МНОЖИТЕЛЬ ЗАНЕСТИ В АККУМУЛЯТОР 0005 1F RAP i ОЧЕРЕДНОЙ БИТ В ФЛАЖКЕ 'С? 0006 4F мои СлА i ВОЗВРАЩЕНИЕ МНОЖИТЕЛЯ 0007 1D DCP Е i ДЕКРЕМЕНТ СЧЕТЧИКА БИТ 0008 F8 RM > УМНОЖЕНИЕ ЗАКОНЧЕНО'’' 0009 78 мои Ал В i СТАРШИЙ БАЙТ ПРОИЗВЕДЕНИЯ 000А D20E00 JNC NOADD i БИТ МНОЖИТЕЛЯ = 0 0000 82 ADD D ; СУММИРОВАНИЕ МНОЖИМОГО 000Е 1F NOADD: RAR ; СДВИГ ЧАСТИЧНОЙ СМММЫ 000F 47 мои В»А ; ВОЗВРАЩЕНИЕ СТАРШЕГО БАЙТА 0010 С30400 JMP NXBIT i УМНОЖЕНИЕ НА СЛЕДУЮЩИЙ БИТ MUL88 0000 NXBIT 0004 NOADD 0О0Е Программа 21 ; ПОДПРОГРАММА ДЕЛЕНИЯ 8-БИТНЫХ ЦЕЛЫХ ЧИСЕЛ ; i БЕЗ ЗНАКА ; 0000 310800 DIU88: LXI H»8 i ИНИЦИАЛИЗАЦИЯ СЧЕТЧИКА БИТ 0003 0Е00 MUI C»0 ; СБРОС РЕГИСТРА ОСТАТКОВ 0005 7В HEXT: мои АлЕ i СДВИГ ДЕЛИМОГО 0006 17 PAL i ВЛЕВО 0007 5F мои Ел A ; НА ОДИН БИТ 0008 79 мои АлС ; СДВИГ ОСТАТКА 0009 17 RAL > ВЛЕВО НА ОДИН БИТ 000А 92 SUB D i ВЫЧИТАНИЕ ДЕЛИТЕЛЯ 0008 D20FO0 JNC NOADD ; ОСТАТОК ПОЛОЖИТЕЛЬНЫЙ 000Е 82 ADD D ; ВОССТАНОВЛЕНИЕ ОТРИЦАТЕЛЬНОГО i ОСТАТКА 000F 4F NOADD: мои СлА ; ЗАПОМИНАНИЕ ОСТАТКА 0010 3F CMC ; ОБРАЗОВАНИЕ БИТА ЧАСТНОГО 0011 7С мои АлН i ЗАПОМИНАНИЕ 0012 17 RAL i ОЧЕРЕДНОЙ 0013 67 мои H»A i ЦИФРЫ ЧАСТНОГО 0014 2D DCR L i ДЕКРЕМЕНТ СЧЕТЧИКА БИТ 0015 С20500 JNZ NEXT i ЗАЦИКЛИВАНИЕ 0018 С9 RET Л DIU88 0000 NEXT 0005 NOADD 000F Программа 22 221
; ПОДПРОГРАММА СЛОЖЕНИЯ UEflblfe 8-РАЗРЯДНИХ > ЧИСЕЛ СО ЗНАКОМ > 0000 0Е02 ; СЛОЖЕНИЕ ADSIG: MUI C»02H i НОМЕР СЛАГАЕМОГО 6002 7А мои A/D ; 1-ОЕ СЛАГАЕМОЕ ПЕРЕДАТЬ В 'А' 0003 А7 ANA A i УСТАНОВКА ПРИЗНАКОВ (F) 0004 РА1400 JM Ml ; ЕСЛИ А<'0 0007 0D DCR C ; НОМЕР УМЕНЬШИТЬ НА 1 0008 47 М2: мои B/A ; 1-ОЕ СЛАГАЕМОЕ ПЕРЕДАТЬ В 'В' 0009 7В мои A/E > 2-ОЕ СЛАГАЕМОЕ ПЕРЕДАТЬ В 'А' 000А А7 ANA A л УСТАНОВКА ПРИЗНАКОВ (F) 0006 FA140O JM Ml i ЕСЛИ А<0 000Е 80 М3: ADD В ; А+В ПЕРЕДАТЬ В 'А' 000F FA2O00 JM M4 i (СЛОЖИТЬ ОПЕРАНДЫ) i ЕСЛИ РЕЗУЛЬТАТ < 0 0012 5F М5: мои E/A ; РЕЗУЛЬТАТ ПОМЕСТИТЬ В 'Е' 0013 0014 С9 E67F Ml: RET ANI 7FH > ВОЗВРАТ ; ОТБРОСИТЬ ЗНАК /-/ ОПЕРАНДА 0016 0017 2F С601 СМА ADI 01H ; ОПЕРАНД ПРЕДСТАВИТЬ л В ДОПОЛНИТЕЛЬНОМ КОДЕ 0019 0D DCP C i НОМЕР СЛАГАЕМОГО УМЕНЬШИТЬ НА 1 001А CA0E00 JZ М3 i ЕСЛИ НОМЕР = 0»СЛОЖИТЬ ОПЕРАНДЫ 001D С308О0 JMP М2 ; ЕСЛИ НОМЕР # О»ОБРАБОТКА 0020 2F М4: CMA i ВТОРОГО СЛАГАЕМОГО л СУММУ ПРЕДСТАВИТЬ 0021 С601 ADI 01H л В ДОПОЛНИТЕЛЬНОМ КОДЕ 0023 F680 0₽ I 80H л УСТАНОВИТЬ ЗНАК СУММЫ - ' С025 С31200 JMP M5 л К ВЫВОДУ РЕЗУЛЬТАТА aDSIG Ml М2 ИЗ М4 М5 6600 0014 0008 О00Е 0020 0012 Программа 23 ; ПОДПРОГРАММА УМНОЖЕНИЯ ЦЕЛЫХ ОДНОБАЙТОВЫХ ; НИСЕЛ СО ЗНАКОМ . УМНОЖЕНИЕ СО ЗНАКОМ £000 79 MUSIG: мои А/С л ВЫЧИСЛИТЬ ЗНАК 6001 АА XRA D i ПРОИЗВЕДЕНИЯ £002 Е680 ANI 80Н л И ЗАНЕСТИ В СТЕК 0004 F5 ' PUSH PSU 0005 79 мои А/С ; ОТБРОСИТЬ ЗНАКИ С 006 E67F ANI 7FH ; СОМНОЖИТЕЛЕЙ £008 4F мои С» А 0009 7А мои A/D ; 00 О А E67F ANI 7FH ; 000С 57 MOU D/A ; 000D CD0000 call MUL88 л УМНОЖЕНИЕ БЕЗ ЗНАКА 0010 F1 POP Р8Ы i УСТАНОВИТЬ ЗНАК 0011 80 ORA В i ПРОИЗВЕДЕНИЯ 0012 С9 PET r-IJSIG 0006 Программа 25 222
; ПОДПРОГРАММА ВЫЧИТАНИЯ ЦЕЛЫХ ОДНОБАЙТОВЫХ i ЧИСЕЛ СО ЗНАКОМ \ ВЫЧИТАНИЕ. 0000 ЗЕ80 SUSI6: MUI А.» 80H i ИНВЕРТИРОВАТЬ 0002 АВ XRA E i ЗНАК ВЫЧИТАЕМОГО 0003 5F мои Ел A 0004 ООО? CD00O0 С9 CALL RET ADSIG i СЛОНЕНКЕ ОПЕРАНДОВ Л SUSIG 0000 г ADSIG жжжж Программа 24 ; ПОДПРОГРАММА ДЕЛЕНИЯ ЦЕЛЫХ ОДНОБАЙТОВЫХ л ЧИСЕЛ СО ЗНАКОМ ДЕЛЕНИЕ СО ЗНАКОМ C000 7B DISIG: мои АлЕ л ВЫЧИСЛИТЬ ЗНАК 0001 АА XRA D л ЧАСТНОГО И 0002 Е680 ANI 80H л ЗАНЕСТИ 0004 F5 PUSH PSW ; В СТЕК 0005 7В мои АлЕ ; ОТБРОСИТЬ ЗНАК 0006 E67F ANI 7FH ; ДЕЛИМОГО 0008 5F мои Ел A > И ДЕЛИТЕЛЯ 0009 7А мои Ал D : 000A E67F ANI 7FH : 000C 57 мои Юл A 000D CD00O0 CALL DIU88 i ДЕЛЕНИЕ БЕЗ ЗНАКОВ 0010 F1 POP PSW J 0011 84 ORA H i ОСТАНОВИТЬ ЗНАК ЧАСТНОГО £012 С9 RET i DISIG 0000 __ DIU88 жжжж Программа 2о ; ПОДПРОГРАММА СЛОВЕНИЯ МНОГОБАЙТОВЫХ ; л ЧИСЕЛ БЕЗ ЗНАКА i 0000 0600 J — — — — ADDN: MUI B»N i ИНИЦИАЛИЗАЦИЯ СЧЕТЧИКА БАЙТ 0002 110000 LXI Лл FIRST i ИНИЦИАЛИЗАЦИЯ 0005 210000 LXI Нл SECHD ; УКАЗАТЕЛЕЙ ПАМЯТИ 0008 AF XRA A ; СБРОС ФЛАНКА ПЕРЕНОСА 0009 IA SUM: LDAX D л ЗАГРУЗКА БАЙТА 1-ОГО ОПЕРАНДА 000А 8Е ADC M , СЛОНЕНКЕ СО 2-ЫМ ОПЕРАНДОМ 0006 12 STAX D ; ЗАПОМИНАНИЕ СУММЫ 000С 05 DCP В i ДЕКРЕМЕНТ СЧЕТЧИКА БАЙТ 000 D С8 RZ л СЛОЖЕНИЕ ЗАКОНЧЕНО'’ 000Е 23 INX H л НЕТл ПЕРЕХОД К СЛЕДЯЩИМ 000F 13 INX D i БАЙТАМ СЛАГАЕМЫХ 0010 С30900 JMP SUM л ПРОДОЛНЕНИЕ СЛОНЕНИЯ ADDH N FIRST SECND SUM 0000 жжжж жжжж жжжж 0009 Программа 27 223
i ПОДПРОГРАММА УМНОЖЕНИЯ ЦЕЛЫХ ЧИСЕЛ л < 16X8 ) БЕЗ ЗНАКА €000 210000 DMULT: LXI H> 00OOH i СБРОС РЕГИСТРА ПРОИЗВЕДЕНИЯ 0003 0Е08 MUI C»08H i ИНИЦИАЛИЗАЦИЯ СЧЕТЧИКА БИТ 0005 29 NXBIT: DAD H ; СДВИГ ЧАСТИЧНОЙ СУММЫ ВЛЕВО С006 17 PAL i СДВИГ МНОЖИТЕЛЯ G007 D20B00 JNC NOADD i АНАЛИЗ БИТА МНОЖИТЕЛЯ 000А 19 DAD D ; СУММИРОВАНИЕ МНОЖИМОГО 0008 CE00 NOADD: AC I 00H ; УЧЕТ ПЕРЕНОСА E00D 0D DCP C ; ДЕКРЕМЕНТ СЧЕТЧИКА БИТ 000Е С2050О JNZ NXBIT i УМНОЖЕНИЕ НА СЛЕДУЮЩИЙ БИТ 0011 С9 PET л УМНОЖЕНИЕ ЗАКОНЧЕНО»ВОЗВРАТ [MULT 0000 NXBIT 0005 NOADD 000В Программа 28 , ДЕЛЕНИЕ ЦЕЛЫХ ЧИСЕЛ < 32X16 ) БЕЗ ЗНАКА > С 000 FD DIU:b2. мои A/L ; ПРОБНОЕ ВЫЧИТАНИЕ ДЕЛИТЕЛЯ С 001 91 SUB C i из ДЕЛИМОГО 0002 7С мои АлН ; ДЛЯ ОБНАРУЖЕНИЯ 0003 98 SBB В i ПЕРЕПОЛНЕНИЯ £004 DO PNC J G005 AF XPA A ; ИНИЦИАЛИЗАЦИЯ СЧЕТЧИКА БИТ 0006 29 LOOP-.l DAD H , СДВИГ СТАРШЕЙ ЧАСТИ ДЕЛИМОГО 0007 F5 FUSH PSW л ЗАПОМИНАНИЕ СЧЕТЧИКА И ПЕРЕНОСА 0008 ЕВ XCH6 i СДВИГ ВЛЕВО 0009 29 DAD H i МЛАДШЕЙ ЧАСТИ ООО А ЕВ XCHG i ДЕЛИМОГО 000В D20F00 JNC LI Л ИЗ МЛАДШЕЙ ЧАСТИ ВЫДВИНУТ 0 000Е INX H i ИЗ МЛАДШЕЙ ЧАСТИ ВЫДВИНУТА 1 EOOF 7D Lis мои A.»L > ВЫЧИТАНИЕ ДЕЛИТЕЛЯ С010 91 SUB C ; ИЗ СТАРШИХ 16 БИТ СОИ 6F MOU L/A ; ДЕЛИМОГО (ОСТАТКА) ССИЗ 7С мои A»H НО 13 98 SBB В л СО 14 о । MQU H»A j С.015 DA1DOO JC L2 i ДЕЛИТЕЛЬ БОЛЬШЕ ОСТАТКА^ С-018 Fl PGP PSW i ВОССТАНОВЛЕНИЕ СЧЕТЧИКА £019 13 L3: INX D ; ЗАПИСЬ 1 В БИТ ЧАСТНОГО С.01 А С32200 JMP L4 i ПЕРЕХОД К ПРОВЕРКЕ СЧЕТЧИКА C'OID Fl L2: POP PSW Л ВОССТАНОВЛЕНИЕ СЧЕТЧИКА СО IE DA1900 JC L3 л ПРИ СДВИГЕ ОСТАТКА БЫЛА . ВЫДВИНУТА ЬЦИФРА ЧАСТН0Г0=1 G021 09 DAD В Л ВОССТАНОВЛЕНИЕ ОСТАТКА GO ?2 C610 L4: ADI ЮН . ИНКРЕМЕНТ СЧЕТЧИКА 0024 D2060O JNC LOOP! . ЗнШП ЛИВАНИЕ С 02 7 C9 PET LI и LOOP L1 L2 1.3 L4 ОбОО 0006 GOOF 00 ID 0019 0022 Программа 29 224
; ПРОГРАММА УМНОЖЕНИЯ ЦЕЛЫХ ЧИСЕЛ л ( 16X16 ) СО ЗНАКОМ i УМНОЖЕНИЕ 16-РАЗРЯДНЫХ СЛОВ СО ЗНАКОМ л РЕГИСТР D»E - МНОЖИМОЕ л РЕГИСТР ВлС - МНОЖИТЕЛЬ ; РЕГИСТР ВлСлНлЬ - РЕЗУЛЬТАТ 0000 AF M1616S XRA A 0001 67 мои НлА i 0002 6F мои 1л A 0003 80 ADD В ; 0GO4 СА520О JZ MLT17 ; ПЕРЕХОД»ЕСЛИ БАЙТ = 6 6007 С5 PUSH В ; 600В С5 PUSH В ; 0009 0ЕО2 MUI Сл02Н ; 000В 0608 MLT11: MUI Вл68Н i 6O0D 29 MLT12: DAD Н i 600Е 17 PAL 1 OO0F D21500 JNC MLT13 ; 0012 19 DAD D 6613 СЕ0О AC I 00Н л 0015 05 MLT13: DCR В i 0016 C20D6O JNZ MLT12 ; 0019 0D DCP С л 601А СА2С60 JZ MLT14 ; 001D 45 мои Вл L ; 001Е 6С мои 1_лН i 001F 67 мои НлА 0020 ЕЗ XTHL 0021 С5 PUSH В л 0022 7D мои АлЬ 0023 2600 MUI Нл00Н ; 0025 2Е0О MUI Ь00Н л 6027 С600 ADI ООН ; 6029 С20ВО0 JNZ MLT11 i 0О2С С1 MLT14: POP В л GO 2D 4F MOU СлА ; О02Е 78 мои Ал В ; 0O2F 84 ADD Н л 0030 67 мои Н»А л 0031 79 мои Ал С ; 0032 С1 POP В ; 0033 89 ADC С л 0034 4F мои С»А i 0035 78 мои Ал В 0036 СЕ60 AC I ООН л 0О38 47 мои Вл А л 0039 ЕЗ XTHL 003А 7А мои Ал D ; 003В 17 RAL i 003С D24500 JNC MLT15 л ПЕРЕХОДлЕСЛИ ЗНАК МНОЖИМОГО > 0 0O3F 79 MOU Ал С 004© 95 SUB L 0041 4F мои С»А ; 0О42 78 мои Ал В л 0О43 9С SBB Н л 0О44 47 мои Вл А л 0045 7С MLT15: MOU АлН л Программа 30 225
0046 17 PAL ) 0047 025000 JNC MLT16 i 004А 79 M0U Ал С i 0048 93 SUB Е i 004С 4F MOU Сл A i 004D 78 MOU Ал В ; 004Е 9А SBB D i 004F 47 MOU Вл A i 0050 Е1 MLT16: POP Н i 0051 С9 RET i ВОЗВРАТлЕСЛИ МНОЖИТЕЛЬ # 0 0052 81 MLT17: ADD С i 0053 С8 RZ i ВОЗВРАТлЕСЛИ МНОЖИТЕЛЬ = 0 0054 С5 PUSH В i 0055 Е5 PUSH H i 0056 Е5 PUSH H ; 0057 0Е01 MUI Сл01Н ; 0059 С30В00 JMP MLT11 i М1616 MLT17 MLT11 MLT12 MLT13 MLT14 MLT15 HLT 16 0000 0052 0000 000D 0015 002C 0045 0050 Программа 30 (продолжение) ПОДПРОГРАММА ДЕЛЕНИЯ ЦЕЛЫХ ЧИСЕЛ ( 16X16 ) СО ЗНАКОМ ; РЕГИСТР ВлС - ДЕЛИМОЕ i РЕГИСТР ОлЕ - ДЕЛИТЕЛЬ i РЕГИСТР ВлС - ЧАСТНОЕ i РЕГИСТР НлЬ - ОСТАТОК 0000 78 DIUS22: MOU Ал В i 6001 17 PAL 6002 F5 PUSH PSW i 0003 D20D00 JNC PROUD i 6006 78 мои АлВ ; 6007 2F СМА i 0008 47 мои Вл A i 6009 79 мои A,C ; 000A 2F СМА 6008 4F мои СлА i 600C 03 INX В i 000D 7A PROUD: MOU A/D > 000E 17 RAL i 600F F5 PUSH PSW i 0010 D21600 JNC DELEN i 0013 CD0600 call CMPL i 6016 CD6000 DELEW CALL DIUN22 > 0019 Fl POP PSW i 001A DA2E60 JC OSTAT i 0O1D Fl POP PSW i 00 IE D23960 JNC KONEC - i 0021 78 MOU АлВ > 6022 2F СМА C023 47 мои Вл A J 6024 79 мои АлС i 6025 2F СМА J 0026 4F мои C»A i 6027 03 INX В i Программа 31 226
6028 CD0000 002В С33900 002Е Fl 602F ЛА2800 6032 78 0033 2F 0034 47 0035 79 0036 2F 0037 4F 0038 03 0039 С9 PRODS CALL JMP OSTATs POP JC MOU СМА мои мои СМА мои INX KONECs RET CMPL KONEC PSW PROD Ал В Вл А Ал С СлА В LIUS22 PROUD DELEN CMPL DIUN22 OS TAT KONEC PROD' 0000 000D 0016 жжжж жжжж 002E 0039 0028 Программа 31 (продолжение) • ПОДПРОГРАММА ДЕЛЕНИЯ ЦЕЛЫХ ЧИСЕЛ , ' 16X16 > БЕЗ ЗНАКА РЕГИСТР В»С - ДЕЛИМОЕл ЧАСТНОЕ . РЕГИСТР Л»Е - ДЕЛИТЕЛЬл ОСТАТОК . РЕГИСТР H»L - РАБОЧИЙ РЕГИСТР 0000 7 А DIUN22: MOU A»D i 0001 2F 6 МА ЛлА > 0002 мои 0003 7В мои Ал Е > 0004 2F 6 МА 0005 5F мои Ел А > 0006 13 INX D > 0007 210000 LXI Нл 0 i 000А ЗЕ11 MUI Ал ИН ; 000С Е5 CICLE: PUSH Н i 00OD 19 DAD Л > 000Е D2120O JNC Ml ООН ЕЗ XTHL G012 Е1 Ml: POP н > 0013 F5 FUSH PSW 6014 79 MOU АлС i 6015 17 RAL 6016 4F мои С» A > 0017 78 мои Ал В i 0018 17 PAL 0019 47 мои B»A > 001А 7D мои АлС i Г018 17 RAL G01С 6F MOU СлА i 601D 76 мои АлН > С01Е 17 PAL 001F 67 мои H»A i 0020 F1 POP PSW i 6021 3D DCR A ; 6022 С20С00 JNZ CICLE i 0025 87 OPA A > 6026 7С MOU АлН i 6027 1F PAR ЛлА ; 6028 MOU 6029 7D мои A»L л 60 2 н 1F PAP Программа 32 6028 6026 5F 69 мои FIN: PET 227
Б1"М22 CICLE Ml FIN 0000 C00C 0012 002C Программа 32 (продолжение) \ ПОДПРОГРАММА ПЕРЕВОДА ОПЕРАНДА В РЕГИСТРОВОЙ • i ПАРЕ В»Е В ДОПОЛНИТЕЛЬНЫЙ КОД i ; D.»E ХРАНИТ КОД»КОТОРЫЙ БиДЕТ i ПРОИНВЕРТИРОВАН 0000 7й CMPL: мои A/D i ПОДПРОГРАММА ИНВЕРТИРОВАНИЯ ЮДя G001 2F СМА i 6002 57 мои D»A i 6003 7Б мои А/Е i 0004 2F СМА 6005 5F мои Е/А i 0006 13 INX D 0007 С9 РЕТ i CMPL 0000 Программа 33 092D 7E мои A,M 092E A7 ANA A 092F FA3609 JM 0936H 0932 4F мои C,A 0933 C33E09 JMP 093EH 0936 E67F ANI 7FH 0938 2F CMP 0939 C601 ADI 01H 093В С33209 JMP 0932H 093Е 23 INX H 093F 7Е MOU A,M 0940 Е680 ANI 80H 0942 47 MOV 8<A 0943 7Е MOV AjM 0944 E67F ANI 7FH 0946 57 MOV DjA 0947 23 INX H 0948 7Е MOV A«M 0949 А7 ANA A 894А СА7Е09 JZ 097EH 094D 5F MOU E*A 094Е 0D DCR C 094F 7В MOV A-E 0950 17 RAL 0951 5F MOU E,A 0952 7А MOV A«D 0953 17 PPL 0954 А7 ANA A 0955 FP5C09 JM 095CH 0958 57 NOV D*A 0959 С34Е0° JMP 094EH 095С 1г RPR 095С* 57 NOV D’P 095Е 7В MOV A'E 095F 1г RAP 0960 5F MOU E'A 0961 0C INR C 0962 7Д MOV A<D 0963 IF RAR 0964 57 MOV D/A 0965 7B MOV A?E 0966 IF RAR 0967 5F MOV E/A 0968 0C INR C 0969 73 MOV M<E 096Д 2B DCX H 096В 7A MOV A?D 096C BO ORA В 096D 77 MOV M<A 096E 2B DCX H 096F 79 MOV A-C 0970 A7 ANA A 0971 FA7609 JM 0976H 0974 77 MOV M'A 0975 C9 RET 0976 2F CMA 0977 C601 ADI 61H 0979 F680 OR I 30H 097В C3/409 JMP 0974H 097E 7A MOV A'D 097F A7 ANA A 0936 CA7509 JZ 0975H 0933 97 SUB A 0934 C34D0? JMP 094DH Программа 34 228
0877 217420 LXI H«2074H 087А 7Е мои A,M 087В А7 ANA A 087С FA8388 JM 0883H 087F 47 мои B,A 0880 С38В08 JMP 088BH 0883 E67F ANI 7FH 0885 2F СМА 0886 С601 AOI 01H 0888 C37F08 JMP 087FH 088В 217120 LXI H-2071H 088Е 7Е мои A«M 088F А7 ДНА A 0890 FA9D08 JM 089DH 0893 90 SUB В 0894 САСС08 JZ 08CCH 0897 FACD08 JM 08CDH 089А СЗА508 JMP 08Д5Н 0890 E67F ANI 7FH 089F 2F СМД 08 ДО С601 ADI 01H 08А2 С39308 JMP 0893H 08А5 -4F MOU C«A 08А6 217120 LXI H«2071H 08А9 7Е MOU A«M 08ДД 217420 LXI H<2074H 08AD 77 MOU M«A 08ДЕ 23 INX H 08AF 7Е MOV A«M 08В0 E67F ANI 7FH 08В2 57 MOU D*A 08ВЗ 23 INX H 08В4 5Е MOV E<M 08В5 97 SUB A 08B6 7Д MOV A,D 08B7 IF RAR 08B8 г MOV D,A 08B9 7B MOV A,E 08BA IF RAR 08BB 37 STC 08BC 3F CMC 08BO 5F MOV E,A 08BE 00 OCR C 08BF CAC508 JZ 08C5H 08C2 C3B608 JMP 08B6H 08C5 MOV M»E 08C6 28 OCX H 08C7 7E MOV A,M 08C8 E688 ANI 80H 08CA B2 ORA D 88CB 77 MOV М» A 08CC C9 RET 08CD 2F СМД OSCE C681 AO I 01H O8D0 4F MOV C,A 0801 217420 LXI H,2074H 0804 7E MOV A,M 0805 217120 LXI H,2071H 0808 77 MOV М» A 0809 INX H 08DA C3AF08 JMP 08AFH Программа 35 0Д8С 7E MOV A,M 0A8D 23 INX H 0Д8Е 46 MOV B«M 0A8F 23 INX H 0Д98 4E MOV C<M 0A91 C9 RET Программа 36 0A92 77 MOV M«A 0A93 23 INX H 0Д94 70 MOV M«B 0A95 23 INX H 0A96 71 MOV M«C 0A97 C9 RET 0849 217120 LXI H»2071H 084C 0E02 MUI C»02H 084E 7E MOU A»M 084F A7 ANA A 0858 FA6308 JM 0863H 0853 0D OCR C 0854 47 MOU B»A 8855 217420 LXI H,2074H 8858 7E MOU A»M 8859 A7 ANA A 085A FA6308 JM 0863H 8850 80 ADD В 885E FA6F08 JM 086FH 0861 77 мои M,A 0862 C9 RET 8863 E67F ANI 7FH 8865 2F CMA 0866 C601 ADI 01H 8868 0D DCR c 0869 СД5О08 JZ 085DH 886C C35408 JMP 0854H 886F 2F CMA 0870 C601 ADI 01H 0872 F688 ORI 80H 0874 C36108 JMP 0861H Программа 37 Программа 38 229
0800 217320 LXI Н»2073Н 08E0 4E мои С,М 08E1 28 DCX Н 08E2 7E мои Д?М 08E3 A7 ANA А 08E4 FAFF08 JM 08FFH 08E7 47 мои В*А 08E8 217620 LXI Н»2076Н 08EB 5E мои Е*М 08EC 2B OCX Н 08ED 7Е мои д,м 08ЕЕ А7 ANA л 08EF FA0E09 JM 090ЕН 08F2 57 мои D,A 08F3 ЕВ XCHG 08F4 09 OAD В 08F5 ЕВ XCHG 08F6 7А мои A»D 08F7 А7 ANA А 08F8 FA1D09 JM 091DH 08FB 72 мои M»D 08FC 23 INX Н 08FD 73 мои М,Е 08FE С9 RET 08FF E67F ANI 7FH 0901 2F СМА 0902 47 мои В>А 0903 79 мои А,С 0904 2F СМА 0905 С601 Д01 01Н 0907 4F мои С, А 0908 3E00 MUI А»00Н 090А 88 ДОС В 090В СЗЕ708 JMP 08Е7Н 090Е E67F ANI 7FH 0910 2F СМД 0911 57 мои 0» Л 0912 7В мои А»Е 0913 2F СМД 0914 С601 ADI 01Н 0916 5F мои Е,А 0917 3E00 MUI А»00Н 0919 8А ДОС 0 091А C3F208 JMP 08F2H 0910 2F СМД 091Е 57 мои D»A 091F 7В мои А,Е 0920 2F СИД 0921 0601 ADI 01Н 0923 5F мои Е» А 0924 3E00 MVI Д,00Н 0926 8А ДОС 0 0927 F680 ORI 80Н 0929 57 мои D»A 092А C3FBB8 JMP 08FBH Программа ($9\' 0987 007768 098Р CDDD08 0980 217420 0998 002009 0993 09 CALL 0877Н CALL 08ODH LXI H’2874H CALL 092OH RET Программа 40 0994 217220 LXI H«2072H 09BE C3AO09 JMP 09ADH 0997 7Е мои Л?М 09C1 19 ОАО D 0998 217520 LXI Н?2075Н 09C2 C3B209 JMP 09B2H 099В ДЕ XRA M 09C5 0606 MUI B»06H 0990 Е680 AN1 80H 09C7 3A7220 LOA 2072H 099Е F5 PUSH PSW 09CA IF RAR 099F 7Е мои A,M 09CB 4F MOU C«A 09Д0 E67F ANI 7FH 09CC DAOE09 JC 09DEH 09А2 57 мои DfA 09CF 70 MOU A«H 09АЗ 23 1NX H 0908 IF RAR 09Д4 5Е мои E>M 0901 67 MOU H«A 09А5 97 SUB A 0902 70 мои A<L 09Д6 67 MOI’ H«A 0903 IF RAR 09Д7 6F мои LfA 0904 6F мои L?A 09Д8 0608 MUI B>08H 0905 AF XRA A 09АД 3A7320 LOA 2073H 0906 85 DCR В 09AD 1F RAR 0907 CAE209 JZ 89E2H 09АЕ 4F мои C*A 09OA 79 MOU AjO 09 AF ОДО109 JC 09C1H 09OB C3CA09 JMP 09СДН 09В2 70 мои A«H 09OE 19 DAD D 09ВЗ 1F RAR 09DF C3CF89 JMP 09CFH 09В4 67 мои H«A 09E2 117620 LXI 0J2876H 09В5 70 мои A«L 09E5 70 MOU A«L 09В6 1F RAR 09E6 12 STAX D 09В7 6F мои L*A 09E7 IB DCX D 09В8 AF XRP A 09E8 Fl POP PSW 09В9 05 OCR 8 09E9 B4 ORA H 09ВР ОДС589 JZ 09C5H 09EA 12 STAX D 09ВО 79 мои A<C 09EB 09 RET Программа 41 230
09ЕС CD4908 09EF CD9409 09F2 217420 09F5 CD2D09 09F8 С9 CALL 0849Н CALL 0994H LXI H»2074H CALL 092DH RET Прсирамма 42 036F 217120 LXI H«2071H 0072 7E MOU 0«M 0373 17 R3L 0374 3F CMC 0375 IF R3R 0376 77 MOU M«0 0377 CD4908 COLL 0849H 0373 CDF909 COLL 89F9H 037D 217420 LXI H«2074H 0380 CD2D09 COLL 092DH 0383 217120 LXI H<2071H 0386 7E мои 0«M 0387 17 ROL 0fl88 3F CMC 0089 IF ROR 0083 77 MOU M<3 0088 C9 PET Программа 44 09F9 217220 LXI H«2072H 09FC 7E MOU 0«M 09FD 217520 LXI H«2075H 0000 OE XRO M 0001 E680 ONI 80H 00.03 F5 PUSH PSW 0004 7E MOU fl«M 0005 E67F ONI 7FH 0007 57 MOM D«fl 0008 23 INX H 0009 5E MOU E«M 0003 217220 LXI H«2072H 0300 7E MOU 041 0O0E E67F ONI 7FH 0010 47 MOU B<0 0011 23 INX H 0012 4E MOU C,M 0313 EB XCHG 0014 1602 MUI D«02H 0016 1E01 MUI E«01H 0018 7D MOU 0*L 0019 91 SUB C 0013 6F мои L«fl 031В 7C мои 0,H 0O1C 98 SBB В 0O1D 67 мои H,0 031E FO2D0O JM 0O2DH 0321 17 ROL 0022 3F CMC 0023 70 мои fl,D 0024 17 ROL 0325 57 MOU D>0 0026 DO500O JC 0O50H 0029 29 DOD H 0020 C3180O JMP 0O18H 0O2D 17 ROL 0O2E 3F CMC 0O2F 70 MOU 0>D 0030 17 ROL 0031 57 MOU D,0 0032 DO5C0O JC 0O5CH 0035 09 DOD В 0036 29 DOD H 0037 7C MOU 0<H 0038 B7 ORO 0 0039 FO2D0O JM 0O2DH 0O3C C3180O JMP 0O18H 0O3F 7D MOU OsL 0040 91 SUB C 0041 6F MOU L<0 6042 7C мои 0,H 0043 98 SBB В 0044 67 мои НяО 0045 FO540O JM 0O54H 0048 17 ROL 0049 3F CMC 0040 7B MOU 0?E 0O4B 17 ROL 0O4C 5F MOU E<0 0O4D DO660O JC 0O66H 0050 29 DOD H 0051 C33F0O JMP 0O3FH 0054 17 ROL 0055 3F CMC 0056 7B MOU 0<E 0057 17 ROL 0058 5F MOU E’fl 0059 DO660O JC 0O66H 0O5C 09 DOD В 0O5D 29 DOD H 0O5E 7C MOU ОяН 0O5F B7 ORO 0 0060 FO540O JM 0O54H 0063 C33F0O JMP 0O3FH 0066 217520 LXI H-.2075H 0069 Fl POP PSW 0060 B2 ORO D 0O6B 77 MOU M»0 0O6C 23 INX H 0O6D 73 NOU M>E 0O6E C9 RET Программа (43 231
0А98 0Е 01 16 20 IE 00 62 6В FE 02 D2 А8 0А СЗ Е6 0А 0ДА8 06 08 07 DA 82 0Д 05 СЗ ЛЯ 0Д 05 СА DB 0А F5 AF 0АВ8 7Д 1F 57 ТВ IF 5F 0С F1 07 02 82 0Д 19 02 В2 0А 0АС8 F5 7С 1F 67 7D IF 6F AF 7А IF 5Т 7В IF 5F 0С F1 0АО8 СЗ В2 0А 30 FE 01 СА Е6 0Д 54 50 СЗ АВ 0А AF 84 0АЕ8 FA F8 0Д 29 ВО СЗ Е6 0А ТС IF 6Т ТО IF 6F 0С AF 0AF8 ТС 1F 32 78 20 ТО 1F 32 T9 20 0С 79 32 77 20 С9 Программа 45 0808 ЗА 64 20 Е6 7F СА 5Е 0В18 74 20 СО 92 0А F1 30 0828 0В ЗА 64 20 AT F2 6А 0838 21 74 20 СО 8С 0Д 21 0848 01 06 20 0Е 00 СО 92 0858 СО 92 0А СЗ 6А 0В 21 0868 92 0Д С9 0В F5 21 71 20 СО 8С 0А 21 СА 29 0В F5 СО ЕС 09 СЗ 10 0B217120CO8C0AF5C5 71 28 СО 92 0А 21 74 20 ЗЕ 0Д СО 6F 0А Ci Fl 21 71 20 74283Е0106200Е00СО Программа 46 0868 ЗЕ 02 06 20 0Е 80 0В7В 20 СО 92 0А 21 6В 0888 21 70 20 СО 92 0Д 0898 92 0А 21 77 20 СО 0BAB 09 21 74 20 СО 8С 0888 СО 8С 0А 21 74 20 0BCB 8С 0Д 21 71 20 СО 0808 0А 21 65 20 СО 92 08ЕВ СО 8С 0Д 21 71 20 0BFB 74 20 СО 92 0А СО 0C0B 20 СО 92 0А 21 64 0С1В 71 20 СО 92 0А СО 0С2В 20 СО 92 0А СО 6F 0C3B СО 92 0А СО 87 09 0С4В 92 0А 21 72 20 7Е 0С5В 21 75 28 ТЕ Е6 7F 0С6В ОД 71 ВС СЗ Е8 08 0С7В 85 0С 30 Е6 7F СА 21 7А 20 СО 92 0Д ЗЕ 01 21 77 20 СО 92 0Д 21 64 20 77 06 Д0 21 61 28 СО 8С 0А 21 71 28 СО 8С 0Д 21 74 20 СО 92 0Д СО 87 0А 21 65 20 СО 92 0Д 21 70 20 СО 92 0А СО 87 09 21 65 20 СО 92 0Д СО 6F 0А 21 74 20 СО 8С 0А 21 68 20 СО 92 0А 21 6В 20 СО 92 0А 21 7А 20 СО 8С 0А 21 87 09 21 74 20 СО 8С 8А 21 6В 20 34 34 21 65 20 СО 8С 0А 21 08 0В 21 6В 20 СО ВС 0Д 21 71 0А 21 68 20 СО 8С 0А 21 71 20 21 74 20 СО 8С 0А 21 68 20 СО 17 3F 1F 77 СО 77 08 СО 00 08 СА 67 ©С СЗ Е8 0В 23 ТЕ FE 02 21 68 20 ТЕ A? FA 70 0С ЗС СЗ 85 0С F6 80 77 С9 Программа 47 0С87 21 62 20 21 64 20 0С97 20 СО 92 0А 21 6В 0СА7 98 0А 21 61 20 СО 0СВ7 0В 21 77 28 СО 8С 0СС7 21 6В 20 35 СА ЕЗ 0СО7 СО 8С 0А 21 68 20 0СЕ7 8С 8Д 21 71 20 СО 0CF7 0А 21 71 20 СО 92 0007 21 65 20 СО 92 0Д 0017 08 СО 00 08 21 75 0027 23 ТЕ FE 02 ОД 31 36 01 21 61 28 СО 8С 0А 21 65 28 36 02 21 64 20 34 34 7Е СО 8С 0Д 21 71 20 СО 92 0Д СО 08 0А 21 71 20 СО 92 0А СО 6F 0Д 0С 21 75 28 ТЕ 17 3F 1F 77 2В СО 92 0Д СЗ Д0 ВС 21 68 20 СО 92 0А СО 87 09 21 65 20 СО 8С 0Д СО 87 09 21 74 28 СО 8С 0А 21 72 20 7Е 17 3F 1F 77 CD 77 20 7Е Е6 7F СА 27 00 СЗ 9В 8С 00 СЗ 9В 0С С9 П; ограмма 48 232
0С9В 21 6В 20 36 02 21 ©CAB 20 CD ВС ©A 21 71 0CBB CD ВС 8А 21 71 20 0CCB СД ЕЗ 0С 21 75 20 0CDB 68 20 CD 92 8Д СЗ 0CEB 20 CD 92 0Д CD 87 0CFB CD 92 8Д CD 87 09 0D0B 92 8 А 21 72 20 7Е 0D1B 21 75 20 7Е Е6 7F 0D2B DA 31 8D СЗ 9В 0С 64 20 34 34 7Е CD 98 8Д 21 61 20 CD 92 8А CD 08 8В 21 77 28 CD 92 0Д CD 6F ОД 21 6В 20 35 7Е 17 3F IF 77 2В CD 8С 8А 21 А8 0С 21 68 20 CD 8С ©А 21 71 09 21 65 20 CD 8С ©А 21 71 28 21 74 28 CD 8С ©А 21 65 20 CD 17 3F IF 77 CD 77 08 CD DD 88 CA 27 0D СЗ 9B ©C 23 7E FE 02 C9 Прслрамма PJ 0D32 21 62 20 21 64 20 36 88 23 36 81 23 36 28 23 36 0D42 00 CD 9B 0C C9 -<rp' \ 0E47 CD 32 0D 21 65 20 CD 8C 0A 21 7B 20 CD 92 ©A CD ©E57 87 0C 21 65 20 CD ВС ©A 21 74 28 CD 92 ©A 21 7B 0E67 20 CD 8C 0Д 21 71 20 CD 92 ©A CD 6F ©A C9 Программа 51 0F61 CD 87 0C 21 65 20 CD ВС 0A 21 7B 2© CD 92 0A CD 0F71 32 0D 21 65 20 CD 8C 0A 21 74 20 CD 92 0A 21 7B ©FBI 28 CD 8C 0A 21 71 20 CD 92 0A CD 6F 0Д C9 Программа 5. 0E75 0E85 0E95 0EA5 0EB5 0EC5 0ED5 0EE5 0EF5 0F05 21 62 28 7E E6 88 F5 7E E6 7F 77 21 64 20 36 01 23 AF 77 23 77 23 77 23 36 01 23 36 20 23 77 23 36 82 23 36 20 23 77 CD 15 0F 21 74 28 CD 8C ©A 21 6E 28 CD 92 0Д CD 34 0F CD 15 ©F 21 75 20 7E 17 3F IF 77 21 6E 20 CD 8C ©A 21 71 20 CD 92 0A CD 87 09 21 65 20 CD 8C ©A 21 71 20 CD 92 ©A CD 87 89 21 74 28 CD 8C 8A 21 65 28 CD 92 8A 21 72 28 7E 17 3F IF 77 CD 77 08 CD DD 08 21 75 28 7E E6 7F CA 08 0F CD 34 8F C3 9C 0E 23 7E FE 82 DA 8D 8F CD 34 8F C3 9C 0E 21 66 28 46 Fl B8 77 C9 Программа 53 0F15 21 61 28 CD 8C 8A 21 71 28 CD 92 0A CD 08 ©B 21 0F25 68 28 CD 8C 0A 21 71 20 CD 92 ©A CD 6F 0A C9 П рограмма 54 233
0F34 0F44 0F54 21 64 0Д 21 21 74 20 34 34 21 68 20 CD 8C 0fl 21 71 20 CD 92 6B 20 CD 8C 8fl 21 74 20 CD 92 0fl CD 87 09 20 CD 8C 8fl 21 68 20 CD 92 8fl C9 Программа 55 0DEE 21 6E 20 CD 8C 0DFE 8C 0Д 21 74 20 0E0E 0fl 21 6E 20 CD 0E1E CD 92 0fl CD 6F 0E2E 92 0Я CD EC 09 0E3E 0Д C9 0fl 21 71 20 CD 92 CD 92 0Д CD 87 09 92 0fl 21 68 20 CD 0fl 21 77 20 CD 8C 21 74 20 CD 8C 8fl 0fl 21 6B 20 CD 21 74 20 CD 8C 8C 0fl 21 74 20 0fl 21 71 20 CD 21 77 20 CD 92 Программа 56 0D47 21 62 20 7E 0D57 21 61 20 CD 0D67 23 36 20 23 0D77 23 36 20 23 0D87 EE 0D CD 34 0D97 20 CD 92 8fl 0Dfl7 CD 92 0fl CD 0DB7 92 8fl 21 72 0DC7 21 75 20 7E 0DD7 65 20 CD 92 0DE7 66 20 46 Fl E6 80 F5 7E E6 7F 8C 0fl 21 65 20 CD 77 23 36 02 23 36 77 21 77 20 36 01 0F CD 15 0F 21 77 CD EC 09 21 65 20 87 89 21 74 20 CD 20 7E 17 3F IF 77 E6 7F Cfl DF 0D 21 0fl C3 86 0D 23 7E B0 77 C9 77 21 64 28 36 01 92 0fl 23 AF 36 01 20 23 77 23 36 02 23 36 20 23 77 CD 20 CD 8C 0fl 21 71 CD 8C 0fl 21 71 20 8C 0fl 21 7fl 20 CD CD 77 08 CD DD 88 7fl 20 CD 8C 0fl 21 FE 02 D2 D0 0D 21 Программа 57 0E40 CD 47 0D CD 92 0F C9 Программа 58 0F92 0Ffl2 0FB2 21 65 20 CD 8C 0fl 21 IF 77 23 23 36 01 23 74 20 CD 8C 0fl 21 65 71 20 CD 92 0fl 2B 7E 17 3F 36 32 23 36 42 CD 87 09 21 20 CD 92 ©fl C9 Программа 59 0F8F 0F9F 0FflF CD 75 0E 21 7E 17 3F IF 87 09 21 74 65 20 CD 8C efl 21 71 20 CD 92 0fl 2B 77 23 23 36 01 23 36 32 23 36 42 CD 20 CD 8C 0fl 21 65 20 CD 92 0fl C9 Программа 60 ПОДПРОГРАММА ИНИЦИАЛИЗАЦИИ ИРПР 0000 3E8A INI: MUI A/8AH 0002 D3F7 OUT F7H , ВВЕСТИ МС В РМС ППА 0004 3E04 MUI Ал04Н 0006 D3F7 OUT F7H ; ВВЕСТИ МС В РМС ППА 0008 C9 RET : ВОЗВРАТ ИЗ ПОДПРОГРАММЫ IN I 0000 Программа 61 234
i ПОДПРОГРАММА ВЫДАЧИ БАЙТА ИЗ МС2702 ; Б НВВПЧ - 30 - 004 ; ПЕЧАТЬ СИМВОЛА \ Б 'А' ДОЛЖЕН НАХОДИТЬСЯ БАЙТ В КОИ - 7 0000 F5 OUTS: PUSH PSW i СОХРАНИТЬ 'А' В СТЕКЕ 0001 F5 PUSH PSW 0002 DBF 6 01 s IN F6H i ЧИТАТЬ ЗП 0004 Е610 ANI 10H i ЕСЛИ НЕТ ЗАПРОСА/ СНОВА ЧИТАТЬ ЗП 0006 СА0200 JZ 01 J 0009 F1 POP PSW i ВОССТАНОВИТЬ А (КОД ПЕРЕДАЧИ) 000А D3F4 GUT F4H , ПЕРЕДАТЬ КОД В иВВПЧ 000С ЗЕ05 MUI А/ 05H , ОСТАНОВИТЬ СТР 000Е D3F7 OUT F7H 1 0010 DBF6 02*. IN F6H . ЧИТАТЬ ЗП 0012 С21000 JNZ 02 0015 ЗЕ04 MUI А/ 04H . СНЯТЬ СИГНнЛ СТР 0017 Fl POP PSW . ВОССТАНОВИТЬ А 0018 С9 PET . ВОЗВРАТ GUTS 01 02 0000 0002 0010 Программа 62 ; ПОДПРОГРАММА > В ШЕСТНАДНАТЕ ВЫДАЧИ БАЙТА В ; ЕРИЧНОМ КОДЕ i ; ПЕЧАТЬ В 16-ТЕРИЧНОМ КОДЕ ; ПЕЧАТАЕМЫЙ БАЙТ - В 'В' 0000 F5 0UT16: PUSH PSW i СОХРАНИТЬ А В СТЕКЕ 0001 Е5 PUSH Н i СОХРАНИТЬ Н/L В СТЕКЕ 0002 С5 PUSH В ; СОХРАНИТЬ В/С В СТЕКЕ 0003 78 MOU А/В i ВЫДЕЛИТЬ В КОДЕ СТАРШИЙ ТЕТРАДИ 0004 E6F0 0006 0F 0007 0F 0008 0F 0009 0F ANI F0H RRC RRC RRC RRC \ СДВИНИТЬ ТЕТРАДИ НА 4 РАЗРЯДА i ВПРАВО 000А CD1700 CALL PPP i КОДИРОВАТЬ ТЕТРАДИ В КОИ - 7 И ; ВЫВЕСТИ НА ПЕЧАТЬ 000D 78 MOU А/В i ВЫДЕЛИТЬ МЛАДШИЙ ТЕТРАДИ КОДА 000Е E60F ANI 0FH 0010 CD1700 CALL PPP i КОДИРОВАТЬ ТЕТРАДИ В КОИ - 7 И i ВЫВЕСТИ НА ПЕЧАТЬ 0013 С1 POP В i ВОССТАНОВИТЬ СОДЕРЖИМОЕ 0014 Е1 POP Н i РЕГИСТРОВ 0015 F1 0016 С9 POP PSW RET ; ВОЗВРАТ 0017 F630 PPP! ORI 30H > ФОРМИРОВАТЬ КОД ЦИФРЫ В КОИ - 7 0019 FE3A CPI 3AH ; ТЕТРАДА В 16-РИЧНОМ КОДЕ - ЦИФРА > ИЛИ БНКВА? 001В FA2000 JM KI i ЕСЛИ ЦИФРА/ ТО ВЫВЕСТИ НА ПЕЧАТЬ 00IE С607 ADI 07H ; ЕСЛИ БНКВА/ ТО СФОРМИРОВАТЬ КОД > БИКВЫ/ ДОБАВИВ 7 0020 CD0000 0023 С9 KU CALL OUTS RET i ПЕЧАТЬ ПОЛНЧЕННОГО СИМВОЛА ; ВОЗВРАТ Программа 63 235
OUT 16 0000 PPP 0017 К1 O020 OUTS <*** Программа 63 (продолжение) 7200 2А9Е23 7203 3flfl023 7206 47 7207 113F72 720Д 0Е09 720С Ifl 720D CD0060 7210 13 7211 0D 7212 С20С72 7215 163С 7217 ЗАД123 721Д 4F 721В flF 721С CD0060 721F 15 7220 0D 7221 С21С72 7224 ЗДД223 7227 4F 7228 7Е 7229 CD8060 722С 23 722D 15 722Е 8D 722F С22872 7232 ДР 7233 CD0060 7236 15 7237 С23372 723Д 05 723В С28772 723Е 76 723F 1В 7240 58 7241 00 7242 00 7243 1В 7244 5Е 7245 00 7246 1В 7247 57 7248 FF 7249 FF LHLD 239ЕН LDfl 23Д0Н мои В, fl LXI D,723FH MUI С,09Н LDAX D CALL 6800H INX D DCR C JNZ 720CH MUI D>3CH LDfl 23Д1Н MOU C,fl XRfl fl CALL 6000H DCR D DCR C JNZ 721CH LDfl 23A2H MOU Cjfl MOU fl,M CALL 6000H INX H DCR D DCR C JNZ 7228H XRfl fl CALL 6000H DCR D JNZ 7233H DCR В JNZ 7207H HLT 7100 00 3E FE 7108 10 06 FE 7110 02 40 02 7118 02 00 DC 7120 EE 40 14 7128 E4 40 3E 7130 7E F0 06 7138 FE FE 24 7140 24 C0 FE 7148 FE E0 0fl 7150 0C АЛ 2C 7158 34 40 FE 7160 FE E0 0Д 7168 FE FE 24 7170 24 C0 88 7178 80 24 48 7188 88 02 2C 7188 34 40 88 7190 88 28 28 7198 18 02 A4 71A0 24 40 D2 71A8 AC A0 0C 71B0 0C F6 24 71B8 28 00 AC 71C0 D2 60 0C 71C8 0C 06 40 71D8 80 00 FE FE FE C0 00 48 CO 00 FE E0 08 FE FE FE FC 40 E0 0C 48 08 02 48 IE FE FE FE F8 02 FE E4 40 FE A4 40 FE FE 48 FE E0 BA 56 E© ВС AA 26 40 56 24 48 FE E0 40 FE E0 0fl 56 ЕВ ОС ДА 24 40 56 64 40 FE FE 48 80 30 18 82 28 28 02 26 40 02 24 40 80 22 48 80 22 88 02 24 48 02 24 40 02 64 48 88 30 48 FE FE FE FE 68 0E FE 24 80 06 26 00 D2 60 00 AC A0 0C 96 A0 0C 96 38 00 F6 20 00 AC A0 08 D2 68 0E FE FE FE FE 80 00 Программа 64 236
74DA 00 NOP 74DB 00 NOP 74DC 00 NOP 74DD 3E1B MUI An IBH 74DF CD0060 CALL 6000H 74E2 3E59 MUI Ai59H 74E4 CD0060 CALL 6800H 74E7 7Д MOU AiD 74E8 CD0060 CALL 6000H 74EB 3E1B MUI Ai IBH 74ED CD0060 CALL 6000H 74F0 3E4F MUI Ai4FH 74F2 CD0060 CALL 6800H 74F5 3E00 MUI Ai00H 74F7 CD0060 CALL 6000H 74FA 3E1B MUI Ai IBH 74FC CD0060 CALL 6000H 74FF 3E5A MUI Ai5AH 7501 CD0060 CALL 6000H 7504 7B MOU AiE 7505 CD0060 CALL 6000H 7508 3E1B MUI Ai IBH 750A CD0060 CALL 6000H 750D 3AAC23 LDA 23ACH 7510 CD0060 CALL 6000H 7513 7E MOU AiM 7514 00 NOP 7515 CD0060 CALL 6000H 7518 05 DCR В 7519 C8 RZ 751A 0D DCR C 751B C2DD74 JNZ 74DDH 751E C9 RET 751F 7E MOU AiM 7520 0F RRC 7521 0F RRC 7522 0F RRC 7523 0F RRC 7524 C30E74 JMP 740EH 7527 7E MOU AiM 752B 23 INX H 752C 46 MOU BiM 752D 23 INX H 752E 4E MOU CiM 752F 23 INX H 7530 7E MOU AiM 7531 32AC23 STA 23ACH 7534 23 INX H 7535 C9 RET 7536 210023 LXI Hi2300H 7539 3AFF22 LDA 22FFH 753C 57 мои DiA 753D D5 PUSH D 753E CD1F75 CALL 751FH 7541 CDF073 CALL 73F8H 7544 DI POP D 7545 15 DCR D 7546 C23D75 JNZ 753DH 7549 76 HLT 73F8 CDDA74 CALL 74DAH 73F3 23 INX H 73F4 C9 RET 740E CD1574 CALL 7415H 7411 57 MOU Di A 7412 C32775 JMP 7527H 7415 E60F ANI 0FH 7417 FE08 CPI 08H 7419 F8 RM 741Д F6F8 ORI F0H 741C C9 RET 741D CD1574 CALL 7415H 7420 5F MOU Ei A 7421 C32B75 JMP 752BH Программа 65 7570 212406 7573 22А423 7576 11АА00 7579 210073 757С 0601 757Е 0Е01 7580 ЗЕ1В 7582 CD0060 7585 ЗЕ58 7587 CD0060 758А 7Д 758В CD0060 758Е 7В 758F CD0060 7592 ЗЕ1В 7594 CD0060 7597 3E4F 7599 CD0060 759С 7Е 759D CD0060 75Я0 0С 75Д1 23 75А2 ЗЕ1В 75А4 CD0060 75А7 ЗЕ59 75А9 CD0060 75ДС ЗЕ01 LXI Hi0624H SHLD 23А4Н LXI Di00AAH LXI Hi7300H MUI Bi01H MUI C,01H MUI AilBH CALL 6000H MUI Ai58H CALL 6000H MOU AiD CALL 6000H MOU AiE CALL 6000H MUI A,IBH CALL 6000H MUI Ai4FH CALL 6060H MOU AiM CALL 6000H INR C INX H MUI A* IBH CALL 6000H MUI Ai59H CALL 6000H MUI Ai01H 75AE CD0060 CALL 60B0H 75B1 3AA423 LDA 23A4H 75B4 B9 CMP C 75B5 C29275 JNZ 7592H 75B8 3E1B MUI Ai IBH 75BA CD0060 CALL 6000H 75BD ЗЕ5Д MUI Ai5AH 75BF CD0060 CALL 6000H 75C2 3E07 MUI Ai07H 75C4 CD006O CALL 6000H 75C7 04 INR В 75C8 3AA523 LDA 23A5H 75CB B8 CMP В 75CC C27E75 JNZ 757EH 75CF 3E0D MUI AiBDH 75D1 CD0060 CALL 6000H 75D4 C9 RET 75D5 CD7075 CALL 7570H 75D8 76 HLT 75D9 2AA023 LHLD 23A0H 75DC EB XCHG 75DD 2AA223 LHLD 23A2H 75E0 CD7C75 CALL 757CH 75E3 76 HLT Программа 66 237
7300 00 00 00 00 02 04 08 7310 80 88 80 80 80 80 80 7320 00 00 00 26 38 60 98 7330 00 00 00 00 00 00 00 7340 02 04 98 60 38 26 FE 7350 00 08 00 00 00 00 00 7360 04 18 60 80 00 00 00 7370 80 80 80 80 80 80 80 7380 88 80 80 80 80 88 80 7390 88 40 20 18 08 08 04 73Д8 02 02 02 04 84 08 10 10 20 28 48 48 88 80 88 88 48 40 28 28 18 88 84 82 08 04 82 08 88 88 88 88 88 88 00 00 00 08 00 00 88 08 88 00 00 00 88 98 78 18 7C 82 08 00 08 80 88 08 88 08 02 00 FE C0 30 0C 02 80 80 88 88 80 80 FE 88 80 80 80 80 80 02 0C 30 CO 80 00 00 00 84 02 02 02 02 92 FE 02 82 10 28 48 88 00 00 00 00 00 23Д8 15 00 00 73 24 86 Программа 67 742A 3AA323 LDA 23A3H 7479 CD3F74 CALL 743FH 7420 4F мои C>A 747C 3AA523 LDA 23A5H 742E ЗЕ20 MUI A,20H 747F CD0068 CALL 6800H 7430 CD8860 CALL 6088H 7482 3E0D MUI A*8DH 7433 00 DCR C 7484 CD8060 CALL 6000H 7434 С22Е74 JNZ 742EH 7487 14 INR D 7437 С9 RET 7488 10 DCR E 7438 1628 MUI D»20H 7489 C25074 JNZ 7450H 743A 1Е28 MUI E,20H 748C 76 HLT 743C С35074 JMP 7450H 743F 47 MOU BsA 7408 3E14 MUI А» 14H 7440 CD2A74 CALL 742ДН 7482 CO0860 CALL 6080H 7443 СО0074 CALL 7400H 7405 CO1060 CALL 601DH 7446 ЗЕ28 MUI A,20H 7408 05 PUSH D 7448 СО0060 CALL 6000H 7409 CDA874 CALL 74A0H 744В 78 MOU A,В 740C DI POP D 744C CD6060 CALL 6000H 740D C9 RET 744F С9 RET 7450 7А MOU A»D 749A CDA074 CALL 74A8H 7451 CD3F74 CALL 743FH 7490 C33874 JMP 7438H 7454 7А MOU A>D 74A0 218023 LXI H>23B8H 7455 ЕЕ60 XRI 60H 74A3 3AA923 LDA 23A9H 7457 C03F74 CALL 743FH 74A6 57 MOU OjA 74514 3AA423 LOA 23A4H 74Д7 7E мои A>M 745D FE09 CPI 09H 74A8 CD0060 CALL 6800H 745F СА7С74 JZ 747CH 74AB 15 DCR D 7462 7А MOU A»D 74AC 23 INX H 7463 F640 ORI 40H 74AD C2A774 JNZ 74A7H 7465 CD3F74 CALL 743FH 74B0 C9 RET 7468 3AA423 LDA 23A4H 746В FE07 CPI 87H 7460 СА7С74 JZ 747CH 7470 7А мои AjD 7471 EEE0 XRI E8H 7473 CD3F74 CALL 743FH 7476 7А MOU A»D 7477 F6C8 ORI C0H Программа 68 238
74А0 21В823 LXI H>23B0H 74АЗ 3AA923 LDA 23Д9Н 74А6 57 мои D?A 74Й7 7Е мои A,M 74А8 CD0060 CALL 6000H 74АВ 15 DCR D 74АС 23 INX H 74AD С2А774 JNZ 74A7H 74В0 С9 RET 74В1 3AA823 LDA 23Д8Н 74В4 5F MOU E?A 74В5 CDA074 CALL 74Д0Н 74В8 1D DCR E 74В9 С2В574 JNZ 74B5H 74ВС 76 HLT 74BD CDA874 CALL 74A0H 74С0 76 HLT 74С1 2АА623 LHLD 23A6H 74С4 CDA374 CALL 74A3H 74С7 76 HLT 74С8 3AA823 LDA 23A8H 74СВ 5F MOV E,A 74СС CDA374 CALL 74A3H 74CF 1D DCR E 74D0 С2СС74 JNZ 74CCH 74D3 76 HLT Программа 69 6506 3E1B MUI AUBH 6502 CD0060 CALL 6000H 6505 3E58 MUI Aj58H 6507 CD0068 CALL 6000H 650A 2A2521 LHLD 2125H 650D 7D MOU AkL 650E CD0060 CALL 6000H 6511 7C MOU A«H 6512 CD0068 CALL 600OH 6515 3E1B MUI A,1BH 6517 CD0060 CALL 6008H 651A ЗЕ5Д MUI A, 5 AH 651C CD0060 CALL 6000H 651F 2A2821 LHLD 2128H 6522 70 MOU A>L 6523 FE88 CPI BOH 7C MOU Д.-Н 6526 FA2B65 JM 652BH 652q 2F CMA 652Д 3C I NR A 6528 47 MOU B?A 652C CD0060 CALL 6000H 652F 3E1B MUI ДИВН 6531 CD0060 CALL 6000H 6534 3E4F MUI A,4FH 6536 CD0060 CALL 6008H 6539 3E82 MUI A«02H 6538 CD0068 CALL 6000H 653E 3E1B MUI ДИВН 6548 CD0060 CALL 6000H 6543 3E5A MUI A«5AH 6545 CD0060 CALL 6800H 6548 78 MOU A«8 6549 2F CMP 654A 3C 1NR A 6548 CD0068 CALL 6000u 65*E C35858 JMP 5058H Программа 70 Программа 71 2300 60 8F 44 ТЕ 02 55 64 0Д 41 64 42 60 62 6Е 55 66 2310 0А 4С 2С 60 62 4F 55 4D 2D 7F 64 62 0А 42 6! 0F 2320 59 0В 23 09 Программа 72 2300 60 8F 04 56 44 7Е 02 2310 04 55 6Е 47 55 60 55 2320 55 60 55 68 55 4D 2D 2330 23 52 2340 01 48 45 53 00 23 68 2350 00 23 68 0В 48 53 00 56 64 0А 41 64 42 62 6Е 62 65 55 66 0А 4С 2С 62 4F 67 7F 64 62 0А 42 61 0F 59 0D 0В 48 53 00 23 65 0В 45 53 23 09 Программа 73 2300 60 8F 44 ТЕ 02 55 64 0А 41 64 42 03 62 6Е 9Е 60 2310 55 66 0А 4С 2С 03 62 4F 9Е 60 55 4D 2D 7F 64 62 2320 0А 42 61 0F 59 0В 23 09 2300 60 8F 02 56 44 7Е 64 0А 41 64 42 62 6Е 62 02 55 2310 6Е 47 55 60 55 66 0А 4С 2С 62 4F 67 55 60 55 68 2320 55 4D 2D 7F 64 62 0А 42 61 0F 59 0В 23 52 01 48 2338 53 00 23 68 0В 48 53 00 23 52 53 2Е 23 60 05 0F 2340 40 5С ЗА 23 09 Программа 74 239
ПРИЛОЖЕНИЕ 2 ПРОШИВКА ПЗУ ОТЛАДОЧНОГО МОНИТОРА ДЛЯ МКП-1 5000 31 00 00 СЗ 38 00 FF FF F5 ЗЯ 1C FF C3 58 00 FF 5010 СЗ ЕЗ 09 FF FF FF FF FF C3 E6 09 FF FF FF FF FF 5020 СЗ Е9 09 FF FF FF FF FF C3 EC 09 FF FF FF FF FF 5030 СЗ EF 09 03 F7 2F C9 FF C3 F2 09 CD 46 04 32 1C 5040 FF 32 1D FF ЗЕ 02 D3 F8 21 80 00 22 00 FF 3E 2F 5050 03 F0 ЗЕ 08 D3 FF FB 76 C3 52 00 E6 01 СЯ 64 08 5060 F1 СЗ Е0 09 Fl DB F8 E6 IF EE 10 47 3fl 1C FF 4F 5070 Е6 02 С2 D2 00 79 E6 08 C2 flfl 04 79 E6 20 C2 6D 5080 03 7ё FE 10 Ffl 19 04 21 78 04 78 BE СЯ 9B 00 23 5090 23 ЗЕ FF BE C2 8Я 00 C3 25 04 5E 23 56 2Л 50А0 04 FF ЕВ Е9 11 FF FF 06 Я2 C3 Bl 00 11 00 00 06 50В0 Я1 22 02 FF 21 1C FF 7E F6 02 77 El 22 06 FF EB 50С0 00 FF СО 46 04 CD 08 01 3E FD 03 F2 C3 04 01 50D0 FF FF 78 FE 10 Ffl ЕЯ 00 79 E6 FD 32 1C FF 2fl 06 50Е0 FF Е5 2Я 02 FF EB 2Я 00 FF C9 2Я 00 FF 07 07 07 50F0 07 47 0Е 04 78 17 47 7D 17 6F 7C 17 67 0D C2 F4 5100 00 00 FF CD 11 01 C9 CO 24 01 D3 Fl 7Я D3 F0 5110 С9 45 СО 24 01 03 F7 7Я 03 F6 44 CO 24 01 03 F5 5120 7Л D3 F4 С9 E5 78 E6 F8 0F 0F 0F 0F 57 78 E6 0F 5130 06 02 5F 7А 16 00 21 59 04 19 56 05 C2 32 01 El 5140 С9 7С ВЯ С0 7D BB C9 EB 23 04 FF C3 25 04 EB 5150 2В СЗ 49 01 CD flF 00 C3 49 01 21 40 03 79 E6 88 5160 СС AF 00 ЗЯ 1C FF F6 01 E6 7F 32 1C FF 3E 01 D3 5170 F8 FB Е9 FF FF FF CD ЯС 00 CD Я4 00 CD 46 04 EB 5180 AF 47 4F D5 57 7E E6 F0 0F 0F 0F 8F 5F 7E E6 0F 5190 83 81 4F 78 CE 00 47 7Я CE 00 57 EB E3 CD 41 01 51Я0 СЯ Я9 01 ЕЗ EB 23 C3 85 01 DI C5 42 CD 24 01 03 51В0 F3 7Я 03 F2 El CD 11 01 C9 79 F6 08 32 1C FF CD 51С0 ЯС 00 СО Я4 00 EB CD 46 84 E5 CD 2F 02 22 08 FF 51D0 Е1 4Е AF 37 CO Я0 04 00 00 00 00 D2 D4 01 3E FF 51Е0 37 3F СО Я0 04 08 00 00 00 Dfl E2 01 71 7E B9 C2 51F0 10 02 Е5 05 CD 2F 02 EB 2fl 08 FF CD 41 01 DI El 5200 СЛ 0Р 02 СО 38 04 06 FF C9 CO 41 01 23 C2 DI 5210 01 ЗЕ 03 F7 21 1C FF 7E E6 F7 C9 41 F5 C5 5220 СО 38 04 С1 Fl E5 67 68 CD 11 01 El C3 06 02 2Я 5230 02 FF 01 00 00 79 86 4F 78 CE 00 47 CO 41 01 23 5240 С2 35 02 69 60 C9 CD flF 00 E5 ЗД ID FF 21 IE FF 5250 И 07 00 47 Я7 СЯ 5D 02 19 85 C2 58 02 3C 32 ID 5260 FF 01 73 23 72 23 EB CD 79 02 2fl 00 FF EB 21 75 5270 04 06 03 CD 8Я 02 C3 25 04 3E 02 F5 4E CD 93 02 5280 48 СО 8Я 02 Fl 91 F2 7B 02 C9 7E 12 23 13 05 C2 529G 8Я 02 С9 06 02 79 E6 F7 FE D3 C8 79 E6 C7 FE 06 240
П род о л ж ение 52А8 С8 FE С6 С8 84 FE С2 С8 5280 С8 79 EG Е7 FE 22 С8 79 52С0 С9 Е5 05 С5 F5 ЗЕ 10 03 52D0 32 1С FF 21 00 00 39 11 52Е8 23 46 23 88 88 88 ЕВ 73 52F8 69 СО 46 04 86 8С СО 88 5388 57 1Е 06 21 IE FF 7Е 23 5310 83 7Д 16 00 19 57 15 С2 5320 СЗ 52 00 23 11 14 FF С5 5330 4F 78 СЕ 00 47 ЗЕ СЗ ЕВ 5340 ЕЗ El Fl С1 01 Е1 ЕЗ Е1 5350 FF СО 46 04 ЗЕ 31 03 F7 5360 ЗЕ 2F 03 F2 ЗЕ 25 03 F1 5370 78 FE 10 FA 7F 03 79 Е6 5380 06 F0 07 4F 06 00 21 08 5398 03 Fl 23 ТЕ 03 F8 ЕВ 5Е 53А0 03 F2 С9 СО AF 00 ЗА 10 5380 22 00 FF 7Е 23 ВВ С2 BE 53С0 06 00 09 Cl 0С 05 С2 В0 5300 С9 С5 23 СО 79 02 С1 ЗА 53Е0 СА 25 04 91 01 07 08 2Д 53F8 83 41 СО 8Д 02 СЗ 25 04 ’5400 IE FF 5Е 23 56 23 Ё5 F5 5410 19 30 С2 02 04 СЗ СЗ 04 5420 87 Е6 F0 В0 77 СО 46 04 5430 24 01 03 F7 7Д 03 F6 С9 5440 F2 44 СО 08 01 С9 ЗЕ FF 5450 03 F4 03 F5 03 F6 СЗ 33 5460 7А 20 30 28 А1 27 Е0 25 5470 А8 2С 31 27 2С СО С1 02 5488 01 13 76 01 14 В7 04 15 5490 18 5А 01 19 4В 03 FF FF 54А0 77 46 F5 В8 С2 1F 82 F1 54В0 ЕВ 2А 86 FF СЗ 8Д 02 СО 54С0 СЗ В7 04 32 10 FF СЗ 25 FE С4 СВ 79 Е6 CF FE 81 FE СЗ СВ FE СО С8 86 81 F8 ЗА 1С FF Е6 FE F6 88 88 FF 86 88 СО 8А 02 4Е 23 72 23 71 23 78 С5 68 81 СО 11 81 С1 ЗА 10 FF В9 С2 11 03 7Е 88 СД 23 06 03 ЗЕ F0 03 F1 03 F0 СО 79 02 Cl 2F С6 03 81 77 23 71 23 70 СЗ 52 00 СЗ 14 FF 79 F6 20 32 1С ЗЕ F0 03 F6 ЗЕ 22 03 F5 ЗЕ 2С 03 F0 С9 СО 46 04 OF 32 1С FF СЗ 25 04 FE FF 11 69 04 09 ЕВ 09 7Е 23 56 ЕВ СО И 01 ЗЕ F0 FF 47 0Е 01 ЕВ 21 IE FF 03 7Е ВД СА 01 03 С5 81 ©3 СО 46 04 ЗЕ F0 03 F7 10 FF 30 32 10 FF ЗС В9 00 FF 54 50 09 30 С2 ЕС ЗА 10 FF Д7 СД 25 04 21 СО 79 02 Fl Е1 И 05 08 FF 2А 84 FF 7Е 87 87 87 2А 04 FF СО 38 04 46 СО 45 СО 24 01 03 F3 7Д 03 03 F0 03 F1 03 F2 03 F3 00 22 FA 64 70 88 31 21 20 20 28 27 Д1 25 Е0 Д7 10 54 01 И 47 01 12 4F ДЗ 03 16 F8 03 17 В9 01 FF FF FF FF FF FF FF FF IF С9 СО 46 84 2Д 80 FF AF 88 7С ЗС С2 49 82 ЕВ 84 FF FF FF FF FF FF FF 9 В. Г. Майоров 241
ПРИЛОЖЕНИЕ 3 ПОДПРОГРАММЫ ПОМЕХОУСТОЙЧИВОГО КОДИРОВАНИЯ И ДЕКОДИРОВАНИЯ ДАННЫХ С ПОМОЩЬЮ КОДОВ ХЕММИНГА С-000 CD CALL G02E 0F с-001 за 002F 5F MOU Ел A 0002 О© 0030 21 LXI H 0003 CD CALL 0031 00 0004 43 0032 00 0005 00 0033 19 DAD D 0006 79 MOU АлС 0034 4E MOU СлМ 0007 48 MOU СлВ 0035 78 MOU Ал В 0008 47 MOU Вл А 0036 IF RAR 0009 CD CALL 0037 IF RAR 000А 43 0038 IF RAR 0008 00 0039 IF RAR 000С С9 RET 00 ЗА E6 ANI 000D CD CALL 003B OF 0008 57 003C 5F MOU Ел A 000F 00 003D 21 LXI H 0010 FE CPI 00 ЗЕ 00 0011 00 003F 00 0012 Сй JZ 0040 19 DAD D 0013 18 0041 46 MOU B»M 0014 00 6042 C9 RET 0015 CD - CALL 0043 21 LXI H 0016 6D 0044 00 0017 00 0845 00 0018 79 MOU A»C 0046 IE MUI E 0019 48 MOU C»B 0847 03 001Й 47 мои Вл A 0848 7E MOU A»M 0018 CD CALL 8049 AO ANA 8 001С 57 004A 23 INX H 00ID 00 0048 EA JPE 001E FE CPI 004C El 00 IF 00 004D 00 0020 CA JZ 004E B6 ORA M 0021 00 O04F B0 ORA e 0022 00 0050 47 MOU В»A 0023 CD CALL 0051 23 INX H 0024 6D 0052 ID DCR E 0025 00 0O53 C2 JNZ 8026 CD CALL O054 E2 O027 EC 0855 00 O028 CD 0056 C9 RET O029 C9 RET 0O57 11 LXI D G02A 16 MUI D ©058 03 0028 08 0059 00 0O2C 78 MOU A.В 085A 21 LXI H O02D E6 ANI 0058 08 242
® Ф © Ф © ® ® ® О О О <3 о © © © ® © О Ф Ф О Ф Ф © *3 Ф Ф СО 1> 1> 1> 1> 1> Т> Т> *4) '43 •£> <D '43 '43 '43 •£> • Ch U1 (а! ГО Ф "И ГП t* О ГО Г СО 03 © © © © © © © © © © •© © © © ©©о©©©©©®©©©©® 8838323«28;<аа?! ©Ф®©©Ф®£'©О©©ФФ®Ф©©©Ф®®ФО©ФФ©ФФ©® ©©®©©ФО©ФФ©ФФ®®®®ФСВФФ®ФФФФФФФФФФ U4 го го *-♦- © © -и го — © Ф © © ® 4* ® &• О 4^ © ® © Ф 00 -& ГО *-* П А (II -JO М -I -J Д ©^ Q ® -J Q ГО n -I П Г - j о UJ -J © 03 © СП О '-£ -J -J -J - J -'J «33 © Ch « со '•£) - J 00 СП 43 © •- '.п ©о г.1п©сп п и-'Л ы© ©mww го i>n© О\1фф*-»43ФОГО C*-J-J'n©®rO-JO3’33©rn® ООООО&ОО&^СЮООО гогогогогогогогогогогогогогого ЫГО ГО *-►‘©©4*. ГО *-©©©©© TIITTTTIIIITITT т -ч $ sssssssssssssss to 8 © гп © I> Т> 03 I> i> m or m x> x> ч 4co0-jmia)OT 3>t? /О СЛ 7s —♦ о © ГО ” 8 Ф Ж © ® © * ФФФ © Ж ФФФЖФФФ 2жSS8S32$ fHHSs £? ss s§yS SS55^ ft © e?n ro ro — *-©®ro -от <£i © »- ГО 03 ОГИ® ГПфф»- JkCh 3 s gI x тз m x Продолжение
ПРИЛОЖЕНИЕ 4 ПРОГРАММНЫЙ МОДУЛЬ «ДИЗАССЕМБЛЕР — ТАБУЛЯЦИЯ* 6000 F5 F5 OB F6 Е6 10 СЯ 02 60 F1 С>3 F4 ЗЕ 05 03 F7 6010 OB F6 Е6 10 С2 10 60 ЗЕ 04 03 F7 F1 С9 F5 Е5 С5 6020 78 Е6 F0 0F 0F 0F 0F СО 34 60 70 Е6 0F СО 34 60 6030 Cl El Fl С9 F6 30 FE ЗЯ Ffl 30 60 С6 07 СО 00 60 6040 С9 Ifl IF IF IF Е6 07 F6 30 СО 00 60 С9 С9 05 1Я 6050 Е5 СЗ 5Я 60 05 Ifl Е5 IF IF IF Е6 07 И Е9 61 6F 6860 26 00 19 7Е Е1 СЗ 77 62 01 05 Ifl Е5 IF IF IF 1F 6070 Е6 03 И F1 61 6F 26 00 19 7Е СО 00 60 FE 53 С2 6080 87 60 ЗЕ 50 СО 00 60 Е1 01 С9 05 Ifl Е5 IF IF 1F 6090 IF Е6 03 И F5 61 6F 26 00 19 7Е СО 00 60 7Е FE 60Я0 50 С2 ЯЕ 60 ЗЕ 53 СО 00 60 ЗЕ 57 СО 00 60 Е1 01 6080 С9 13 1Л 47 СО 10 60 ЗЕ 48 СО 00 60 С9 СЗ 00 64 60С0 10 60 1В 1Й 47 СО 10 60 13 ЗЕ 48 СО 00 60 С9 2Я 6000 Я2 20 ЕВ ЗЕ 00 СО 00 60 ЗЕ 20 СО 00 60 СО 00 60 60Е0 СО 00 60 СО 00 60 42 СО 10 60 43 СО 10 60 ЗЕ 20 60F0 СО 00 60 1Я 47 СО 10 60 21 Я0 62 23 1Я К 28 BE 6100 СЯ 3F 61 ТС FE 64 С2 0F 61 70 FE ВВ СЯ 19 61 23 6110 23 23 23 23 23 23 СЗ FB 60 ЗЕ 20 СО 00 60 ЗЕ 45 6120 СО 00 60 ЗЕ 52 СО 00 60 СО 00 60 ЗЕ 4F СО 00 60 6130 ЗЕ 52 СО 00 60 ЗЕ 0Л СО 00 60 76 Я5 61 00 00 23 6140 23 7Е Е6 07 FE 06 СЯ 83 62 FE 07 СЯ ВЛ 61 7Е 1F 6150 IF IF IF Е6 07 FE 06 СЯ 83 62 FE 07 СЯ ВЯ 61 ЗЕ 6160 20 СО 00 60 СО 80 68 СЗ СЗ 64 23 7Е СО 00 60 23 6178 7Е СО 00 60 23 7Е СО 00 60 23 ТЕ СО 00 60 ЗЕ 20 6180 СО 00 60 2В СЗ 70 62 IF IF IF IF Е6 07 СО С9 61 6190 7Е Е6 07 47 СЯ Я0 61 ЗЕ 2С СО 00 60 78 СО С9 61 61Я0 ЗЕ 00 СО 80 60 13 ЗЯ Я5 20 ВЯ СЯ В8 61 F2 08 60 61В0 ЗЯ Я4 20 СЗ 7С 62 F2 08 60 76 13 1Я 47 СО 10 60 61С0 13 1Я 47 СО 10 68 СЗ ОЯ 64 СЯ 40 60 30 СЯ 41 60 6100 30 СЯ 4Е 60 30 СЯ 54 60 30 СА 69 60 30 СЯ 8Я 60 61Е0 30 СЛ 81 60 30 СЯ ВО 60 76 42 43 44 45 48 4С 40 61F0 41 42 44 48 53 42 44 48 50 FF FF FF FF FF FF FF 6200 2А Й4 20 Е0 2Й Я2 20 ЗА А? 20 4F ЗЕ 20 СО 00 60 6210 00 С2 00 62 44 СО 10 60 45 СО 10 60 ЗЕ 20 СО 00 6228 60 ЗА А6 20 4F ЗЕ 20 СО 00 60 46 СО 10 60 23 7С 6230 BA С2 39 62 70 В0 СА 45 62 00 С2 25 62 ЗЕ 00 СО 6240 00 60 СЗ 07 62 ЗЕ 00 СО 00 60 76 ЗЕ 8Я 03 F7 ЗЕ 6250 04 03 F7 СЗ CF 60 ЗЕ 0Я 03 F7 ЗЕ 04 03 F7 СЗ 00 6260 62 F2 00 60 ЗЕ 00 СО 00 60 76 FF FF FF FF FF FF 6270 2В 2В 2В 7Е СЗ В7 61 CD 00 60 DI С9 ВВ Cfl В9 61 62ВВ СЗ 61 62 13 1Я 47 CD ID 60 ЗЕ 20 1В 00 00 СЗ СЗ 6290 64 ЗЕ 20 CD 00 60 CD 00 60 00 00 СЗ 6Я 61 FF F2 62Я0 00 FF 00 4Е 4F 00 20 02 EF 40 53 54 41 58 01 CF 244
П родолжение 6286 47 4С 58 49 20 03 CF 4B 49 4E 58 26 04 C7 36 49 62С6 4Е 52 28 05 С7 ЗВ 44 43 52 2B 66 C7 36 40 56 49 6208 20 07 FF 00 52 4С 43 20 69 CF 46 44 41 44 20 6Д 62ЕВ EF 40 4С 44 41 58 0B CF 4B 44 43 58 26 BF FF B6 62F0 52 52 43 20 17 FF 00 52 41 4C 20 IF FF 66 52 41 6380 52 20 22 FF 7В 53 48 4C 44 27 FF 60 44 41 41 26 6310 2Д FF 70 4С 48 4С 44 2F FF 60 43 4D 41 20 32 FF 6320 7В 53 54 41 20 37 FF 08 53 54 4C 20 ЗД FF 76 4C 6330 44 41 28 3F FF 00 43 4D 43 26 76 FF 06 48 4C 54 6340 20 40 СВ 32 4D 4F 56 20 86 FB 2B 41 44 44 26 88 6350 F8 20 41 44 43 20 90 F8 20 53 55 42 20 98 FB 26 6360 53 42 42 20 АВ F8 20 41 4E 41 2B AB FB 26 58 6370 41 20 ВВ F8 2В 4F 52 41 20 B8 F8 20 43 4D 50 26 6380 СВ FF ВВ 4Е 5Д 20 Cl CF 5B 58 4F 56 26 C2 FF 6390 70 4Д 4Е 5Д 20 СЗ FF 70 4A 4D 56 20 C4 FF 70 43 63А0 4Е 5Д 2В С5 CF 50 50 55 53 48 D6 FF 60 53 43 49 6380 20 С6 FF 66 41 44 49 28 C8 FF 60 52 5fl 26 2B C9 63С0 FF 00 52 45 54 28 CA FF 70 4Д 5Д 20 20 CC FF 7B 6300 43 5Д 2В 20 СО FF 70 43 41 4C 4C CE FF 60 41 43 63Е0 49 20 С7 С7 10 52 53 54 26 OB FF 00 52 4E 43 26 63F0 02 FF 7В 4Д 4Е 43 20 D3 FF 66 4F 55 54 20 D4 FF 6400 70 43 4Е 43 20 08 FF @0 52 43 20 20 DA FF 70 4A 641@ 43 20 20 ОВ FF 60 49 4E 20 20 DC FF 70 49 43 20 6420 20 DE FF 60 53 42 49 20 E0 FF 00 52 50 4F 20 E2 6430 FF 70 4А 50 4F 20 E3 FF 00 58 54 48 4C E4 FF 70 6440 43 50 4F 20 Е6 FF 60 41 4E 49 20 E8 FF 00 52 50 6450 45 20 Е9 FF 00 50 43 48 4C EA FF 70 4A 50 45 20 6460 ЕВ FF 00 58 43 48 47 EC FF 70 43 50 45 20 EE FF 6470 60 58 52 49 20 F0 FF 00 52 50 20 20 F2 FF 70 4Д 6480 50 28 20 F3 FF 00 44 49 20 20 F4 FF 70 43 50 20 6490 20 F6 FF 60 4F 52 49 20 F8 FF 00 52 4D 20 20 F9 64А0 FF 00 53 50 48 4С FA FF 70 4A 4D 20 20 FB FF 00 64В0 45 49 20 20 FC FF 70 43 4D 20 20 FE FF 60 43 50 64С0 49 20 FF ЗЕ 20 CD 00 60 CD 00 60 C3 DF 64 FF FF 6400 13 13 1А 47 СО ID 60 C3 C2 60 IB IB C3 91 62 3E 64Е0 20 СО 00 60 СО 00 60 C3 6A 61 FF FF FF FF FF FF 64F0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 245
ПРИЛ0ЖЕНИЕ5 ПРОГРАММА «КАЛЬКУЛЯТОР» 5000 21 00 22 22 98 20 22 92 5010 Е5 51 ЗЕ 00 32 Я1 20 11 5020 00 6Е 26 00 29 19 22 9А 5030 20 СО 20 09 00 00 00 СЗ 5040 21 00 00 22 98 20 21 00 5050 23 72 22 9С 20 С9 FF FF 5060 20 23 22 92 20 С9 21 83 5070 23 13 05 С2 6Е 50 С9 21 5080 20 СО 92 ©Я 21 88 20 СО 5098 20 СО 8С 0Д 21 8С 20 СО 50Я© 20 06 0F 7Е 12 2В 1В 05 5080 ©А 21 80 20 СО 92 ©fl С9 50С0 7Е 12 23 13 85 С2 С© 58 5000 8С 20 СО 92 ВЛ С9 11 86 50Е0 7Е 12 71 23 13 05 С2 ОЕ 50F© 20 С9 21 89 20 СО 8С ©А 510© 2© СО 8С ©Я 21 74 20 СО 5110 ©Я 21 89 26 СО 92 ©Я СО 5126 ©Я 21 61 2© СО 92 ©Я С9 5138 2© СО 92 ©Я СО С9 50 С9 5140 20 СО 92 0Я СО С9 50 С9 5150 ©А 01 0© 20 ЗЕ ©Е 21 74 5160 Е5 21 71 20 СО 8С 0Я Е1 517© 65 68 С9 Е5 СО 48 51 Е1 5180 73 51 ЕВ СЗ 9В 53 2Я 92 5190 51 FE 07 00 Ffl ЯЗ 51 01 51Я0 ЗЕ 01 С9 01 00 2© ЗЕ ©1 5180 Е1 Е5 СО 8С 0Я 21 74 20 51С© 20 СО 8С 0fl El Е5 СО 92 5100 СО Я9 51 С9 СО 5Е 50 23 51Е© СЗ 4F .5© FF FF 2Л 98 20 51F0 2© С9 2Я 9С 2© 56 2В 5Е 520© С9 СО 73 51 29 29 Е8 2Я 5210 СО F2 5© СО ЕС 09 СО 0В 5220 СО 87 09 СО ©В 51 С9 FF 523© СО 6F ©Я СО ©В 51 С9 СО 524© 20 7Е Е6 С0 СЯ 4С 52 7Е 5250 С9 FF FF FF FF FF FF FF 5260 FF FF FF FF FF FF FF FF 5270 FF FF FF СО Е2 52 01 ©0 5280 0Л 21 89 20 СО 8С ©Я 21 529© 21 74 2© СО 8С ©Я 21 89 52Я0 21 89 20 СО 8С 0Я 21 71 528© 92 ©Я СО ЕС 09 21 74 20 52С6 ©fl С9 01 00 00 AF 21 89 5200 2Я 92 20 7Е Е6 0F 4F 06 52Е© ©fl С9 21 89 20 СО 20 09 52F© 52 ЗЕ FF 32 Я1 20 76 21 5300 F© СЗ F1 52 СО 69 53 СЗ 5310 2Я 92 2© 7Е Е6 ©F 2Я 9Е 5326 СЗ 1Я 53 СО 66 5© СО 10 533© 92 ©Я С9 СО 1© 53 Е5 21 534© ©Я С9 СО 5Е 50 6Е 26 0© 535© 8С ©Я 21 89 2© СО 92 ©Я 536© 8С ©Я СО 42 53 СО 92 ©Я 537© СВ 51 СО 01 52 СО 8С ©Я 538© 1© 53 СО СВ 51 СО 01 52 539© СО 92 ©Я С9 56 2Я 98 2© 53Я0 ©1 43 32 ЗЕ ©2 21 89 2© 538© 87 0С СО 28 51 С9 СО 1В 53С© СО 1В 51 СО 47 0Е СО 38 530© СО 38 51 С9 СО 1В 51 СО 53Е© 51 СО 4© ©Е СО 28 51 С9 53F© 51 С9 СО 1В 51 СО 8F 0F 20 21 08 21 22 9Е 2© СО Л© 56 2Я 92 2© ©© ©0 0© 20 7Е 23 66 6F Е9 21 89 17 5© 21 ©С 22 22 92 2© 21 22 9Е 2© СЗ 0F 5© 73 СО 5Е 5© СЗ 2Е 5© 2Я 92 20 И 80 2© ©6 ©9 7Е 12 83 2© Е5 СО 8С ©Л 21 86 8С ©Я Е1 СО 92 ©Я 21 89 92 ©Я С9 21 8В 20 11 8Е С2 ЯЗ 5© 21 8С 20 СО 8С 11 80 20 21 83 2© 06 ©С С9 21 89 20 СО 8С ©Л 21 20 21 89 20 06 03 1А 4F 50 С9 2Я 92 2© 28 22 92 21 71 2© СО 92 ©Я 21 86 92 ©Я С9 21 74 2© СО 8С 77 58 С9 21 89 26 СО 8С 21 65 20 СО 8С ©Я 21 89 21 74 2© СО 8С ©Я 21 89 СО 8С ©Л 21 71 20 СО 92 2© СО 92 ©Я СО 77 ©8 С9 СО 92 ©Л С9 2Я 72 20 44 СО 6© 51 СО 6С 51 С9 СО 2© 7Е Е6 ©F FE ©4 Ffl 90 0© 0© ЗЕ ©Е С9 01 00 Я© С9 Е5 21 71 2© СО 92 ©Я СО 92 ©Я СО 87 09 21 74 0Я Е1 С9 Е5 СО 86 51 Е1 00 ©О 23 ЕВ 2Я 9С 20 23 22 81 20 21 82 20 22 9С 28 22 9С 2© ЕВ 22 92 28 9Е 2© 19 С9 FF FF FF FF 51 С9 FF FF FF СО F2 50 FF FF СО Е2 52 СО F2 50 ЗЕ 52 СО 10 52 С9 21 8Я Е6 3F 77 С9 7Е С6 80 77 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 28 ЗЕ ©1 21 74 20 СО 92 71 20 СО 92 ©fl СО 6F ©Л 20 СО 92 ©Я СО С9 50 С9 20 СО 92 ©Я 21 74 2© СО СО 8С ©Я 21 89 20 СО 92 20 СО 92 ©Я С9 СО 66 58 0© ЗЕ ©Е 21 89 2© СО 92 ЗЯ 8Я 20 Е6 3F С© СЗ F1 89 2© СО 8С ©Я ЗЕ С© Я© 58 50 СО 7F 53 СЗ 58 50 2© 0© 87 С8 23 23 23 30 53 СО 8С ©Я 21 89 2© СО 89 2© СО 8С ©Я Е1 СО 92 СЗ 04 52 53 СО 42 53 СО С9 FF FF FF 21 89 20 СО С9 СО 66 50 СО 1© 53 СО 21 89 2© СО 92 ©Я С9 СО Е5 21 89 20 СО 8С ©А Е1 19 С9 FF 2Я 98 2© 19 С9 СО 92 ©Я С9 СО 1В 51 СО 51 СО 32 00 СО 28 51 С9 51 С9 СО 1В 51 СО 61 ©F 47 ©О СО 28 51 С9 СО 1В СО 1В 51 СО 75 ©Е СО 28 СО 28 51 С9 FF FF FF FF 246
Продолжение 5400 5410 5420 5430 5440 5450 5460 5470 5480 5490 5400 54В0 54С0 5408 54Е0 54F8 5508 5510 5520 5530 5540 5550 5560 5570 5580 5590 5500 55В0 55С0 55D0 55Е0 55F0 5600 5610 5620 5638 5640 5650 5660 5670 5680 5690 5600 5680 56 СВ 5600 56Е0 56F0 5700 5710 5720 5730 5740 5750 5760 5770 5780 5790 5700 57В0 57С0 5700 57Е0 57F0 заоо 5810 СО 8С 58 52 86 71 54 8С 58 СО F1 00 FF СО 20 СЗ 20 21 89 54 71 СО С9 55 СО 89 21 21 89 55 СО FF 52 СО 58 С0 00 СЗ СЗ 66 50 СО 1С 1С 8F 8F 04 04 00 00 84 84 С1 6Е 80 80 00 00 80 80 В0 80 Е6 Е6 Е2 00 50 СЗ 20 20 01 00 50 94 С1 28 СО 5Е СО СС 09 89 20 FF 20 8С 01 СЗ 10 20 89 89 20 28 5Е FF СЗ 5Е 50 53 СО 58 58 58 СЗ 5С 54 54 55 55 53 53 53 53 56 56 54 55 56 56 55 55 55 55 55 55 55 55 52 21 СО 58 СО СО 07 21 СЗ 54 21 ЗЕ 5Е 50 20 54 30 20 СО СО 01 00 СО СС 53 СО 20 20 СО 28 50 СО 58 54 FF СЗ 04 58 50 СО 58 53 1С СО 89 66 50 73 92 24 74 80 С9 71 04 50 56 09 СО 80 СО 8С 10 00 Е1 5Е 54 СО 20 СО СО 8С СО СЗ 10 50 СЗ 58 80 58 53 FF СО 08 58 F7 20 50 СО 51 00 ЗЕ 55 20 СО С9 20 30 5Е 28 8С 00 53 00 СО 50 СО СВ 09 20 8С 00 7F 2Е 52 СО 52 СО СЗ 37 70 СО 02 СО FF СО 94 СО 98 80 50 Е6 00 ЗЕ Е5 ЗЕ 92 СО 04 51 30 09 00 ЗЕ 51 50 СЗ OF 28 52 СО 52 00 СО 20 С9 02 64 С9 50 20 21 5Е 20 СС 54 6В 58 52 FF 89 51 92 00 01 73 08 20 5Е 20 СО 58 СО F3 54 74 СО СО 50 СО 21 СО 58 СО СО FF 21 38 68 СО 50 Е2 8С FF CD C3 ID 21 21 00 CD C2 00 20 01 FF 5E 89 58 CD 54 21 CC 21 20 58 32 50 21 55 FF 21 32 C9 FF 3E 50 C3 CO 00 53 52 CO B8 50 FF 54 54 55 56 53 56 53 56 56 56 54 55 56 56 55 65 55 56 55 56 55 56 СО 92 58 52 32 08 21 92 FF 20 92 54 5Е 20 20 СО 3F ЗЕ СВ СО 01 00 5Е 51 СО 80 30 ЗЕ СВ 22 СО 58 54 СО СО 00 50 FF СЗ 58 53 СО 1С FE 8F 8F 04 04 00 00 84 84 74 6Е 80 80 00 08 80 88 80 80 Е6 Е6 1В 00 50 СЗ 64 0В 71 00 FF С5 00 С9 50 19 Е6 5Е С2 С0 00 8С СО 78 50 СЗ 7F 20 80 СВ 00 92 04 50 51 СО СО 58 20 СО 20 СО FF F5 СО FF 76 22 3F 50 F3 00 F0 00 92 Е6 СО СС 51 Е6 20 00 F0 20 51 СО 58 54 53 СО ОЕ 51 50 СО 58 53 1С 96 8F 8F 04 04 00 00 84 84 Е0 1F 80 80 00 00 80 80 ВВ 80 Е6 Е6 СО С9 С2 50 21 38 СО 6F FF 08 СО СО 92 00 СЗ 54 F2 FC 21 00 3F 5Е 54 22 3F Е6 F2 00 СЗ СО 06 50 С9 СЗ FF 28 С9 00 СО 51 ЗЕ 70 38 СЗ 20 2Е 54 21 58 СЗ 5Е СО 09 55 2Е 51 СЗ 51 СО 52 50 СЗ F3 50 5Е 54 СО 28 87 61 СЗ F2 20 58 СЗ 50 СЗ 50 50 СЗ 80 50 50 51 58 92 58 СО 89 СЗ ОЕ 50 92 21 СО 50 СЗ 2Е СЗ 54 8F 55 5Е 88 50 СЗ СО 00 74 5Е СО 2Е 50 80 FF 55 СО 50 55 CD 58 53 00 00 Е8 73 50 СО 58 FF 1С 34 8F 16 04 00 00 47 84 35 FC F8 80 2С 00 00 80 50 80 7Е Е6 78 BF* 55* BF~55* BF 55 BF 55 BF 55 BF 55 BF 55 BF 55 BF 55 BF 55 BF 55 BF 55 8₽ 55 BF 55 8F 8F 04 04 00 00 84 84 С9 10 80 80 00 00 80 80 80 80 Е6 Е6 54 54 55 55 53 53 53 53 56 56 54 55 56 56 55 55 55 55 55 55 55 55 00 FF 08 СО 58 1С 2Е 8F 04 04 00 00 84 70 6Е 80 80 08 00 80 80 80 88 Е6 Е6 80 00 58 FF 52 СЗ 33 50 54 54 55 55 53 53 53 53 56 56 55 55 56 56 55 55 55 55 55 55 55 55 00 86 00 СО СО 58 50 СЗ 4С 54 55 55 55 53 53 53 53 56 56 55 56 56 55 55 55 55 55 55 55 55 ОС 53 52 СО 58 СЗ 54 56 55 53 53 53 56 56 55 56 56 55 55 55 55 55 55 55 55 СО 3F 58 55 2Е ЕО 50 СО 58 58 7F СЗ 80 СО СЗ 58 54 СО 00 58 58 50 СЗ 58 53 FF 1С 22 8F 10 04 04 00 ЗЕ 84 40 89 ОЕ 80 23 00 6F 80 63 80 69 Е6 90 58 СО СО 58 50 СЗ FF 54 54 55 56 53 56 53 56 56 56 54 54 56 56 55 56 55 56 55 56 55 56 58 33 54 СЗ 23 50 54 54 55 СЗ 58 зс 50 58 1С 8F 8F 04 04 00 00 84 84 F2 6Е 80 80 08 08 80 80 В0 80 Е6 Е6 53 53 53 53 56 56 55 55 56 56 55 55 55 5fe 55 55 55 55 247
ПРИЛОЖЕНИЕ 6 ПРОГРАММА ПЕРЕВОДА ЧИСЕЛ ИЗ ДЕСЯТИЧНОГО КОДА В ДВОИЧНЫЙ И ОБРАТНО 6806 21 04 21 11 681© 0F С2 СО 68 6820 СЗ 55 69 21 6830 85 ЕВ CD flD 6840 3F 6fl 3fl 02 6850 0D Gfl 11 87 6860 C9 01 ©2 02 687© CD 4fl 6B E5 688© 08 E8 21 04 6890 0© 6B Ifl EG 68fl© ЕЗ Ifl 87 C4 6880 80 Cfl P8 68 68C© 88 21 CD 63 68D0 05 21 21 04 68E0 BE Gfl 11 05 68F© E3 48 Cfl 12 6900 C2 0C 69 Ifl 6910 F2 68 E3 21 6920 EB 35 ЕВ E3 6930 68 FF FF FF 6946 FF FF FF FF 6950 23 7E 12 IB 6968 ©6 02 CD»63 697© 38 68 CD 38 6980 06 21 EB 0© 6990 4fl GB 21 06 69fl0 04 C3 16 69 69B© FF FF FF FF 69C0 FF FF FF FF 69D0 FF FF FF FF 69E0 FF FF FF FF 69F0 FF FF FF FF 6fl0© E5 C5 3E 00 Gfll© 8E 77 3E 08 Gfl20 C5 05 7D 88 6A30 29 29 7C 81 6fl4© C5 05 7D 88 6fl5© El C9 E5 C5 6Я60 Cl El C9 E5 Gfl70 El C9 32 14 6fl8© CD 3F Gfl EB Gfl90 21 86 77 El 6flfl© CD 3F 6fl CD GflB© F8 3E 01 EB 6flC0 CD 0© 6fl EB GflD© Efl Gfl 7E E6 6flE0 72 6fl 23 0D GflFB 7E 8F 27 77 6B00 E5 C5 D5 16 6B1© 17 57 E5 D5 83 21 01 01 01 CD 3fl 04 21 B7 Cfl CD ©7 21 86 03 36 0© 6fl EB 23 3fl 09 21 21 E6 F0 Cfl 52 68 21 04 CD 4D 69 00 21 88 21 CD 00 6fl 3E 10 32 05 21 21 21 04 ©4 7E D6 ©4 F8 C4 B© 6B E3 35 80 6B IB ©5 CD 38 05 EB CD flD GP EB 6fl El 7E C6 08 77 21 E5 01 02 02 11 21 2E 36 00 2B 36 69 3E 0© EB CD 72 D6 88 12 3E 00 CD ©9 21 7E EG 80 C2 C3 16 69 EZ 23 ©5 FF FF FF FF FF FF FF FF FF FF FF FF C9 21 0F 21 11 0© 6fl 06 ©4 3fl 04 21 6B CD 38 6B 0D C2 ©0 ©0 CD BB 6fl 21 21 E5 11 09 21 21 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 77 ©5 23 C2 04 Gfl 23 05 Cfl 1C 6fl Dfl GF 04 ©E 80 7E E5 4D El 77 2B 05 C2 6F ©4 B7 7E IF 77 D5 B7 Ifl BE 12 23 C5 05 Ifl 77 23 13 21 E5 C5 21 15 21 CD 00 Gfl ЕВ E5 05 78 07 4F C3 9D 6fl 52 Gfl 0D C2 9fl 6P 23 CD 0D 6fl 2B EB 7E C6 00 C2 D2 6fl 0F 07 07 07 ©7 CD C2 D2 6fl CD flD GP 23 0D C2 F© 6fl Cl ©В 0E 00 7E B7 17 16 00 62 GB 29 29 4fl 6B 3fl 02 21 E6 68 FE 04 D2 61 68 CD 3F 6fl CD 3F 6fl EG C© Cfl 42 68 CD CD 86 6B 3E 01 CD 21 89 2© CD 63 GA 11 08 21 21 11 21 13 21 36 00 23 36 77 Cfl 9D 68 E3 CD СЗ 8B 68 21 05 21 GB E3 35 E3 Ifl EG 23 CC 9E 6B EB 21 C3 23 68 3E 00 32 08 21 21 08 21 CD 0© ©4 04 E3 7E B7 6fl 3fl 09 21 B7 EB 2B 6B E3 35 ЕЗ C3 27 69 E3 CD 38 6B CD 93 6B El C3 23 FF FF FF FF FF FF FF FF FF 7E 12 IB 21 06 04 CD 0© Gfl 4F B7 CD 38 6B CD GB 69 01 02 02 11 08 21 11 11 2! CD ©5 21 36 10 EB 06 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF Cl El C9 E5 C5 87 1© Gfl Cl El CQ E5 6F 26 00 29 29 29 28 Gfl Cl El C9 E5 28 85 C2 47 Gfl Cl 13 85 C2 56 Gfl 01 ©5 C2 66 6fl 01 Cl CD 63 6fl CD IF Gfl 70 80 GF 04 3P 14 CD IF 6fl CD 52 6P Ci El C9 Ifl FE 80 C9 E5 C5 D5 2B ©4 23 0D C2 C4 6fl C3 72 Gfl 7E EG F© CO DI Cl El C9 E5 C5 El C9 FF FF FF FF F5 82 5F Fl 3E ©0 19 59 19 4C 7D DI 248
Продолжение 6В20 6В30 6В40 6В50 6В60 6870 6880 6890 6ВД0 6880 6ВС0 6BD8 6ВЕ0 6BF0 6С00 6С10 6С20 6С30 6С40 6С50 6С60 6С70 6С80 6С90 6СД0 6СВ0 6СС0 6СО0 6СЕ0 6CF0 6D00 6D10 6D20 6030 6040 6050 6068 6070 6080 6090 6ОА0 6ОВ0 6DC0 El 77 23 05 С2 07 23 05 02 2D 6В С1 ЗА 6В Cl El С9 FF 5F 0С CD 00 6Д ЕВ 6В СЗ 82 6В СО 80 IF CD 0D 6fl CD 80 64 6В DI Cl El С9 Cl El С9 05 ЕВ CD 3F 6Д 7D 80 30 6F D5 Е5 05 ЕВ CD ДО CD 63 6Д 04 01 AF 6Л ЕВ С1 85 7D 88 С2 08 6В СЗ FB 6В 38 6В ЕВ CD ЕЕ 6Д ДР 32 02 21 21 08 1В 1Д 32 05 21 4F 6В CD 38 6В 79 FE 77 СЗ 7С 6D В7 СД CD 86 6В ЗЕ 01 CD 23 flF 32 05 21 С9 2В СД В7 6С flF 2В 21 05 21 ЕЗ CD 00 91 6С ЗД 03 21 С6 00 34 ЕЗ CD 3F 6Д 21 В7 CD 38 6В CD 77 flF 12 Cl El 0D 21 01 03 02 CD 3F 77 2B 77 CD 12 6D 05 05 1Д B7 C4 02 ЕЕ 6fl C3 E2 6C El 6Д C9 CD IF 6Д CD 21 C9 11 11 21 3E CD 3F 6Д CD 3F 6fl CD 3F 6Д EB 34 7E 0E 02 11 00 21 CD 2B 6B 06 02 21 01 B7 C2 6D 6D 2B 0C 32 03 31 C3 57 6C 04 02 CD 00 6Д AF 21 00 68 C3 99 6D 06 20 CD 63 6Д 06 6D ЕЗ E9 21 FC 23 21 DC 23 EB CD 63 6B Di Ci El C9 El C9 E5 C5 7E FF FF FF FF E5 7E C6 08 C2 69 6B ЕВ 7E EB. F5 6B Fl E6 0F CD E5 C5 7E 2F 77 AO 6fl EB 23 CC 7E F6 88 77 21 6fl 13 21 85 21 12 C9 C5 D5 E5 6F 84 7E C6 00 E! E5 78 17 17 ЕВ E3 25 C2 ED 21 11 SB 20 Ifl 7E 2B 06 02 B7 80 Dfl 34 6C 21 7C 6D FE BE 02 0D 6Д 3E F8 32 6A 21 08 21 11 77 2B 77 12 00 6B E3 7E B7 СД 01 27 32 03 21 C3 77 6C ЕЗ E5 38 6B CD 38 6B C2 74 6C El C9 6Л CD 3F 6Д CD E5 21 05 21 7E 60 E3 7E B7 CA 23 23 06 02 EB 3F 6fl 3fl 03 21 84 32 03 21 C9 AF 2B 77 2B 77 FE ОЕ ЕВ C2 38 C8 6B 06 84 2B 21 0E 01 7E E6 7E E6 F0 C2 6D 3E 04 32 03 21 32 83 21 C3 57 21 00 6C E5 21 04 EB 11 FC 23 11 00 21 06 04 6fl 76 FF FF FF E5 C5 4E 77 79 17 77 23 05 C2 C5 D5 0D 7B 81 6B 2B 0D C2 56 E6 F8 IF IF IF 00 6Л IB 0D C2 05 23 C2 88 6B 9E 6B C9 E5 CD 05 21 34 El C9 7E C6 08 77 El C5 41 EB CO 00 C2 E6 68 28 05 17 67 ЕЗ B7 CD 6B El Di Cl C9 77 IB 23 1Д 77 FC 40 6C CD 38 02 21 3E 0F B6 BB 6C C3 IB 60 02 21 C9 06 02 0Д 21 7E 23 B6 00 00 06 05 E5 99 6C 1Д B7 C2 C3 73 6C 00 00 C5 06 02 21 00 CD 38 6B 1Д B6 11 0F 21 21 08 C8 6B flF ЕВ 2B 06 0E 77 E3 01 F5 6C 35 E3 CD 21 00 21 CD 63 C6 01 27 32 03 21 08 21 06 02 06 04 11 05 21 6D CD 4E 6C 23 2B CD 2B 6B CD F0 C2 76 6D 7E 6D 0C 3E 04 91 C9 21 00 21 01 6C FF FF FF FF DC 23 11 00 21 CD 63 6A 21 B3 CD 63 6A 06 20 FF FF FF FF FF 249
ПРИЛОЖЕНИЕ 7 РАСПЕЧАТКА ПРОГРАММЫ «КРОСС-СРЕДСТВА НА СПП-02» НАЧАЛЬНЫЙ АйРЕС" rtiPEC 0 1 2 3 4 5 6 7 8 9 A В C D E F 0080 47 5E 99 09 9A 09 09 09 09 7F c:c 48 21 AD 42 5P euie FF 4C E7 47 47 58 48 22 AD 44 58 58 48 24 D3 IE 6820 21 BC 53 21 58 58 58 48 25 D3 30 DO 00 82 18 BB 0036 03 21 E8 32 E2 0E 5B 48 26 AD 4C 5B 12 B4 21 A0 0040 31 25 AO 41 A0 22 25 22 5B 48 27 4D Al A0 21 84 0050 12 A0 62 25 22 5B 48 2B A9 06 E3 04 B4 9B 5B D3 0060 04 95 B9 58 48 2C D5 52 24 BC 03 21 BC 13 21 5B 0070 48 2A D2 06 D3 76 4D 09 48 2D D2 07 D3 7F 40 09 0080 48 2E D2 07 D3 55 40 09 48 2F D2 07 D3 64 4D 0Q 0890 46 3F AC 80 D0 03 01 68 4D 08 20 П9 49 47 64 40 80А0 A8 EC 81 CB 48 34 D6 10 D7 07 9C IB D5 02 E3 07 0006 48 32 D5 01 D6 10 D7 0C EC 88 D2 02 BB 02 BB 00СО DO 80 88 10 BE 03 A9 80 BB 32 BC 03 DO 00 SF 10 00D0 E3 05 DO 40 BB 02 9C IB E7 38 E3 05 DO 04 BB 02 00Е0 D6 10 D7 06 9C 28 48 33 E3 22 48 30 B4 39 2B 48 00F0 35 9C 18 D5 01 E3 15 48 31 B4 38 D3 FE 88 37 BC 0100 73 A9 06 A0 28 48 36 94 8B 05 02* 04 00 EC A9 B4 0110 B9 DI FO B8 21 A8 00 58 5E D2 00 DO 00 DI 04 B2 0120 89 84 95 4D D6 D0 OD DI E0 4D 58 B0 68 81 88 95 0130 B5 2C 9D IB 26 A0 25 95 85 2C 9D IB 27 A0 25 AO 0140 18 ED 9A E8 5A EC A9 E2 19 4D 56 5B 48 00 ED 38 0150 B3 48 23 5E 58 2A 03 0Д 21 90 1C A0 1C 5B 48 01 0160 00 BC 17 00 BC 16 5B 48 02 84 49 28 9D IB 58 48 6170 03 B4 39 DI FE 88 13 B4 93 A9 06 A0 29 95 89 5B 0180 48 06 D2 00 BC 53 BC 05 D0 00 88 98 BC 43 D4 00 0190 80 9A BC 03 80 9A BC 50 BC 43 56 46 07 03 0F BC 01130 35 88 63 B8 15 D2 00 D4 00 80 9A D3 F0 B8 53 BC 0180 05 DO 00 80 A8 BE 03 58 48 08 A8 00 E3 05 BA 01 01С0 AO 18 58 48 09 D0 00 D2 00 D3 02 B2 98 6C 03 5B 0100 48 0A DO 00 D2 00 D3 80 82 98 BE 01 BC 03 Д9 8:' 01Е0 D3 01 58 48 08 D6 10 D7 07 9D IB 58 48 0C D6 10 01FO D7 06 D2 FE 98 2B 98 38 EC 88 D5 01 33 ED 88 5P 0200 48 OD D6 10 D7 06 03 01 90 28 B8 23 58 48 OE D6 0210 10 D7 04 95 88 58 48 OF D6 10 07 04 84 83 31 58 8220 48 10 84 39 D2 00 DI 01 88 31 AS 01 D2 30 DI 06 0230 88 13 A9 00 DI 19 A9 02 DI 79 A9 04 DI 59 119 06 0240 DI 09 BB 21 DO EF D2 10 D3 06 4D 28 CC 5B 5B 48 О250 12 AC BD D6 10 D7 08 B4 B3 95 9B Al 19 9C 09 Al 0260 19 9C 19 AC 8D B4 93 31 AF 8D AF 8D 58 43 13 AC 0270 80 D6 10 07 08 84 B3 95 9B 9D 19 AO 19 90 09 A0 0280 19 AC 80 84 98 31 AF 8D AF BD 58 48 37 AC 8D AC 0290 9D AC AD 00 00 D2 00 03 C8 EA 89 E3 08 Bl 98 D3 02А0 32 21 E3 0F D3 64 EA 89 E3 08 Bl 98 D3 31 21 E3 0280 02 22 D2 0A D3 30 Д2 12 E3 07 Al AB A0 19 E2 09 02С0 A9 30 E3 04 21 D3 30 BB 13 21 AF AO AF 90 AF 80 0200 58 48 38 AC 90 AC AD DO 00 DI 80 20 A9 7F E3 20 02Е0 A9 31 E3 07 A9 30 E3 05 E2 0E BB 18 21 A3 81 E3 02F0 2A D2 00 D3 80 D4 00 BC 15 B2 9A BC 41 E2 23 Д8 0300 80 E2 27 BC 15 D2 00 03 02 D4 00 B2 9A BC 51 BA 0310 05 B8 50 D5 48 24 22 24 E2 3E AF AD AF 9D BC 01 8320 5B IF 04 1A 05 24 04 24 05 IF 0A 1A 08 24 0A 24 0330 08 IF 10 1A 11 24 10 24 11 43 04 3F 05 33 04 33 0340 05 38 0A 33 08 3D 0A 3D 0B 5E 5E 5E 5E 5E 5E 5E 0350 5E 48 47 D2 F7 D3 FF D4 FF 4C E7 E2 03 AA 82 48 0360 64 71 5F 00 48 3F 5E 5E 00 ОС DI 00 B0 89 AF 8D 0370 4D D6 40 59 9D 38 21 A0 18 E8 32 E2 03 40 56 58 0380 43 5E 4D A8 4D 58 4D 68 00 IE DI 00 D2 7D D3 00 0390 D4 01 D5 00 AF 18 94 19 A0 29 E8 ЗА E2 09 48 48 250
Продолжение 03А0 D0 00 40 70 D0 Fl ЕС 8А 22 5Е D2 F2 D3 81 D4 FF 0380 4С Е7 7В 5F 00 20 01 00 ЕС 85 4D 58 00 38 ЕС 86 03С0 DO 34 ЕС 87 00 32 ЕС 88 D0 0С 01 00 ЕС 8В D5 46 0300 24 5Е D5 45 24 5Е D5 5Е 24 5Е 03 2А 21 22 20 21 03Е0 ВС 31 22 А8 41 47 70 А8 4С 47 71 А8 50 47 72 АВ 03F0 49 47 74 АЗ 40 47 73 А8 53 47 75 А8 45 47 76 АЗ 0400 57 47 77 АЗ 52 47 73 D3 3F 21 D3 0А 21 47 48 00 0410 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0420 00 00 00 00 00 00 00 00 00 00 48 72 28 29 22 02 0430 01 D3 76 4D А8 01 41 84 82 D1 00 3F D0 08 4D 70 0440 40 А8 ЕС 81 00 38 D1 10 2С 5Е ВС 81 26 5Е 22 5Е 0450 ВС 91 26 5Е 00 33 D1 11 2С 5Е ВС 81 27 5Е 22 5Е 0460 ВС 91 27 5Е 03 ЗА 21 5Е 21 5Е 2А 5Е 20 5Е 4D А8 0470 01 22 В4 82 01 00 D2 02 D3 08 3F 5Е АС СО ВЗ D5 0480 АО 1С 2А 5Е 03 8А 21 5Е А1 15 Е2 0D AF СО ЕО 08 0490 ВЗ D8 D3 80 В8 03 А9 00 ЕЗ 09 4D 98 87 8С ЕЗ 09 04А0 ЕЗ 1F ЕА С8 ЕЗ 03 ЕЗ 19 ED Е8 А8 00 ЕЗ 07 9F 0С 0480 ЕЗ 03 ЕЗ 00 ЕО F8 А8 00 ЕЗ 0В 0В 5Е BF 01 ЕЗ 05 04С0 4D А9 ЕС 91 ЕО 18 ВЗ 38 ЕЗ 0D 00 1С D1 14 2С D5 04D0 5А 24 20 АС 90 21 22 AF 90 А9 0А ЕЗ СА А9 0D ЕЗ 84Е0 СО А9 4В ЕЗ 51 Д9 4F ЕЗ 55 А9 50 ЕЗ А4 D1 0F А9 D4F0 42 01 00 А9 43 D1 01 А9 44 D1 02 А9 45 01 03 А9 0500 48 01 04 А9 4С D1 05 А9 46 D1 06 А9 41 D1 07 А9 0510 53 01 08 А8 0F 47 43 D0 10 84 8В 23 А9 8А Е2 55 0520 ВС 73 А9 08 ЕЗ 06 D5 01 35 Е2 60 АС 80 23 AF 9D 0530 ВС 30 36 Е2 6А 23 D3 01 ЗЕ Е2 70 Е2 F8 03 41 21 0540 22 20 40 АВ А9 0А ЕЗ 21 А9 0D ЕЗ 1D А9 30 ЕЗ 38 0550 А9 ЗЕ ЕЗ 06 3D ЕЗ 05 D6 80 21 23 Д9 0А ЁЗ 0А ВВ 0560 16 23 А9 0А ЕЗ 03 ВС 17 ЕС BD 22 D3 4В 21 22 23 0570 D0 00 Д9 0А ЕЗ 03 D0 01 BE 01 ЕС ЗЕ 22 D3 44 21 0580 22 23 D0 00 А9 0А ЕЗ 03 D0 01 BE 01 ЕС 8F Е2 С5 0590 23 Д9 0А Е2 СА ВС 18 23 А9 0А Е2 D1 ВС 19 Е2 64 05А0 40 АВ 01 01 ЕС 81 D5 53 24 5Е 2А 5Е 2D 5Е 02 02 0580 D3 08 4D АЗ D1 22 84 82 D1 00 3F 5Е 9D 1С 40 А9 05С0 АО 1С ЗЕ 5Е Е2 8А 48 ЗЕ ЕС 93 ВС 15 D2 00 D3 20 05DO D4 00 82 9А D3 07 ВС 15 В8 35 ВЗ 43 D4 10 84 А4 05Е0 ВС 35 В4 АЗ DO 00 02 00 D3 02 В2 98 D2 10 03 00 05F0 45 D6 4D 59 95 83 4D 56 4D А9 4D ДА 4D 03 5В 5Е 0600 48 20 02 F1 D4 FF 4С Е6 Е2 03 D2 7F В8 23 5В 43 0610 23 D1 01 ЕЗ 05 48 3D 4D А8 АС 5D АС 6D АС AD 4D 0620 А6 А0 86 05 OF 40 А5 А0 35 ВЗ 58 4D А8 20 5Е 02 0630 30 А2 32 ЕЗ 17 D2 37 А2 23 ЕЗ 11 21 5Е В8 53 ВВ 0640 31 ЕЗ 55 В2 68 Е2 19 22 5Е D3 00 AF АО AF 6D AF 0650 50 5В 48 28 23 ВС 18 D0 F0 В8 01 D0 0F 88 08 ЕС 0660 82 23 ВС 19 5В 43 29 D0 00 D1 01 ЕС 83 D5 53 24 0670 D5 5Е 24 5В 48 2А 22 ВС 81 26 ВС 91 26 22 9D 1С 0680 26 03 0А 5В 48 70 23 5Е 40 А4 4D А5 29 5Е ВС 81 0690 26 5Е ВС 91 26 5Е D0 00 D1 05 22 5Е Е8 38 Е2 05 06АО 90 1С 26 5Е D5 43 D0 00 D1 03 24 5Е ЕЗ 38 Е2 05 0680 23 5Е ВС 30 D5 5А 24 5Е ВС 03 А9 00 ЕЗ 41 А9 0А 06С0 ЕЗ 41 4D А4 40 А5 21 5Е ВС 31 D3 0А 21 5Е А8 2D 06D0 ЕЗ 29 АЗ 41 ЕЗ 11 ВС 13 21 5Е 22 5Е А8 4С 47 71 06Е0 Ад 50 47 72 47 48 23 А9 00 ЕЗ 03 Е2 2Е ВС 18 23 06F0 А9 00 ЕЗ 03 Е2 37 ВС 19 Е2 63 А1 1С ЕЗ 1F 9С 1С 0700 ЕЗ 05 9D 1С 26 5Е ВЗ 74 03 0Й 21 5Е ЕЗ 03 2D 5Е 0710 В? 45 ЕЗ 05 40 А4 ЕЗ 03 А0 14 А0 1С ЕО 38 А0 18 0720 ЕС 83 А8 19 Е2 99 Е2 99 48 71 4D А5 28 AD 80 29 0730 4D АЗ А0 F3 А0 83 2А ВЗ 85 D3 0Д 21 А1 15 ЕЗ 02 0740 20 АО 1С Е8 33 Е2 10 20 А9 0А £2 1С 05 4С 24 47 0750 48 5Е 5Е 43 2Е D2 00 D3 00 40 Я2 А0 42 3F 5Е 22 0760 5Е 5В 48 2F D2 01 D3 54 D0 00 D1 0F В8 51 40 А2 0770 А0 12 А8 08 А0 12 А8 0А А8 22 3F 5Е 5В 48 20 22 0780 22 4D А5 4D А9 4D ДА 84 F8 Д0 68 АС 8D ЕЗ 08 05 251
П родолжение 0790 5Д 24 D3 ОД 21 5В 9D ОС D1 00 BF 01 ЕЗ 03 2Е 58 07 Д0 D1 3F Й2 10 ЕЗ 96 ВС ОЗ D1 07 88 13 BF 13 ЕЗ 13 О7В0 01 F8 63 01 DO 00 02 00 03 80 ДО 83 82 98 BE 01 97С0 2Е 5В D5 38 88 05 D1 04 ВС 04 88 14 BF 14 ЕЗ 16 O7D0 Д9 06 ЙО 15 DO 00 Д0 59 82 93 D3 20 D4 00 82 9Д 97Е0 ВС 45 2Е 2F 5В ВЗ 39 ЕЗ 02 5В D1 20 88 01 Д8 20 O7F0 ЕЗ 03 ЕЗ 05 ДЭ 02 ЕЗ 2Е D3 0F 83 03 Д9 01 ДО 25 О800 D0 00 01 04 Д2 13 Д1 59 82 89 01 2С ВО 98 2Е D1 0810 30 Вс 15 D3 20 D2 00 D4 00 82 9Д BE 45 ВС 53 Д9 0820 06 D5 03 2F 53 D1 13 83 01 D0 00 D3 90 ВО 98 5Е 0830 5Е D3 80 82 98 BE 01 2Е АО 25 5В D1 7F Й2 10 ЕЗ 0840 2А ВС 03 Д9 76 ЕЗ 1Е D5 02 В2 ЭЛ D3 70 88 35 D3 0850 07 В8 03 ВВ 35 4С 95 DO 00 D1 58 2Е 2F D3 2С 21 0860 4С 95 2F 5В D1 5С D0 00 2Е 5В D1 BF Д2 10 ЕЗ 1А 0870 D5 07 88 05 D1 38 88 01 D0 00 D2 00 D3 80 82 98 0880 D3 60 BE 01 ВО 93 2Е 2F 5В 01 07 В8 01 Д8 07 ЕЗ 0890 43 Д8 Об ЕЗ 56 D1 01 88 01 ЛЗ 01 ЕЗ 62 D5 38 В8 08Д0 05 D1 06 83 01 D0 00 D2 00 D4 00 D3 80 82 98 D3 0880 40 82 9Й BE 45 BE 01 А0 ЗЙ Д8 00 ЕЗ 03 ДО 25 4D 08С0 Д2 ЙО 12 02 01 D3 62 ЕС 99 3F ДО 22 ВС 51 ED 99 O8D0 3F 22 5В D5 30 D1 38 88 01 D0 00 03 20 82 98 ВВ 08Е0 05 D0 00 D1 80 2Е ВС 53 21 5В Д0 15 05 38 88 05 08FO D0 00 D1 80 В2 8Й D1 84 BE 45 ВО Д8 2Е 5В D1 0А 0900 88 01 Й8 00 ЕЗ 29 D1 ЗЕ 88 01 Й8 02 А0 25 Й8 0С 0910 ЙО 25 Й8 12 ЙО 15 Л8 1Л ДО 15 D3 ОЕ 88 13 D0 00 0920 Й9 08 Й1 18 D3 ЗС 08 31 D3 Д4 80 98 2Е 5В D4 00 0930 D5 38 88 05 D3 20 82 Л9 BE 23 Д9 06 D3 0Д ВС 35 0940 D1 04 88 01 D0 00 D3 Е4 80 98 2Е 2F 5В 00 00 00 0950 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0960 01 84 88 31 5В 5В ЕС 91 5В 02 30 5В 03 В4 89 08 0970 9С 19 58 D5 01 ЕЗ 05 D4 FF 05 FF 03 06 31 5В D0 0980 01 ЕЗ 03 DO FF 84 34 02 07 0D 32 ED 88 30 5В 00 0990 30 58 03 9D 18 D3 07 84 93 30 5В 03 84 8Д 0Е 06 09Й0 В4 83 0С 31 5В 01 84 89 ОЕ BE 01 94 89 5В 01 95 0980 88 8Е 01 OF 5В 01 84 89 0В 9С 19 58 01 90 1В 30 09С0 5В 0В 09 ЕЗ 03 ОВ ОЙ 8В 01 ЕЗ 13 0В 00 ВС 35 09 09D0 ЕЗ 0Й 0В OD D5 00 Д9 01 D5 80 0Д ВВ 51 84 43 0С 09Е0 30 5В 5Е 5Е 5Е 5Е 5Е 5Е 5Е 5Е 5Е 5Е 5Е 5Е 5Е 5Е 09F0 5Е 5Е 5Е 5Е 5Е 5Е 5Е 5Е 5Е 58 5Е 5Е 5Е 5Е 5Е 5Е 0А00 5Е 5Е 5Е 5Е 5Е 5Е 5Е 5Е 5Е 5Е 5Е 5Е 5Е 5Е 5В 08 ОА10 ВЙ 01 84 43 ЗО 5В D3 01 0С 5В 0D D2 01 89 23 0С 0Й20 5В 00 ЕЗ 02 02 ВС 10 0В 07 34 5В 00 ЕЗ 02 02 00 0Й30 ВС 30 07 ВС 02 ВС 10 08 84 9В 07 ВВ 60 68 73 5Е 0Д40 34 5В 00 ЕЗ 02 02 ЕЗ ОС 00 ЕЗ 02 02 0D D0 00 D2 0Й50 00 ВО 98 08 ВС 10 08 07 D2 01 В9 23 34 5В 00 ЕЗ 0Й60 02 02 ВС 10 ОВ 88 01 ЕЗ 15 00 ЕЗ 02 02 ВС 10 0В 0А70 89 01 ЕЗ 0Й 00 ЕЗ 02 02 ВС 10 ОВ ВВ 01 D0 00 D3 0Й60 00 34 5В 00 ЕЗ 02 02 08 вс 10 0В 07 D2 01 89 23 0Й90 32 5В 01 ЕЗ 03 01 10 84 ВС 5В 01 ЕЗ 03 01 10 84 0ДЙ0 С8 12 84 ВС 58 10 13 84 8С 5В 84 38 13 36 5В 95 0ЙВО 83 12 5В ОЕ D7 06 95 9В 96 89 31 5В 0Е D7 02 95 0ЙС0 9В ЙС 9D 36 flF 8D 31 5В 0Е 31 5В ОЕ 84 8С 5В ЕС 0AD0 91 00 ДС 8D D2 00 D3 12 84 92 D2 01 D3 88 40 А8 0ЙЕ0 3F flF 8D 37 22 D3 ЗД 21 22 21 0В 26 5В 00 ДС 8D 0AF6 D2 00 D3 13 84 92 D2 01 D3 СВ 4D Й8 3F flF 8D 37 0800 22 D3 Зй 21 22 21 23 D6 10 D7 07 35 58 0Е D7 08 0810 95 98 BE 01 96 89 BE 01 31 5В 0В 5Е D3 0F 88 13 0820 D2 09 D7 06 DO 00 Д2 23 ЕЗ 05 EF ВВ ЕЗ 03 D0 06 0830 07 5Е BE 02 ДС 9D D2 9F DO 00 Д2 21 ЕЗ 05 EF FB 0840 ЕЗ 03 DO 60 07 5Е flF AD ВВ 40 8В 35 00 5Е 8В 53 0850 34 5Е 5В 95 83 BE 01 12 5Е 5В 84 38 13 5Е 8Е 01 0В60 36 5Е 5В >84 СВ 84 ЗС 12 5Е D0 00 D1 08 D8 00 82 0870 8С 5В 00 00 00 00 00 00 00 00 00 00 00 00 00 00 252
Продолжение 0080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0890 00 00 00 00 00 00 00 00 GO 00 00 00 00 00 00 00 0BA0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0880 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 О0С0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0800 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0BE0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 OBF0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000 4Е 4F 50 20 52 4C 43 20 52 52 43 20 52 41 4C 20 ОС 10 52 41 52 20 44 41 41 20 43 4D 41 20 53 54 43 20 0020 43 4D 43 20 49 4E 52 20 44 43 52 20 4D 56 49 20 9С30 40 58 49 20 53 54 41 58 49 4E 58 20 44 41 44 20 0040 40 44 41 58 44 43 58 20 53 48 4C 44 4C 48 4C 44 0050 53 54 41 20 4С 44 41 20 4D 4F 56 20 48 4C 54 20 0060 41 44 44 20 41 44 43 20 53 55 42 20 53 42 42 20 0С7О 41 4Е 41 20 58 52 41 20 4F 52 41 20 43 4D 50 20 0080 52 53 54 20 41 44 49 20 41 43 49 20 53 55 49 20 0090 53 42 49 20 41 4E 49 20 58 52 49 20 4F 52 49 20 0CA0 43 50 49 20 4fl 4D 50 20 52 45 54 20 20 20 20 20 0080 43 41 40 4С 4F 55 54 20 20 20 20 20 49 4E 20 20 0000 20 20 20 20 58 54 48 4C 50 43 48 4C 58 43 48 47 0CD0 20 20 20 20 44 49 20 20 53 50 48 4C 45 49 20 20 0CE0 20 20 20 20 50 4F 50 20 50 55 53 48 20 20 20 20 0CF0 52 4Е 5fl 20 52 5A 20 20 52 4E 43 20 52 43 20 20 0D0O 52 50 4F 20 52 50 45 20 52 50 20 20 52 4D 20 20 0010 4А 4Е 5fl 20 4fl 5fl 20 20 4A 4E 43 20 4fl 43 20 20 0028 4А 50 4F 20 4A 50 45 20 4A 50 20 20 4A 4D 20 20 0D30 43 4Е 5А 20 43 5fl 20 20 43 4E 43 20 43 43 20 20 0D4O 43 50 4F 20 43 50 45 20 43 50 20 20 43 4D 20 20 0050 20 20 20 20 42 43 44 45 48 4C 4D 41 53 50 50 53 DD60 57 20 52 4А 43 4E 5fl 5A 20 4E 43 43 20 50 4F 50 0070 45 5© 20 4D 20 00 IB 52 IE 03 42 IB 52 IE 09 44 0D80 18 52 1Е OF 48 IB 52 27 03 43 IB 52 27 09 45 IB 0090 52 27 0F 4С 18 52 34 03 41 IB 52 40 03 46 IB 52 0DA0 3F 06 53 5А 20 41 20 50 20 43 IB 52 3B 09 53 50 0080 1В 38 0F 50 43 Ofl 00 IB 59 20 15 77 79 77 6F 8DC0 64 20 77 20 70 6F 72 74 20 20 00 IB 52 20 15 77 0000 “7 6F 64 20 69 7fl 20 70 6F 72 74 61 28 20 00 00 0DE0 1F 04 ifl 05 24 04 24 05 IF Ofl 1A 0B 24 0A 24 0B ODFO 1F 10 Ifl И 24 10 24 11 43 04 3F 05 33 04 33 05 0Е00 38 Ofl 33 0В 3D Ofl 3D OB 20 20 20 20 20 20 20 20 DE10 20 20 20 20 20 20 Ofl 20 20 20 20 20 2© 20 20 20 0Е20 20 20 20 20 20 Ofl IB 4C IB 4C 00 00 00 00 07 00 0ЕЗО OF 00 17 00 IF 00 27 00 2F 00 37 00 3F 00 04 90 0Е4О 05 90 06 94 01 A5 02 flG 03 AG 09 A0 Ofl AO 08 A0 0Е50 22 50 2А 50 32 50 3fl 50 40 91 76 00 80 10 88 10 0Е60 90 10 98 10 АО 10 fl8 10 B0 10 88 10 C7 90 C6 40 0Е70 СЕ 40 06 40 DE 40 E6 40 EE 40 F6 40 FE 40 C3 50 0Е80 09 00 00 00 CD 50 D3 40 00 00 DB 40 00 00 E3 00 0Е90 Е9 00 ЕВ 00 00 00 F3 00 F9 00 FB 00 00 00 Cl AO 0ЕД0 05 А0 00 00 C0 00 C8 00 D0 00 D8 00 EG 00 E8 00 0EB0 F0 00 F8 00 C2 50 CA 50 D2 50 DA 50 E2 50 Efl 50 0ЕСО F2 50 Ffl 50 C4 5© CC 50 D4 50 DC 50 E4 50 EC 50 0ED0 F4 50 FC 50 45 51 55 20 20 20 20 20 1C 30 44 42 0EE0 20 20 20 20 20 20 1C 6fl 44 57 20 20 20 20 20 20 0EF0 1С 8С 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0F00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0F10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0F20 00 00 00 00 00 00 "00 00 00 00 00 00 00 00 00 00 0F30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0F40 00 80 00 00 00 00 00 00 80 00 00 00 00 00 00 00 0F50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0F60 00 00 00 00 00 00 00 GO 00 00 00 00 00 00 00 00 253
Продолжение OF70 00 00 00 00 00 00 00 00 00 08 00 88 08 00 08 00 0F80 00 08 00 08 00 00 00 00 00 00 00 ОО 00 00 00 00 0F90 00 00 00 00 00 00 00 00 00 00 00 ОО ОО 00 00 00 8FA0 00 00 00 00 00 00 08 00 08 00 80 00 00 00 00 00 0FB0 00 00 00 00 00 00 00 00 00 ОО 00 00 00 00 00 80 0FC0 08 08 00 08 80 00 80 80 00 88 ОО 00 00 80 08 00 OFDO 00 08 00 08 00 08 00 00 00 00 00 00 00 00 00 00 0FE0 00 00 00 00 00 00 00 00 08 80 88 08 08 80 00 00 0FF0 00 00 00 00 00 00 80 00 00 00 ОО 00 00 ОО 00 80 1000 09 65 09 60 09 6С 89 73 09 7F 09 83 09 8F 09 С1 1010 09 65 09 9В 09 92 09 77 09 7F 09 83 09 8F 09 С5 1020 09 65 09 68 09 6С 09 73 09 7F 09 83 09 8F 09 СВ 1030 89 65 09 9В 09 92 09 77 09 7F 09 83 09 8F 09 02 1040 09 65 09 60 09 Л5 09 73 09 7F 09 83 09 8F ОВ 1А 1050 09 65 09 9В 09 ЛЕ 09 77 89 7F 09 83 09 8F 8Й 0F 1060 09 65 09 60 09 В5 09 73 09 7F 69 83 09 8F Ой 16 1070 09 65 09 9В 09 ВС 09 77 09 7F 09 83 09 BF ОД 1А 1080 09 69 09 69 09 69 09 69 09 69 09 69 09 69 09 69 1090 09 69 09 69 09 69 09 69 09 69 09 69 09 69 09 69 10Д0 ©9 69 09 69 09 69 09 69 09 69 09 69 89 69 89 69 10В0 09 69 09 69 09 69 09 69 09 69 09 69 09 69 09 69 10С0 89 69 09 69 09 69 09 69 09 69 09 69 09 69 09 69 1000 09 69 09 69 09 69 09 69 09 69 09 69 09 69 09 69 10Е0 09 69 09 69 09 69 09 69 89 69 09 69 09 66 09 69 10F0 09 69 09 69 09 69 09 69 09 69 09 69 09 69 09 69 1100 0А 24 0Й 24 0А 24 0Л 24 0Л 24 0Й 24 0Д 24 8А 24 1110 0Л 2Е 0Й 2Е ВЛ 2Е 0А 2Е Ой 2Е 0Й 2Е ОД 2Е 0Л 2Е 1120 0А 45 0А 45 0А 45 Ой 45 8Л 45 0Л 45 0Л 45 ОД 45 1130 0Я 4В 0Л 4В 0А 4В 0А 4В 0Л 4В Ой 4В 0Л 4В ОД 4В 1140 0А 61 0А 61 0Л 61 0А 61 0Л 61 ел 61 0Л 61 ОЯ 61 1150 0Й 6С Ой 6С 0А 6С ОД 6С Ой 6С Ой 6С ОД 6С ОД 6С 1160 0А 77 0А 77 0А 77 0А 77 0Й 77 0Й 77 0А 77 0Й 77 1170 0Я 86 Ой 86 0А 86 0Й 86 Ой 86 Ой 86 ОЯ 86 0А 86 1180 0Й Й5 8А АА 0А 95 0Л 92 0А 90 0Й AF 0Д 21 8В 63 1190 0Й Й5 0А Й6 Ой 95 09 65 0Й 90 ел 9Й ОЯ 2В ОВ 63 UA0 0Й А5 0А АА 0А 95 0Л CF Ой 90 0Л AF 0А 42 ОВ 63 11В0 0Й Л5 09 65 0Л 95 ОД ED Ой 90 09 65 ОД 48 00 63 11С0 0Й А5 0Й АЛ 0Л 95 0В 80 Ой 90 Ой AF 0А 5Е ОВ 63 UDO 0Й А5 ОЯ СВ 0Л 95 0Л ВС Ой 90 09 65 0Я 69 ев 63 11Е0 0Й А5 ОВ 5Л 0А 95 09 65 ОЙ 9D ОВ 53 ОД 74 ов 63 UF0 Ой А5 0А С8 0А 95 09 65 0Й 90 09 65 0А 83 0В 63 1200 48 73 40 А8 40 58 АО 88 D0 0Е D1 D4 ЕС 8С 00 00 1210 01 54 ЕС 80 00 0Е D1 2С ЕС 8Е D3 ОД 21 5Е 21 5Е 1220 21 5Е 4D А1 40 51 40 ЛС ED 61 ЕО 72 ЕС 29 ЕЗ ОЗ 1230 А8 11 84 17 А0 И 40 Л8 ЕС 8F 9С 07 AD 88 83 38 1240 ЕЗ 17 ЛЭ 20 ЕЗ 29 Я9 2Л ЕЗ 09 Л9 ЗВ ЕЗ 05 ЛЭ 00 1250 ЕЗ 09 02 04 9В 27 ЕЗ СВ Л9 20 ЕЗ OF Л9 ЗА ЕЗ ОВ 1260 5Е 5Е 5Е 5Е D2 04 9В 27 ЕЗ В9 ЕС 8F АО И А4 20 1270 А1 11 А9 38 ЕЗ АО ЕО В4 ЕО Е5 04 00 05 54 D0 00 1280 D1 04 В4 13 9D 33 ЛЭ 0Л D3 20 9F 34 ЕЗ 00 Я9 28 1290 ЕЗ 13 А0 13 АО 14 ЕВ 08 Е2 15 ВО 84 А8 25 Е8 ЗА 12Д0 Е2 23 ЕЗ 80 84 31 ED F8 ВЗ 78 ЛО 86 В4 С8 АО 8С 12В0 90 15 00 00 А8 15 90 25 ВС 23 Й9 00 ЕЗ 27 А4 20 12С0 А1 И EF 15 ЕЗ 29 ЛО 8Е D3 0F В8 23 А9 00 ЕЗ 15 12D0 А4 20 А9 2С ЕЗ 07 02 04 ЭВ 27 Й1 И 4С 92 EF 55 12Е0 ЕЗ 00 ЛО 8Е 1Е 5Е Л0 1С 03 01 9В 37 ЕЗ 35 5Е 1Е 12F0 Й0 1С АС 90 AD 88 AD 8Л AF 9D 03 50 В8 23 Л9 50 1300 ЕЗ 17 02 02 98 27 ВС 03 Л9 00 ЕЗ 07 02 10 9В 27 1310 01 00 1Е 5Е Л0 1С ЕЗ 0В D2 03 9В 27 5Е 5Е 1F 5Е 1320 Й0 2С 9D 31 ЛЭ 0А Е2 F7 Й9 08 ЕЗ 43 ЙО И Е2 ОО 1330 ED С4 00 00 01 08 В4 13 9F 04 ЕЗ 03 ЕЗ 2В 90 33 1340 А9 0Й 03 20 9F 34 ЕЗ 00 Л9 28 ЕЗ 0F Л0 13 АО 14 1350 Е8 ВО Е2 15 ВО 84 Л0 24 Е2 27 ВО 84 В4 31 95 44 1360 4D 14 Е2 41 00 00 00 00 02 20 9В 27 Е2 4В ED 61 254
Продолжение 1370 40 АС 40 АЗ 40 А4 В4 17 4D А5 90 31 Д9 FF 47 48 1330 D2 03 88 23 02 80 А9 00 ЕЗ 10 22 5Е ВС 81 AD 4С 1390 ВС 91 АО 4С 22 5Е 22 5Е Д0 75 1С 5Е АО 4С А0 1С 13А0 А8 25 Е8 39 Е2 0В 22 5Е Д8 15 В4 58 А8 18 ЕЗ 83 13В0 Е2 0В А8 И 90 31 А9 08 ЕЗ 59 21 5Е Л0 И А0 15 13С0 А9 20 ЕЗ 0В А9 8А ЕЗ 3F А9 ЗВ ЕЗ 2В Е2 19 9D 31 1300 А9 20 Е2 19 D0 00 D1 19 ЕА 58 ЕЗ 0F D1 1F ЕА 58 13Е0 ЕЗ 09 01 28 ЕА 58 ЕЗ 83 Е2 35 03 28 21 5Е А8 15 13F0 В? 58 Е2 07 Е2 41 90 31 А9 00 ЕЗ 17 21 5Е А0 И 1400 А9 0А ЕЗ 03 Е2 0F 9D 37 02 FC В8 23 А9 00 Е2 99 1410 ЕЗ 5F 03 0А 21 5Е 21 5Е 21 5Е ЕО 71 ED 92 ЕА 12 1420 ЕЗ 03 47 48 00 00 01 08 22 5Е 90 31 21 5Е А0 11 1433 Е8 38 Е2 09 22 5Е 22 5Е 90 51 03 80 В8 53 04 7F 1440 В8 45 04 00 Д9 80 ЕЗ И А8 21 95 81 BE 81 AD 4С 1450 BE 01 АО 4С А8 21 ЕЗ 0F 08 00 01 04 D3 2А 21 5Е 1460 Е8 38 Е2 05 А0 41 В0 А1 В8 А1 03 0А 21 5Е Е2 51 1470 АО 84 20 2А 2А 2А 2А 20 45 52 52 4F 52 28 20 2А 1480 2А 2А 2А 20 0А 00 Е2 79 5Е 5Е 48 3D ВЗ 33 ЕЗ 1F 1490 04 00 05 08 ЕО 84 90 24 9С 22 А8 12 А0 14 Е8 ЗА 14А0 Е2 0В 9С 42 А0 22 94 82 А0 22 ЕС 29 5В 5Е 90 32 14В0 02 80 В8 23 А9 80 ЕЗ 87 D2 08 9В 27 5В 5Е 90 52 14С0 04 7F 98 42 В8 45 04 00 А0 22 94 82 АС CD А0 22 14D0 95 С2 1F 5Е Е8 ЗА Е2 09 AF СО 5В 5Е 4В 22 АС 90 14ЕВ 03 28 21 5Е AF 9D 5В 5Е 48 1В АС 80 А0 20 AF 80 14F0 А1 40 АС 90 АС АО 40 09 АС 90 40 88 40 Е9 4D 59 1500 А0 18 90 38 А9 88 ЕЗ 05 21 5Е Е2 0В 40 98 AF 90 1510 40 59 AF АО AF 90 А0 40 АС 80 А1 20 AF 8D 5В 5Е 1520 48 1С АС ВО ЕО 5В В8 СВ 90 1В AF ВО 5В 5Е 48 10 1530 АС ВО ЕО 5В В8 СВ 95 8В BE 01 flF BD 5В 5Е 48 1Е 1540 АС ВО ЕО 5В В0 СВ 9С 1В AF ВО 5В 5Е 4В IF АС BD 1550 ED 5В В0 СВ BE 01 94 8В BE 01 Е2 21 48 21 АС 90 1560 АС АО В4 9А ЕО А9 04 FF ВС 23 А9 F1 ЕЗ 17 А9 00 1570 ЕЗ 2F ВС 53 А9 1В ЕЗ 23 А9 0А ЕЗ 03 ЕЗ 89 D3 28 1580 4С Е7 Е2 83 ВС 53 4С Е7 47 47 А9 0А ЕЗ 03 ЕЗ 17 1590 ВС 23 А9 F1 ЕЗ И D3 00 Е2 13 ЕО А9 D2 ее ЕЗ 85 15А0 ЕО А9 02 Е8 ЕС 9А AF АО AF 90 5В 5Е 5Е 5Е 48 26 1580 АС 90 АС АО 04 00 05 02 4С 91 03 0F В8 13 D2 38 15С0 ВВ 23 02 39 А2 23 А8 79 21 5Е ЕВ ЗА Е2 15 AF АО 1500 AF 9D 5В 5Е 48 ЗА 5Е 5Е AC 80 АС 9D ЕО 72 00 88 15Е0 01 08 ЕО 93 ЕА 23 ЕЗ 05 40 АЗ ЕЗ 25 ED 83 9D 33 15F0 9F 32 ЕЗ 0В АВ 13 А0 12 Е8 38 Е2 0D ЕЗ 13 В8 82 1600 90 32 02 7F В8 23 02 00 А0 42 ВО 92 В0 92 Е2 31 1610 AF 90 AF 80 5В 5Е 4В ЗВ AC 50 ЕО 84 08 80 01 11 1620 90 31 АС 90 А9 23 ЕЗ 13 A9 24 ЕЗ 0F 02 3F А2 23 1630 ЕЗ 89 А6 33 А9 01 ЕЗ 83 ЕЗ И AF 90 ВЗ 58 9С 34 1640 А0 14 А0 И ВЗ 38 А1 18 E2 29 В4 85 ВЗ В8 D3 20 1650 9С 34 А8 14 Е8 38 Е2 07 01 11 В1 58 AF 90 AF 50 1660 5В 5Е 48 ЗС 5Е 5Е ВЗ 38 ЕЗ 07 02 04 9В 27 5В 5Е 1678 В4 82 ЕО 84 В4 2А 02 08 90 34 А6 31 А8 01 ЕЗ 29 1680 А8 83 ЕЗ 83 ЕЗ 39 01 46 А2 13 ЕЗ 33 А9 42 ЕЗ 83 1690 ЕЗ 15 01 31 А2 12 ЕЗ 89 00 00 01 01 В7 8А ЕЗ 87 16А0 40 АЗ А0 23 ЕЗ 30 02 46 А2 23 ВС 32 А0 14 Е8 ЗА 1688 Е2 39 40 АЗ А0 АЗ 03 39 А2 32 А0 63 ЕЗ 2D ЕВ ЗА 16С0 ЕЗ 65 05 10 В4 АЗ Д9 48 ЕЗ 19 А9 44 ЕЗ 0D А9 4F 16D0 ЕЗ 03 ЕЗ 53 А1 83 01 37 ЕЗ 05 А1 63 01 39 А2 12 16Е0 ЕЗ 45 Е8 32 ЕЗ 05 Д0 12 ЕЗ 30 40 АВ 4D АД 4D А9 16F8 ЕО 84 ВС 63 ВЗ 39 ЕЗ 03 ЕЗ 89 02 18 9В 27 4D А8 1700 58 5Е 90 34 А6 31 А8 03 А0 99 01 0F В8 13 В0 9А 1710 ВС 43 В0 9В 04 80 Е8 92 В2 ЗА В2 ЗВ А0 14 Е2 20 1720 ВС 51 ВС 70 5В 5Е ДО 86 ВЗ 33 ЕЗ 29 04 00 05 88 1730 ЕО 84 90 34 9С 32 А0 12 А0 14 Е8 ЗА Е2 0В 04 81 1740 94 А2 А0 22 40 А8 94 82 1F 5Е А0 22 94 С2 А8 22 1750 ЕС 29 5В 5Е 90 32 02 80 В8 23 ДЭ 88 ЕЗ 07 А8 22 255
Продолжение 1760 95 82 5В 5Е D2 7F 9D 32 88 23 D2 00 84 28 А0 42 1770 80 92 80 92 А0 19 D2 80 ВВ 23 9С 38 84 С8 ED 93 1780 А0 23 ЕС 39 AD 90 4D А8 1F 5Е 5В 5Е 48 3F АС 2D 1790 AC 3D АС 8D АС 9D 81 23 95 92 94 82 84 98 А0 22 17А0 ЕВ 53 ЕВ 33 Е2 0D AF 9D AF 8D AF 3D AF 2D 5В 5Е 17В0 48 ЗЕ АС 3D АС 9D AD 88 83 38 ЕЗ 0В D2 04 9В 27 17С0 AF 9D AF 8D 5В 5Е ED D3 84 82 4D ДА D5 08 ВС 03 17D0 Д9 00 ЕЗ 03 ЕЗ 49 ВС 13 4D А8 А9 01 ЕЗ 13 А9 02 17Е0 ЕЗ 0D А9 03 ЕЗ 03 ЕЗ 37 А0 АЗ А0 68 Д1 4А Д1 ЗА 17F0 ED 84 84 2В 9D 33 9F 34 ЕЗ 09 А0 13 Д0 14 Е8 DB 1800 Е2 0D 80 83 В0 28 Е8 ЗА Е2 19 ЕЗ 13 В4 29 А9 02 1810 ЕЗ 03 ЕЗ 09 А8 06 ЕЗ 07 А8 08 А1 28 ЕЗ И 84 28 1820 AD 8А D2 00 D3 08 ЕА 89 ЕЗ 05 AF AD ЕЗ 23 AF AD 1830 D3 30 В8 43 Д9 10 ЕЗ 1F D3 EF 88 43 BF 43 ЕЗ И 1840 D3 30 В8 43 Д9 20 ЕЗ 0F D2 00 D3 03 ЕА 89 ЕЗ 07 1850 D2 10 9В 27 4D А8 84 89 D1 80 88 41 Д8 00 ЕЗ 05 I860 DI 08 82 89 AF 8D 80 98 84 А9 5В 5Е 48 74 D3 0А 1870 21 5Е D8 0Е D1 D4 ЕС 8С D0 0D D1 54 ЕС 8D D0 0Е 1880 Di 2С ЕС 8Е 4D Д1 4D 51 ED 61 А0 11 20 5Е D5 7F 1890 88 53 А9 7F ЕЗ 0F 21 5Е 9С 31 А9 0А Д0 И А9 03 18А0 ЕЗ 0F Е2 19 Д1 И D5 48 24 5Е 22 5Е 24 5Е Е2 23 1880 4D А9 94 91 47 73 00 00 00 00 АС 8D АС 9D АС AD 18С0 4D АВ 20 5Е А9 0А ЕЗ 31 А9 7F ЕЗ 09 А6 31 А8 01 18D0 ЕЗ 0D Е2 11 D5 48 24 5Е 22 5Е 24 5Е Е2 1В 21 5Е 18Е0 D0 00 D1 0А 82 8В D1 0F ВВ 31 80 88 5Е 5А Е2 2D 18F0 D3 2А 21 5Е 4D АВ Е2 35 21 5Е AF AD AF 9D AF 8D 1900 5В 5Е AD 84 77 79 77 6F 64 20 6Е 61 20 64 69 73 1910 70 ЬС 65 6А 20 28 30 29 20 69 6С 69 20 6Е 61 20 1920 70 65 7Е 61 74 78 20 28 31 29 3F 0А 00 20 5Е А9 1930 30 ЕЗ 0F А9 0Д ЕЗ 0В А9 31 ЕЗ 6D D3 0А 21 5Е Е2 1940 ЗЕ ED А9 D2 F1 ЕЗ 05 ED А9 D2 Е0 ЕС 9Д 5В 00 00 1950 48 75 20 5Е 21 5Е А9 4F ЕЗ 0В А9 48 ЕЗ 0D D3 3F I960 21 5Е 47 48 D0 19 D1 7Е ЕЗ 05 D0 15 D1 80 4D А9 1970 4D 59 D2 7D D3 4С 94 89 47 48 00 06 48 26 АС 1D 1980 АС 2D АС 8D АС 9D 4D Д2 А0 12 84 21 А0 31 25 5Е 1990 А0 41 А0 22 25 5Е 22 5Е AF 9D AF 8D AF 2D AF 1D 19Д0 5В 00 48 76 D3 0А 21 5Е 4D А1 4D 51 ED 61 84 12 1980 4D А4 20 5Е А9 18 ЕЗ 03 ДА 94 20 5Е А9 45 ЕЗ 5В 19С0 А9 4С ЕЗ 0F А9 5Д 47 48 Д9 49 ЕЗ 2D А9 53 Е2 23 19D0 Е2 1F D3 2D 21 5Е AD 92 83 38 ЕЗ 63 А0 18 А0 1В 19Е0 ED 63 ЕА 13 Е2 39 Д1 И 9D И А8 0А ЕЗ 03 Е2 0D 19F0 Е8 ЗВ Е2 И А0 И ЕЗ 23 D3 2В 21 5Е AD 92 83 38 1А00 ЕЗ 03 А0 1В 9D И А0 11 А8 0А ЕЗ 09 95 81 83 38 1А10 Е2 0D Е2 67 Е8 38 Е2 13 5Е 5Е 84 12 ED 83 4D А4 1А20 9D 23 9С 33 А0 13 93 32 ЕЗ 63 Е2 7F А0 12 9D 32 1А30 9С 33 А0 12 А0 13 А0 14 А9 0А ЕЗ 05 21 5Е Е2 И 1А40 D5 48 Е8 54 24 5Е Е2 05 ЕС 1D ED 81 АВ И 26 5Е 1А50 А9 1В ЕЗ 0F 9С 31 Д9 0А ЕЗ 85 А0 11 А0 14 21 5Е 1Д60 Е2 13 20 5Е А9 43 ЕЗ 18 А9 4В ЕЗ 1D А9 49 ЕЗ 25 1А70 А9 4С ЕЗ 47 А9 45 ЕЗ 67 А9 5А ЕЗ 00 А9 53 ЕЗ 00 1А80 Е2 33 А0 11 А0 14 ЕЗ 07 83 94 А1 11 А1 14 ВС 35 1А90 24 5Е Е2 45 4D А5 84 13 А0 13 9D 33 9С 31 А9 0А 1АА0 ЕЗ 69 21 5Е А0 И Д0 15 Е2 11 81 51 22 5Е А0 15 1АВ0 D5 48 24 5Е Е8 35 Е2 05 Е2 68 4D А5 D5 20 ВС 53 1АС0 9D 51 9С 31 А0 И Д0 15 А9 0А ЕЗ 05 21 5Е Е2 И 1AD0 D5 48 81 51 А1 15 24 5Е Е8 35 Е2 05 Е2 8F 9D 31 1АЕ0 А9 0А ЕЗ 07 А0 И А0 14 Е2 0В ED D1 84 13 ВЗ 54 1AF0 А0 24 В0 43 ЕА 23 ЕЗ 21 83 F4 ED 85 9D 35 9С 31 1800 А0 И Д0 15 Е8 34 Е2 00 84 13 95 92 94 93 ВЗ 79 1818 А0 12 А0 13 Е2 08 ЕЗ 28 4D А5 А0 15 95 82 А0 12 1820 ДО 13 83 38 Е2 0В А0 15 9D 32 9С 33 Е8 75 А1 12 1830 А1 13 Е2 0В ED 83 9D 33 9С 31 А0 И А0 13 £8 34 1840 Е2 0В D5 45 24 5Е D0 19 D1 АЕ 4D 08 ЕС 1D ED 81 1850 А0 И Е2 FF 48 14 А1 8D 4С 0D АС 8D АС 9D 7F 64 256
Продолжение I860 20 5E A9 0A E3 19 A6 31 A8 01 E3 03 E2 0D AO 42 iBze 02 0F BB 23 D2 00 71 70 62 40 49 60 E2 10 65 AO 1ВВ0 42 AF 9D AF 8D 4C ID A0 8D 5B 48 15 Al 8D 4C 00 1В90 Al 80 4C 2D AC 8D AC 9D 4D A8 64 65 4C 41 A0 18 1ВА0 64 68 4C 6B E2 0Д 65 4C 71 64 68 61 4D C9 02 30 LBB0 BB 23 AD 42 E8 38 E2 11 AF 90 AF BD 4C 3D Д0 8D ibcb 4C ID A0 8D 5B AC 9D D3 0A AO 42 AF 9D 5B 00 00 IBO0 48 77 4D Al 40 51 AD 92 B3 3B E3 03 A0 IB AO 96 1BE0 ED 61 93 51 A0 11 E2 05 Д0 21 D3 5C 9C 31 ED 61 IBF0 40 41 64 Cl AO 9A AO 96 65 C3 EB 3B E2 04 47 48 1C00 48 78 4D Al 40 51 AD 98 64 ED 61 4D 41 C2 EE 0B 1C10 Cl 4C 5B E3 0A 4C 7B E3 0C 59 E2 10 E3 08 AD 9A IC20 AD 96 E3 02 C0 47 48 5E 00 00 00 00 00 00 00 00 1C30 A4 20 Al 11 9D 31 Д9 0A E3 27 ED F8 B3 38 E3 03 LC40 E3 AD 86 ED 88 A0 A0 EC 08 AC 2D AC 30 AD 88 1C50 AD 8A AF 30 AF 20 ED 80 Al A0 EC 08 AD BC E3 09 LC60 D2 10 E3 03 D2 40 9B 27 5B 5E ED F8 B3 78 AD 86 1C70 84 C8 AD BC A4 20 Al 11 AD 88 AD 8A BC 03 D2 11 LC80 A9 00 D2 01 9B 27 IE 5E A0 1C 5B 5E ED F8 B3 78 1C90 AD 86 84 C8 AD 8C A4 20 Al 11 AD 88 AD 8A 02 02 LCA0 9B 27 IF 5E A0 2C 58 5E 00 00 20 20 43 40 20 20 1CB0 42 43 44 45 48 4C 4D 41 53 50 50 53 57 00 00 00 ICCO 00 50 07 50 0F 50 17 00 IF 00 27 00 2F 00 37 08 1CD0 3F 00 04 90 05 90 06 94 01 Д5 02 B0 03 A0 09 A0 1СЕ0 0A B0 OB A0 22 50 2A 50 32 50 ЗА 50 40 91 76 00 1CF0 80 10 88 10 90 10 98 10 A0 10 AB 10 B0 10 B8 10 1000 C7 10 C6 40 CE 40 D6 40 DE 40 E6 40 EE 40 F6 40 ID10 FE 40 C3 50 C9 00 00 00 CD 50 D3 40 00 00 DB 40 1D20 00 00 E3 00 E9 00 EB 00 00 00 F3 00 F9 00 FB 00 ID 30 00 00 Cl A0 C5 A0 00 00 C0 00 C8 00 D0 00 08 00 1D40 EO 00 E8 00 F0 00 F8 00 C2 50 CA 50 D2 50 DA 50 ID50 E2 50 EA 50 F2 50 FA 50 C4 50 CC 50 D4 50 DC 50 IDbO E4 50 EC 50 F4 50 FC 50 00 00 45 51 55 20 20 20 1070 20 20 06 C6 44 42 29 20 20 20 20 20 07 00 00 00 1080 00 00 DF 00 FF 01 FF 01 FF 01 FF 01 FF 01 FF 01 1090 FF 01 FF 01 FF 01 FF 01 FF 01 FF 13 FF 13 FF 13 1DA0 FF 13 FF 13 FF 13 FF 11 FF 10 FF 10 FF 10 FF 00 LDB0 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 BF 00 1DC0 BF 04 FF 04 FF 04 FF 04 FF 04 FF 04 FF 04 FF 04 IDD0 FF 04 FF 04 FF 04 FF 04 FF 04 FF 04 FF 04 FF 84 1OE0 FF 80 FF 80 FF 80 FF 80 FF 80 FF 80 FF 08 FF 08 IOF0 FF 08 FF 08 FF 08 FF 08 FF 08 FF 08 FF 08 FF 08 1E00 DF 00 DF 00 DE 00 DE 00 FE 00 FF 00 FF 00 FF 00 1E10 FF 00 FF 08 FF 00 FF 00 FF 00 EF 00 ED 00 ED 00 1E20 ED 00 EF 00 EF 00 EF 00 EF 00 FF OO FF 00 FF 00 1E30 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 BF 00 LE40 BF 04 15 5E 14 DE FF 04 FF 04 FF 04 19 7E FD 04 1E50 FF 04 FF 04 FF 04 FF 04 FF 04 FF 04 FF 04 FF 84 1E60 FF 84 FF 84 FF 84 FF 84 FF 84 FF 84 FF 8C FF 8C 1E70 FF 8C FF 08 FF 08 FF 08 FF 08 FF 00 FF 00 FF 00 1E80 19 02 15 64 14 EA 15 D6 16 IB 16 64 14 8C 17 82 1E90 17 8E 18 BA IB 4C IB C5 IB 56 IB BC EF 02 EF 02 1EA0 EF 02 EF 02 EF 00 EF 00 EF 00 EF 00 EF 00 EF 00 1EB0 EF 00 EF 00 EF 00 EF 00 EF 00 EF 00 EF 00 AF 00 1EC0 AF 04 AF 04 EF 04 EF 04 FF 04 FF 04 FF 04 FF 04 1ED0 FF 04 FF 04 FF 00 FF 00 FF 00 FF 00 FF 00 7F 00 LEE0 7F 00 7F 00 7F 00 7F 00 7F 00 7F 00 7F 08 77 00 1EF0 77 00 77 00 7F 00 7F 00 7F 00 7F 00 7F 00 7F 00 1F00 DF 00 DF 00 FE 00 FE 00 FE 00 FE 00 FE 00 FE OG 1F10 FE 00 FE 00 FE 00 FF 00 FF 00 FF 12 FF 12 FF 12 1F20 FF 12 FF 12 FF 12 FF 12 FF 12 FF 12 FF 12 FF 10 1F30 FF 10 FF 10 FF 18 FF 10 FF 10 FF 10 FF 10 BF 10 1F40 BF 10 FB 10 FB 10 FB 10 FF 10 FF 14 FF 14 FF 14 257
Продолжение IF50 FF 14 FF 14 FF 14 FF 04 FF 04 FF 00 FF 00 7F 00 1F60 7F 00 7F 00 7F 00 7F 00 7F 00 7F 08 7F 00 F7 ее 1F70 F7 00 F7 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF ее 1F80 DF 00 DF 00 DF 01 FF 01 FF 01 FF 01 FF 01 FF ei 1F90 FF 01 FF 00 FF 00 FF 00 FF 00 EF 02 EF 02 EF 02 1FA0 EF 02 EF 02 EF 02 EF 00 EF 00 EF 00 EF 00 EF 00 1FB0 EF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 40 1FC0 FF 40 FB 40 FB 40 FB 00 FF 00 FF 00 FF 00 FF 00 1FD0 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 80 1FE0 FF 80 FF 80 FF 80 FF 80 FF 80 FF 80 FF FA FF 08 1FF0 FF 08 FF 08 FF 00 FF 00 FF 05 FF 00 5C AC FF BE 2000 7E 3E FF 01 FF 00 F3 40 FF 00 FF 00 FF 00 FF 00 2010 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 2020 FF 08 FF 00 FF 00 FF 00 FF 08 FF 00 FF 00 FF 00 2030 FF 00 FF 00 FF 00 FF 00 FF 08 FF 00 FF 00 FF 08 2040 FF 04 FF 00 FF 00 FF 00 37 00 FF 00 B3 00 FF 00 2050 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 2060 FF 04 FF 00 FF 04 FF 00 FF 08 FF 00 FF 04 FF 00 2070 FF 00 FF 00 FF 00 FF 80 FF 08 FF 00 FF 80 FF BE 2080 7E 3E FF 01 FF 00 F3 40 FF 00 FF 00 FF 00 FF 00 2090 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 20Д0 FF 08 FF 00 FF OD FF 00 FF 08 FF 00 FF 20 FF 00 2080 FF 00 FF 00 FF 00 FF 00 FF 08 FF 00 FF 00 FF 00 2000 FF 04 FF 00 FF 00 FF 00 FF 30 FF 00 FF 02 FF 00 20D0 FF 00 FF 00 FF 00 FF 00 FF 80 FF 00 FF 00 FF 00 20Е0 FF 04 FF 00 FF 04 FF 00 FF 08 FF 00 FF 24 FF 00 20F0 FF 00 FF 00 FF 20 FF 00 FF 08 FF 00 FF 2C FF 3E 2100 6E 2E FF 01 FF 00 F3 40 FF 00 FF 00 FF 00 FF 00 2110 FF 00 FF 00 FF 00 FD 09 FF 00 FF 00 FF 00 FD 00 2120 FF 08 FF 00 FF 00 FF 00 FF 08 FF 00 FF 00 FF 00 2130 FF 00 FF 00 FF 00 FF 00 FF 08 FF 00 FF 00 FF 00 2140 FF 04 FF 00 FF 00 FF 00 FF 00 37 00 FF 00 BB 00 2150 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 2160 FF 04 FF 00 FF 04 FF 00 FF 08 FF 00 FF 04 FF 00 2170 FF 00 FF 00 FF 00 FF 00 FF 08 FF 00 FF 0C FF 0C 2180 7E 3E FF 01 FF 00 F3 40 FF 00 FF 00 FF 00 FF 00 2190 FF 00 FF 00 FF 00 FD 00 FF 00 FF 00 FF 00 FD 00 21Д0 FF 08 FF 00 FF 00 FF 00 FF 08 FF 00 FF 00 FF 00 2180 FF 00 FF 00 FF 00 FF 00 FF 08 FF 00 FF 00 FF 00 2100 FF 04 FF 00 FF 00 FF 00 FF 00 FF 32 FF 00 FF 02 21D0 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 21Е0 FF 04 FF 00 FF 04 FF 00 FF 08 FF 00 FF 04 FF 20 21F0 FF 00 FF 00 FF 00 FF 00 FF 88 FF 00 FF 0C FF 1C 258
ПРИЛОЖЕНИЕ 8 РАСПЕЧАТКА ПРОГРАММЫ КОНТРОЛЯ ЗНАНИЙ Листинг программы контроля знаний 5 DIM M<5>/L<5>,Q<5> 6 PRINT 1 СИСТЕМА КОНТРОЛЯ 3 Н А Н И й':PRIWT:PRINT:PRINT:PRINT:PRINT 7 INPUT'ПОСТАВЬТЕ КАССЕТУ С ВОПРОСАМИ.'A 8 A=ABS<INT<A>): IF A=0 GOTO 12 10 REWIND: IF A<25 THEN MAT A-l F 12 LOAD 140/7998 14 PRINT OPEN: PRINT'ПРОЧИТАН ТРЕБУЕМЫЙ ФАЙЛ ?':INPUT'ECflH ДА/ НАЖМИТЕ "ПС"'А 16 IF AX0 GOTO 12 18 GOSUB 148:INPUT'ИСПОЛЬЗУЕТСЯ ЧАСТЬ ВОПРОСОВ ? <ДА - 1/ НЕТ - 0 >'А 20 IF А=0 THEN N2=N2-Nl+l:60T0 26 22 INPUT'ДИАПАЗОН ВОПРОСОВ ?'А/В: IF A>=N1 THEN IF B<=N2 THEN N1=A: N2=B-N1+1: GOTO 26 24 PRINT'НЕВЕРНО/ ДОПУСТИМЫЙ ДИАПАЗОН - ОТ'!3.0>N1' A0'N2: GOTO 22 26 PRINT #0: INPUT'РЕЖИМ ?'A: IF A=0 THEN SKIP 28 IF A=5 GOTO 7 30 IF A<4 THEN F1=A: GOTO 50 32 INPUT'ВЫВОД НА ДИСПЛЕЙ (8> ИЛИ НА ПЕЧАТЬ <1> ?'Fls IF Fl=l THEN PRINT «1 34 INPUT'НОМЕР ВОПРОСА ? 'A: B=A: IF A=999 THEN A«N1: B=N2+N1-1 36 IF A=0 GOTO 26 38 IF A>N2*N1-1 THEN PRINT'ТАКОГО ВОПРОСА HET.':GOTO 34 40 FOR I=A TO B: A=I:PRINT:PRINT'ВОПРОС '!3.0!A:GOSUB U0:GOSUB 130 42 PRINT'ПРАВИЛЬНЫЙ ОТВЕТ -'!2.0?O:PRINT:PRINT:IF I=B GOTO 46 44 IF F1=0 THEN INPUT' 'P3:IF P3=l GOTO 34 46 NEXT I:GOTO 34 48 PRINT:PRINT:PRINT'СЛЕДУЮЩИЙ !' 49 REM НАЧАЛО ЦИКЛА ОПРСА. 50 PRINT:PRINT'ВВЕДИТЕ СВОЮ ФАМИЛИЮ/ НАЖМИТЕ КЛАВИШУ “ПС".' 52 CMD10130010130407121305000009130310100900101403000314030015100008131104150118000501140300048 30203060010101312041212
54 IF Fl=3 GOTO 58 56 PRINT#!:CMD13040712130500001104188110050010100101010912050110130666:PRINT#© 58 FOR 1=8 TO 5: M(I>=0:NEXT Is Pl=8: P2=0 68 M=M+ls P3=8s IF M>5 THEN M=5: GOTO 94 62 PRINT:PRINT*ВОПРОС 41.8’M 64 A=INT(RND<3>«N2>+N1: FOR 1=8 TO M :IF M(I)=A GOTO 64 66 NEXT I: M(M>=A: GOSUB 118 67 GOSUB 138 68 PRINT:INPUT*ОТВЕТ- *B: IF B=8 GOTO 67 78 L<M>=B: IF.BXO THEN P2=P2+1: Q(M)=0: GOTO 78 72 P1=P1+1: Q(M>=l:PRINT:PRIHT*nPABHflbHO*: IF F1X2 G0T068 74 IF РКЗ GOTO 68 76 PRINT:PRINT*ЗАЧЕТ.* SPRINT#!* ЗАЧЕТ*sGOTO 98 78 IF Fl<3 GOTO 88 86 P3=P3+1: IF P3=2 GOTO 86 82 PRINT*НЕПРАВИЛЬНО*:IF N4=l THEN 60SUB 128 84 PRINT*ОТВЕЧАЙТЕ ЕШЕ РАЗ.*:GOTO 68 86 PRINT*ОПЯТЬ HE УГАДАЛИ. * SPRINT * ПРАВИЛЬНЫЙ-ОТВЕТ -* !2.8!0sG0T0 66 88 PRINT: PRINT*НЕПРАВИЛЬНО* s IF F1X2 GOTO 68 98 IF P2<3 GOTO 68 92 PRINTS PRINT*НЕЗАЧЕТ.*:PRINT#1* НЕЗАЧЕТ*S60T0 98 94 IF Fl=3 GOTO 186 96 PRINT--PRINT* ОЦЕНКА * ! 1.8! Pl SPRINT#! * ОЦЕНКА *P1 98 PRINT*ВОПРОСЫ- *;:FOR 1=1 TO MsPRINT!3.8!M<I);ii;;;sNEXT I:PRINT 188 PRINT*OTBETM- *;sFOR 1=1 TO MsPRINT LCD, s IF Q<I>=8 THEN PRINT* <-> *;sGOTO 164 182 PRINT*<+> *; 184 NEXT I:PRINTsPRINTsPRINTsPRINTsPRIHT#8 186 FOR 1=1 TO 5SPRINTSNEXT I:60T0 48 118 A=(A-1>*N3+150:RETURN 120 IF N4=8 THEN RETURN 122 ON A+N3-1 138 ON A 7999 END
Листинг блока вопросов (сокращенный) 1250 PRI 140 REM 104 ВОПРОСА ПО МИКРОПРОЦЕССОРУ К580ИК80 141 REM 142 Nl=l: N2=104: N3=50 : N4=0:RETURN 150PRINT'K КАКОМУ ПОКОЛЕНИЮ МП ОТНОСИТСЯ МП К580 °':PRINT:PRINT: 0=2:RETURN 280 PRINT-'ТЕХНОЛОГИЯ ИЗГОТОВЛЕНИЯ МП К580.':PRINT:PRINT 202PRINF1. N-МОП': PRINT'2. ИИЛ' :PRINT'3. P-МОП':PRINT'4. КМОП': 0=1: RETURN 250 PRINT'СКОЛЬКО ТРАНЗИСТОРОВ СОДЕРЖИТСЯ В КРИСТАЛЛЕ МП К580ИК80 9':PRINT:PRINT 252 PRINT'l. 5000':PRINT'2. 10000':PRINT'3. 7500':PRINT'4. 6200':PRINT'5. 6800' 254 0=1 "-RETURN 300 PRINT'КАКОВО АДРЕСНОЕ ПРОСТРАНСТВО МП К580ИК80 :PRINT:PRINT 302 PRINT'l. 12K БАЙТ':PRINT'2. 8K БАЙТ':PRINT'3. ПК СЛОВ':PRINT'4. 16K СЛОВ' 304PRINT'5. 64K БАЙТ': 0=5:RETURN 358PRINT'КАКИЕ ЛИНИИ МП ЯВЛЯЮТСЯ ДВУНАПРАВЛЕННЫМИ ^':PRINT:PRINT 352 PRINT'l. WA':PRINT'2. Wy':PRINT'3. UiA':PRINT'4. ША/Ш?' :PRINT'5. ШД/Ш?' 354 0=3:RETURN 400 PRINT'КАКОЙ АДРЕС В МП СЛЕДУЕТ ЗА АДРЕСОМ FFFF ".PRINT:PRINT 402 PRINT'l. FFFF+1' :PRINT'2. FFFF':PRINT'3. 0000'"-PRINT'4. FFFF-1' 484PRINT'5. 0001': 0=3:RETURN 450 PRINT'ПЕРЕЧИСЛИТЬ ГРУППУ СИГНАЛОВ МП» СВЯЗАННЫХ С ПРЕРЫВАНИЕМ МП.':PRINT:PRINT 452 PRINT'l. HOLD':PRINT'2. READ?/RESET':PRINT'3. INT»INTE' 454PRINT'4. WAIT/READ?':PRINT'5. INTA': 0=3:RETURN 500 PRINT'KAKHM СИГНАЛОМ МОЖНО СБРОСИТЬ INTE : PR I NT: PRINT 502 PRINT'l. INTA':PRINT'2. INT' "-PRINT'3. READ?':PRINT'4. WAIT'"-PRINT'5. HOLD' 504 0=2:RETURN 550 PRINT'КАКОЙ КОМАНДОЙ МОЖНО УСТАНОВИТЬ ТРИГГЕР INTE °':PRINT:PRINT 552 PRINT'l. HALT':PRINT'2. INP': PRINT'3. DI':PRINT'4. EI'"-PRINT'5 HOLD’ 554 0=4". RETURN 600 PRINT'ФРОНТОМ КАКОГО СИГНАЛА ОПРЕДЕЛЯЕТСЯ НАЧАЛО ТаКТА МП 9':PRINT:PRINT 602 PRINT'l. НАРАСТАЮЩИМ S?NC':PRINT'2. СПАДАЮЩИМ Ф2':PRINT'3. НАРАСТАЮЩИМ Ф1' 604PRINT'4. СПАДАЮЩИМ Ф2':PRINT'5. СПАДАЮЩИМ S?NC’: 0=3".RETURN 650 PRINT'ФРОНТОМ КАКОГО СИГНАЛА ОПРЕДЕЛЯЕТСЯ БОЛЬШИНСТВО ДЕЙСТВИЙ В СИСТЕМЕ PRINT: PRINT 652 PRINT'l. НАРАСТАЮЩИМ Ф1'". PRINT'2. НАРАСТАЮЩИМ Ф2': PRINT'3. НАРАСТАЮЩИМ S?NC' 654PRINT'4. СПАДАЮЩИМ Ф2':PRINT'5. СПАДАЮЩИМ ФГ: 0=2:RETURN 700 PRINT'KAKHM СИГНАЛОМ ОПРЕДЕЛЯЕТСЯ НАЧАЛО КАЖДОГО МАШИННОГО ЦИКЛА ‘:PRINT:PRINT 702 PRINT'l. Ф1':РР1ИТ'2. Ф2':РР1НТ'3. RESET':PRINT'4. S?NC':PRINT'5. READ?' 704 0=4". RETURN 750 PRINT’B КАКОМ ТАКТЕ МП ВЫДАЕТ НА HID СЛОВО СОСТОЯНИЯ ^':PRINT:PRINT 752 PRINT'l. T2':PRINT'2. МЕЖДУ Т1 И T2':PRINT'3. T3':PRINT'4. Т1':РР1НГ5. T<N-1>'
754 0=4:RETURN 800 PRINT'КАКАЯ ИНФОРМАЦИЯ СОДЕРЖИТСЯ В СЛОВЕ СОСТОЯНИЯ МП ?'sPRINTsPRINT 802 PRINT'1. О ДЕЙСТВИЯХ МП В ПРЕДЫДУЩЕМ ТАКТЕ'SPRINT'2. О ДЕЙСТВИЯХ МП В БУДУЩЕМ ТАКТЕ' 804 PRINT'3. О ДЕЙСТВИЯХ МП В ТЕКУЩЕМ ТАКТЕ'SPRINT'4. О ДЕЙСТВИЯХ В ТАКТЕ Т1' 806PRINT'5. О ДЕЙСТВИЯХ В ТАКТЕ ТЗ': 0=3:RETURN 850 PRINT'УКАЖИТЕ ПАРНЫЕ СИГНАЛЫ СОГЛАСОВАННОГО ОБМЕНА.':PRINT:PRINT 852 PRINT'l. READV-UAIT'SPRINT'2. READV-RESET'sPRINT'3. READV-HOLD' 854PRINT'4. HOLD-RESET': 0=1:RETURN 900 PRINT'УКАЖИТЕ СИГНАЛЫ СОГЛАСОВАННОГО ОБМЕНА.'sPRINTsPRINT 902 PRINT'l. HOLD-HLDA'SPRINT'2. HOLD-HLTA':PRINT'3. HOLD-INT'SPRINT'4. HOLD-INTE' 904PRINF5. HOLD-READV's 0=1:RETURN 950 PRINT'УКАЖИТЕ СИГНАЛЫ СОГЛАСОВАННОГО ОБМЕНА.'SPRINT:PRINT 952 PRINT'l. INTE-HLTA'sPRINT'2. INT-HLTA':PRINT'3. INT-INTE'SPRINT'4. INT-UAIT' 954PRINT'5. INT-HOLD's 0=3sRETURN 1000PRINT'СКОЛЬКО СИГНАЛОВ МП ИМЕЖТ АКТИВНЫМ НУЛЕВОЙ УРОВЕНЬ ?'sPRINTsPRINT: O=lsRETURN 1050 PRINT'УКАЖИТЕ СИГНАЛ МП/ ИМЕЮЩИЙ АКТИВНЫМ НУЛЕВОЙ УРОВЕНЬ.'sPRINTsPRINT 1052PRINT'l. HLDA'SPRINT'2. HOLD'SPRINT'3. INT'sPRINT'4. DBIN' SPRINT'5. UR's 0=5sRETURN 1100 PRINT'MEMV РАВНО (РАВНЫ) НАПРЯЖЕНИЯ ПИТАНИЯ МП К580 ?'sPRINTsPRINT 1102 PRINT'l. +5/-15/-5'SPRINT'2. +5/-5/-12'SPRINT'3. -5/+5/-10' 1104PRINT'4. +5'SPRINT'5. +5/-5/+12': 0=5sRETURN 1150 PRINT'PABOHHA ТЕМПЕРАТУРНЫЙ ДИАПАЗОН МП К580ИК80 ?'sPRINTsPRINT 1152 PRINT'l. -10...+70'sPRINT'2. -20...+20'SPRINT'3. -58...+50' U54PRINT'4. -20...+50'SPRINT'5. -70...+70's O»lsRETURH 1200PRINT'СКОЛЬКО POH ИМЕЕТ МП K580 ?'sPRINTsPRINTs 0=6sRETURN
СПИСОК ЛИТЕРАТУРЫ 1. Алексенко А. Г., Галицын А. А., Иванников А. Д. Проектирование ра- диоэлектронной аппаратуры на микропроцессорах: Программирование, типовые решения, методы отладки. М.: Радио и связь, 1984. 272 с. 2. Банахин М., Раттер Э. Введение в операционную систему UNIX: Пер. с англ. М.: Радио и связь, 1986. 344 с. 3. Гилл А. Программирование на языке ассемблера для PDP-11: Пер. с англ. М.: Радио и связь, 1983. 160 с. 4. Горбатов В. А., Кафаров В. В., Павлов П. Г. Логическое управление тех- нологическими процессами. М.: Энергия, 1978. 272 с. 5. Григорьев В. Л. Программное обеспечение микропроцессорных систем. М.: Энергоатомиздат, 1983. 208 с. 6. Дамке М. Операционные системы микроЭВМ: Пер. с англ. М.: Финансы и статистика, 1985. 150 с. 7. Дьяконов В. П. Справочник по расчетам на микрокалькуляторах. М.: Наука, 1985. 224 с. 8. Зеленко Г. В. Дисплей для бытовой персональной ЭВМ//Микропроцес- сорные средства и системы. 1985. № 3. С. 60—70. 9. Зеленко Г., Панов В., Попов С. Система команд микропроцессора КР580ИК80//Радио. 1982. № 10. С. 24—28. 10. Каган Б. М. Электронные вычислительные машины и системы: Учеб, пособие для вузов. 2-е изд., перераб. и доп. М.: Энергоатомиздат, 1985. 552 с. 11. Каевченко М. А., Майоров В. Г. Проектирование микропроцессорных систем на базе набора МПК580: Учеб, пособие. М.: МЭИ, 1984. 84 с. 12. Корниенко Д. И. Применение микропроцессоров в народном хозяйстве/ О-во «Знание» РСФСР. М.: 1984. 48 с. 13. Корольков А. А., Раденко М. Е., Сеньков В. К. Применение БИС КР580ВВ51 для реализации последовательных интерфейсов микропроцессорных систем//Микропроцессорные средства и системы. 1985. № 1. С. 82—85. 14. Коффрон Дж. Технические средства микропроцессорных систем: Прак- тический курс: Пер. с англ. М.: Мир, 1983. 344 с. 15. Липьят А. Архитектура малых вычислительных систем: Пер. с англ. А. В. Гиглавого и Н. А. Долгиновой/Под ред. К. В. Песелева М.: Мир, 1981. 186 с. 16. Майоров В. Г., Гаврилов А. И. Монитор оценочного модуля//Микро- процессорные средства и системы. 1984. № 4. С. 82—85. 17. Майоров В. Г., Зильберман Д. Е., Бобряков А. В. Отладочный монитор. Смоленский ЦНТИ. Инф. лист № 225—86. 18. Майоров В. Г., Зильберман Д. Е. Система контроля знаний и обучения. Смоленский ЦНТИ. Инф. лист. № 280—84. 19. Майоров В. Г., Зильберман Д. Е. Система отладки программ для микро- процессора КР580ИК80. Смоленский ЦНТИ. Инф. лист № 306—85. 20. Микропроцессоры: В 3-х кн. Кн. 1. Архитектура и проектирование микро-ЭВМ. Организация вычислительных процессов: Учеб, для вузов/П. В. Не- стеров, В. Ф. Шаньгин, В. Л. Горбунов и др.; Под ред. Л. Н. Преснухина. М.: Высшая школа, 1986. 495 с. 21. Микропроцессоры: Системы программирования и отладки/В. А. Мяс- ников, М. Б. Игнатьев, А. А. Кочин, Ю. Н. Шейнин; Под ред. В. А. Мясникова, М. Б. Игнатьева. М.: Энергоатомиздат, 1985. 272 с. 263
22. Попов Б. А., Теслер Г. С. Вычисление элементарных функций на ЭВМ: Справочник, Киев: Наукова думка, 1984. 599 с. 23. Применение программируемых калькуляторов для инженерных и науч- ных расчетов/Л. Ю. Астанин, Ю. Д. Дорский, А. А. Костылев. Л.: Энергоатом- издат, 1986. 176 с. 24. Принципы организации и работы дисплеев на основе БИС КР580ВГ75/ Д. И. Панфилов, Л. А. Романенко, В. С. Сафанюк, С. Г. Шаронин//Микропро- цессорные средства и системы. 1985. № 3. С. 51—60. 25. Пупырев Е. И. Перестраиваемые автоматы и микропроцессорные системы. М.: Наука, 1984. 192 с. 26. Савельев А. Я. Арифметические и логические основы цифровых автома- тов: Учеб. М.: Высшая школа, 1980. 255 с. 27. Сичановский Дж. У. Программирование на МАКРО-11 и организация PDP-11: Пер. с англ. И.: Радио и связь, 1985. 136 с. 28. Смит Дж. Достоверный контроль качества микропроцессоров путем функ- ционального тестирования//Электроника. 1977. № 4. С. 56—62. 29. Соботка 3., Стары Я. Микропроцессорные системы: Пер. с чеш. М.: Энергоиздат, 1981. 496 с. 30. Справочник по цифровой вычислительной технике/Под ред. Б. Н. Мали- новского. Киев: Техн1ка, 1974. 512 с. 31. Столяр Л. Н., Шапошников В. А. Средства проверки работоспособности оборудования СМ ЭВМ. М.: Финансы и статистика, 1986. 142 с. 32. Торгов Ю. И. Однокристальный контроллер прямого доступа к памяти КР580ВТ57//Микропроцессорные средства и системы. 1984. № 3. С. 79—85. 33. Торгов Ю. И. Программируемый таймер КР580ВИ53 и его применение// Микропроцессорные средства и системы. 1984. № 1. С. 77—85. 34. Трохименко Я. К., Любич Ф. Д. Радиотехнические расчеты на микро- калькуляторах: Справочное пособие. М.: Радио и связь, 1983. 256 с. 35. Уейт М., Ангермейер Дж. Операционная система СР/М: Пер. с англ. М.: Радио и связь, 1986. 312 с. 36. Устройство прямого доступа к памяти микроЭВМ/Д. И. Панфилов, О. А. Романенко, В. С. Сафанюк, С. Г. Шаронин//Микропроцессорные средства и системы, 1985. № 2. С. 65—75. 37. Хетагуров Я. А., Руднев Ю. П. Повышение надежности цифровых уст- ройств методами избыточного кодирования. М.: Энергия, 1974. 272 с.
ОГЛАВЛЕНИЕ Предисловие.......................................................... 4 Глава 1, Основы программирования..................................... 6 1. Кодирование символов, цифр, чисел, команд................... 6 2. Основные положения АЛО цифровых ЭВМ........................ 17 3. Передача данных по линиям связи. Контроль на четность и не- четность ..................................................... 19 Глава 2. Элементарные приемы программирования....................... 21 1. Программная модель микропроцессорной системы............... 21 2. Организация обработки однобайтных данных................... 25 3. Организация обработки многобайтных блоков данных........ 31 4. Организация ввода-вывода дискретной и аналоговой информа- ции .......................................................... 34 Глава 3. Программные модели аппаратных средств микропроцессорных систем ............................................................ 37 1. Моделирование ФАЛ, заданных полной таблицей истинности . . 38 2. Моделирование ФАЛ, заданных в СДНФ......................... 41 3. Моделирование минимизированных ФАЛ, заданных в ДНФ . . 42 4. Компиляционный метод программного моделирования логиче- ских схем..................................................... 44 5. Моделирование схем с памятью ............................. 45 6. Программные модели формирователей импульсных последова- тельностей ................................................... 49 Глава 4. Системное программное обеспечение микроконтроллеров и микроЭВМ .......................................................... 53 1. Структура системного программного обеспечения микроЭВМ. . 53 2. Монитор программируемого микроконтроллера.................. 55 3. Программирование кристаллов БИС серии КР580 ............... 62 4. Алгоритмы и программы самоконтроля МПС.................... 114 5. Программы ввода-вывода с контролем на четность-нечетность. Сигнатурный контроль......................................... 119 6. Программы кодирования, декодирования данных, обнаружения и исправления ошибок с помощью кодов Хемминга............... 120 7. Дизассемблер для микроконтроллера «Электроника К1-20» ... 125 Глава 5. Вычисление элементарных функций........................... 130 1. Арифметические операции над числами длиной в один байт ... 130 2. Арифметические операции над многобайтовыми числами .... 132 3. Арифметические действия над числами, представленными в форме с плавающей запятой................................. 134 4. Вычисление элементарных функций........................... 142 5. Структура и управляющая программа калькулятора на микро- процессоре КР580ИК80 ................................. 150 6. Алгоритмы и программы перевода чисел из двоичной формы представления в десятичную и обратно........................ 161 265
Глава 6. Кросс-средства для микропроцессора КР580ИК80 на базе ком- плекса СПП-02 ............................................... 167 1. Блок выбора режима ..................................... 16 7 2. Блок ввода кодов........................................ 16 9 3. Блок вывода кодов и мнемокодов ......................... 17 0 4. Блок моделирования выполнения команд.................... 17 0 5. Кросс-ассемблер ........................................... 172 6. Блок ввода текста......................................... 175 7. Блок установки формы вывода................................ 176 8. Редактор исходного текста ................................. 177 9. Блок записи текста на МЛ .................................. 179 10. Блок считывания текста с МЛ............................ 17 9 11. Общие подпрограммы ....................................... 179 12. Работа с программой ...................................... 182 Глава 7. Микроконтроллеры на базе микропроцессора КР580ИК80 и их применение......................................................... 187 1. Микроконтроллеры на базе микропроцессора КР580ИК80 . . . . 188 2. Система контроля знаний и обучения применению микропро- цессора. Программа на языке БЕЙСИК СПП-02 ................... 192 3. Комплекс на базе микроконтроллера МС2702 и печатающего устройства УВВПЧ-30-004 ..................................... 196 Приложение 1. Примеры программ для микропроцессора КР580ИК80 . . 207 Приложение 2. Прошивка ПЗУ отладочного монитора для МКП-1 . . . 240 Приложение 3. Подпрограммы помехоустойчивого кодирования и деко- дирования данных с помощью кодов Хемминга.......................... 242 Приложение 4. Программный модуль «Дизассемблер — табуляция» . . . 244 Приложение 5. Программа «Калькулятор»............................... 246 Приложение 6. Программа перевода чисел из десятичного кода в двоич- ный и обратно...................................................... 248 Приложение 7. Распечатка программы «Кросс-средства на СПП-02» . . . 250 Приложение 8. Распечатка программы контроля знаний................ 259 Список литературы................................................... 263
ПРОИЗВОДСТВЕННОЕ ИЗДАНИЕ Майоров Владимир Григорьевич, Гаврилов Алексей Игоревич ПРАКТИЧЕСКИЙ КУРС ПРОГРАММИРОВАНИЯ МИКРОПРОЦЕССОРНЫХ СИСТЕМ Редактор Е. В. Григория-Рябова Художественный редактор А. С. Вершинкин Переплет художника А. В. Разумова Технический редактор И. В, Малыгина Корректоры: А. П. Сизова, Л, Л* Шабашова И Б Кв 5642 Сдано в набор 03.08.88. Подписано в печать 22.12.88. Т-22170. Формат 60Х90'/1в. Бумага тип № 1 . Гарнитура литературная. Печать офсетная. Усл. печ. л. 17,0. Усл. кр.-отт. 17,0. Уч.-изд. л. 17,02. Тираж 50 000 экз. Заказ 548. Цена 1 р. 20 к. Ордена Трудового Красного Знамени издательство «Машиностроение», 107076, Москва, Стромынский пер., 4 Ленинградская типография Кв 6 ордена Трудового Красного Знамени Ленинградского объединения «Техническая книга» им. Евгении Соколовой Союзполиграфпрома при Государственном комитете СССР по делам издательств, полиграфии и книжной торговли. 193144, г. Ленинград, ул. Моисеенко, 10.