/
Author: Гаврилов А.И. Майоров В.Г.
Tags: компьютерные технологии программирование микропроцессоры
ISBN: 5-217-00460-6
Year: 1989
Text
В. Г. Майоров, А. И. Гаврилов
ПРАНТИЧЕЕНИЙ
НУРЕ
ПРОНЕЕЕОРНЫХ
ЕИЕТЕМ
В. Г. Майоров, Д, И. Гаврилов
ПРАНТИЧЕЕНИЙ НУРЕ
ПРОГРАММИРОВАНИЯ
МИНРОПРОНЕЕСОРНЫХ
ЕИЕТЕМ
Москва «Машиностроение» 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.