Текст
                    Издательство,,Мир
й. Янсен Кур с
электроники

Курс цифровой электроники
Handboek digitale electronica deel 4 Microcomputers J. H. Jansen Kluwer Technishe Boeken, 1983
И. Янсен_____________ Курс цифровой электроники В 4-х томах Том 4 Микрокомпьютеры Перевод с голландского канд. физ.-мат. наук В. И. ИЛЮЩЕНКО под редакцией д-ра техн, наук И. О. АТОВМЯНА Москва Шир» 1987
ББК 32.85 Я65 УДК 621.38 AlVaKo 17/02/2012 Янсен И. Я65 Курс цифровой электроники: В 4-х т. Т. 4. Микро- компьютеры. Пер. с голланд. — М.: Мир, 1987. — 406 с., ил. Курс создан крупным голландским специалистом в области микросхемотех- ники. В томе 4 изложены принципы построения микроЭВМ на базе современных микропроцессоров. Описана структура отладочного комплекса и рассмотрены во- просы организации ввода и вывода информации. Большое внимание уделено со- ставлению программ на языке Бейсик. Для специалистов в области электроники и вычислительной техники, а также аспирантов и студентов соответствующих специальностей. Я 2405000000-436 041£01)-87 подп. изд. ББК 32.85 Редакция литературы по информатике и робототехнике © 1983 Kluwer Technische Boeken В. V. — Deventer © перевод на русский язык, «Мир», 1987
ПРЕДИСЛОВИЕ РЕДАКТОРА ПЕРЕВОДА В последнее время микропроцессорные средства вычислительной техники стали широко применяться в приборах бытовой техники, в различных контроль- но-измерительных устройствах, системах управления и т. д. Это связано с тем, что они обладают функциональной гибкостью, высокой надежностью, удобны при проектировании, способны реализовать сложные алгоритмы. На базе мик- ропроцессоров разработаны вычислительные машины нового класса, предназ- наченные для широкого использования. В связи с этим компьютерная грамот- ность становится обязательной для любого специалиста. Использование микропроцессорных средств привело к существенному изменению процесса разработки вычислительной и управляющей аппаратуры. Главное внимание стало уделяться вопросам выбора структуры системы, орга- низации подсистем ввода-вывода, создания программного обеспечения, отлад- ки и тестирования разрабатываемой системы. Все эти вопросы в разной степени детализации нашли отражение в предлагаемом вниманию читателя четвертом томе курса по цифровой электронике. Особенностью этой книги является то, что принципы построения и програм- мирования микроЭВМ на базе микропроцессоров излагаются на уровне, до- ступном для ширикого круга читателей. При этом автор прибегает к нагляд- ным аналогиям. Современные вычислительные системы представляют собой системы «че- ловек — машина», при проектировании которых задача рационального распре- деления функций между человеком и машиной является одной из главных. Такая задача иллюстрируется в книге примером автоматизации управленческой деятельности. Принципы работы и архитектура микропроцессора рассматриваются на примере микропроцессора 8085А фирмы Intel, являющегося улучшенным вариантом широко распространенного микропроцессора 8080А (отечественный аналог КР580ИК80). Подробное описание набора команд 8085А, иллюстрируе- мое многочисленными примерами программ, позволит читателю детально познакомиться с особенностями программирования работы микропроцессоров. Разработка и отладка программного обеспечения является трудоемким этапом проектирования микропроцессорных систем, требующим больших за- трат времени и средств. Существенное расширение области применения микро- процессорных систем, необходимость автоматизации разработки программного обеспечения привели к использованию разных по возможностям систем отлад- ки программного обеспечения на базе микроЭВМ — аппаратно-программных комплексов проектирования. Специалистам, занимающимся вопросами проек- тирования микропроцессорных систем, приходится использовать либо промыш- ленные образцы отладочных комплексов, либо простые комплексы собствен- ного изготовления. Подробное описание такого комплекса на базе микропро- цессора 8085А, с которым можно познакомиться в данной книге, несомненно, представляет интерес для разработчиков микропроцессорных систем.
6 Предисловие редактора перевода Построение подсистемы ввода-вывода представляет собой другую не менее сложную проблему проектирования микропроцессорных систем. Подробное описание портов ввода-вывода, структур и режимов работы универсальных программируемых интерфейсов 8255А и 8251А фирмы Intel (отечественные аналоги КР80ВВ55 и КР5808ВВ51 соответственно), примеры их применения, а также управляющих программ, обеспечивающих работу этих интерфейсов с внешними устройствами, несомненно, помогут читателю понять организацию ввода-вывода. Отдельная глава посвящена одной из версий Бейсика — простейшего диалогового языка, нашедшего широкое применение в микроЭВМ. Подробное описание операторов и команд языка, сопровождаемое значительным коли- чеством примеров, позволяет рекомендовать эту главу в качестве руководст- ва при изучении языка Бейсик. Высокий методический уровень и простая форма изложения сложных вопросов теории и применения микропроцессоров, а также многочисленные практические примеры позволяют надеяться, что предлагаемая книга будет полезна не только для студентов, изучающих микропроцессорные средства, но и для инженеров и научных работников, интересующихся вопросами цифро- вой электроники и вычислительной техники. И. О. Атовмян
ПРЕДИСЛОВИЕ АВТОРА В предыдущих томах большое внимание уделялось ком- бинационной логике, т. е. сложным логическим схемам, состоя- щим из элементов, реализующих простые функции. Некоторые сложные схемы поставляются в виде ИС. Такие устройства, как селекторные каналы, шифраторы, дешифраторы, регистры и т. д., можно использовать для создания схем, реализующих еще более сложные функции. Отличительной особенностью комбинационной логики явля- ется то, что реализуемая функция определяется межэлемент- ными соединениями (связями). При этом монтажная схема со- единений служит своеобразным эквивалентом ЗУ и полностью задает режим обработки данных. Изменение какой-либо функ- ции сводится к изменению монтажной схемы. В связи с этим возникает вопрос, а нельзя ли создать такую монтажную схе- му, которая обеспечивала бы коммутацию межэлементных соединений, т. е. чтобы в один момент времени схема реализо- вала функцию f (х), а в другой — f (у). В данный момент вре- мени определенная схема не может реализовать одновременно две или большее число разных функций. Как известно, данные обычно обрабатываются последова- тельно. При этом центральный процессор, который в принципе может реализовать много функций, выполняет различные опе- рации. Блоки обработки данных вводятся в действие с помо- щью устройства управления. Команды, находящиеся в ЗУ, оп- ределяют вид обработки на данном шаге. Используя последовательный способ обработки данных, можно выполнить самые сложные операции с помощью одних и тех же простых цифровых схем. Если центральный процес- сор выполняет и арифметические операции, на его основе мо- жет быть создана вычислительная система, которую мы назы- ваем ЭВМ (компьютером). Обработка данных на ЭВМ осу- ществляется с помощью программ, состоящих из последова- тельности команд. В четвертом томе рассмотрены основные аспекты как аппа- ратного, так и программного обеспечения ЭВМ, в том числе вопросы ввода и вывода данных. В последней главе описаны 16-разрядные микропроцессоры, которые в 80-х годах получили широкое распространение наряду с 8-разрядными микропроцес- сорами. Я выражаю искреннюю благодарность всем, кто содейство- вал мне в написании четвертого тома. Хазерсвуде, весна 1983 г. И. Янсен
Глава 1 СИСТЕМНЫЙ АНАЛИЗ 1.1. Введение Понятие «система» в этой книге используется при- менительно к сложным цифровым схемам. . Такой системой- является, например, ЭВМ. Под системным анализом можно понимать детальный анализ компьютерной системы, однако, обычно используя этот термин, имеют в виду нечто другое. На языке специалистов по автоматике системный анализ организационно-производственной системы (существующей или проектируемой) означает анализ с целью выяснения возможно- сти ее автоматизации. В настоящей главе проводится системный анализ организа- ционно-производственных и компьютерных систем. Здесь, в частности, показывается, как цифровые системы применяются при обработке административно-управленческой информации. Кроме того, уделяется внимание тем общим аспектам, на кото- рых основана работа ЭВМ как системы. Рассматриваются некоторые проблемы программирования и связи с компьютер- ной системой. Эта система может быть весьма простой и уп- равлять какими-либо процессами на битовом уровне, а может быть сложной по структуре и обрабатывать большие массивы данных административно-управленческого характера, как, на- пример, в банках, страховых обществах и на предприятиях. Более развитые системы снабжаются большим количеством стандартных программ, а все их связи с внешним миром осуще- ствляются при помощи терминалов и принтеров. Специальные программы, расширяющие возможности технических средств ЭВМ, называются операционными системами; здесь мы снова сталкиваемся с одним из специальных терминов, который со- держит слово «система». Правда, здесь это слово имеет совсем другой смысл по сравнению со словом «система» в терминах «организационно-производственная система» или «компьютер- ная система». Термин «анализ» на языке специалистов по вычислительной технике охватывает различные понятия, относящиеся к систе- мам.
Системный анализ 9 В последующих разделах сначала будет детально рассмот- рено понятие системного анализа в сфере организационно-про- изводственных отношений. Наблюдая, какие сложные операции выполняются человеком, трудно понять, каким образом ЭВМ с ее довольно простыми логическими функциями заменяет че- ловека при выполнении этих сложных операций. Все организа- ционно-производственные процессы базируются на трех основ- ных функциях — И, ИЛИ и НЕ. Более сложные функции по- лучаются с помощью сложных связей между этими элементар- ными функциями. При рассмотрении комбинационных функций мы имели де- ло, например, с функциями выбора, распределения, суммирова- ния, кодирования и декодирования, которые действительно можно выразить через функции И, ИЛИ и НЕ. Сложная функ- ция по существу определяется способом осуществления связей между И, ИЛИ, НЕ. Известно, например, что современные микроЭВМ, которые размещаются на одном кристалле, имеют набор команд, содержащих элементарные логические функции. Как и в случае комбинационной логики, с помощью этих эле- ментарных функций микроЭВМ реализует более сложные функции используя соответствующие связи. Эти связи опре- деляются программой. Приведем для иллюстрации некоторые примеры. Например, чтобы связать А и D, можно использовать су- ществующие связи между А и В, В и С, С и D. Эти связи мо- гут быть магистральными. Указанные выше три участка со- единяются в следующем порядке: А с В, затем В с С и, нако- нец, С с D. На практике магистральная связь представляет собой соединение разных шин. Такие соединения встречаются и в ЭВМ, где они задаются и описываются командой MOV. Команды MOV — это эле- ментарные приказы, которые осуществляют передачу данных либо между регистрами, либо между регистром и ЗУ. Их мож- но сравнить с функцией курьера какой-либо конторы, который переносит документы с одного места в другое, а также копии счетов в архив. Например, когда бухгалтер просит курьера принести копию документа из архива, то такая просьба тоже аналогична команде MOV. Как видно, каждый раз курьеру указывается адрес», по которому он выполняет команду MOV. Элементарными функциями являются также суммирование и вычитание, с помощью которых можно реализовать такие более сложные функции, как умножение, деление и т. д. Бо- лее сложная функция умножения состоит из повторяющихся сложений и сдвигов множимого под управлением множителя; при делении имеют место повторяющиеся вычитания и сдвиги, которые продолжаются до тех пор, пока остаток от деления не
10 Глава 1 станет равным нулю или не изменит знак. Из функций сумми- рования, вычитания, умножения и деления можно скомбиниро- вать другие, еще более сложные функции, которые могут при- меняться в более сложных расчетах. Если применить вышеприведенные рассуждения к людям, то можно заметить, что сразу после рождения человек не мо- жет использовать все свои части тела по прямому назначению. Сначала он учится ими владеть, т. е. фактически «программи- рует» свои последующие действия. Подрастая, он учится гово- рить, приобретает необходимый опыт поведения в обществе и идет в школу. Фактически в период от рождения до совер- шеннолетия человек разрабатывает и использует определенные программы поведения, которые обеспечивают ему возможность оптимального функционирования в обществе. ЭВМ и различные автоматы являются по существу робо- тами, заменяющими человека при выполнении различных опе- раций. По этой причине ЭВМ и автоматы можно рассматри- вать и анализировать точно так же, как это делается по отно- шению к человеку в обществе. Однако для включения ЭВМ и автоматов в процессы производства и управления необходимо сначала понять логику таких процессов. Прежде чем разраба- тывать конструкцию робота, который должен реализовать оп- ределенную функцию, следует детально проанализировать эту функцию. Организационно-производственные процессы описываются сложными функциями, которые основываются на элементарных функциях типа И, ИЛИ и НЕ. Это утверждение сначала ка- жется малоправдоподобным, потому что в этой сфере мы не встречаем функций в столь простой и ясной форме, а гораздо чаще имеем дело с более сложными функциями типа кодиро- вания, декодирования, выбора и распределения. Однако эти более сложные функции действительно сводятся к элементар- ным функциям, между которыми существуют логические связи. В математике эти связи более ясные, потому что здесь с по- мощью строгих доказательств можно показать, что комбина- ции элементарных функций действительно являются сложными функциями и что полученное соотношение между входными и выходными переменными правильное. Аналогичная ситуация наблюдается и в химии, где строго доказывается, что, напри- мер, соединение Н2 и О дает Н2О, т. е. воду. В случае системного анализа мы действуем в основном в обратном направлении. Известна определенная сложная функция; для реализации этой функции с помощью робота ее необходимо прежде всего разложить на элементарные функции, эквиваленты которых имеются как в комбинационной логике, так и в программном обеспечении ЭВМ. Комбинационная ло-
Системный анализ 11 гика охватывает как элементарные функции типа И, ИЛИ, НЕ, так и сложные функции типа выборки, распределения и коди- рования. В случае ЭВМ элементарная функция может быть реализована с помощью лишь одной команды, однако и здесь встречаются сложные функции, для которых составляются под- программы. Под подпрограммой понимается некоторая специ- альная программа, например для расчета зарплаты, вычисле- ния тригонометрических функций, логарифмов и т. д. Для проведения системного анализа необходимо распола- гать сведениями о ходе протекания различных процессов и об элементах комбинационной логики и аппаратурного обеспече- ния ЭВМ. Специалист по системному анализу требует де- тального описания данного процесса от того, кто дает ему за- дание на автоматизацию этого процесса. Разделение на эле- ментарные функции, которые имеют соответствующие аналоги в комбинационной логике или в программном обеспечении ЭВМ, является вопросом профессионального мастерства. В повседневной жизни мы все время сталкиваемся с систем- ным анализом и с задачей разложения сложных функций на элементарные. Рассмотрим пример изготовления такого функ- ционального объекта, как ящик. В рамках системного анализа, который используется уже на стадии планирования, мы задаем следующий первый вопрос: какие материалы и какие соедини- тельные элементы понадобятся при изготовлении ящика? Де- тализируя этот вопрос, уточняем — какие измерения необходи- мо сделать? Ответив на эти два вопроса, переходим к следую- щему — где можно приобрести требуемые материалы? Намечаются способы решения задачи поставок. Планиро- вание— это половина работы. Только после того как будет со- ставлен точный план, можно приступить к изготовлению ящи- ков. В идеальном случае составленный план обеспечивает про- грамму действий в определенном порядке, так как сначала нужно заготовить доски, а затем склеивать ящик, а не наобо- рот. Такой подход кажется вполне логичным и трудно понять, зачем здесь нужен еще какой-то специальный системный ана- лиз. Если имеется набор необходимых инструментов, то их нужно правильно применять на каждом этапе процесса изго- товления ящика. Однако если вы не уверены, какой именно инструмент вам понадобится на следующем этапе работы, то следует воспользоваться системным анализом. Подобная ситуация возникает, например когда необходимо смонтировать ТВ-антенну на крыше дома. Может случиться так, что монтажник, находящийся на крыше, вдруг поймет, что ему нужно взять еще один инструмент, который в данный момент лежит на земле. Из подобных ситуаций следует, что если вы
12 Глава 1 занимаетесь монтажом ТВ-антенн от случая к случаю, то луч- ше начать эту работу с планирования, т. е. воспользоваться вначале бумагой и карандашом. То же самое может произой- ти с планом проведения отпуска. Отпуск следует тщательно спланировать, чтобы не терять время на непредвиденные об- стоятельства. Как известно, производственная деятельность также состо- ит из отдельных этапов и порядок, в котором они должны про- водиться, т. е. график работ, тоже необходимо тщательно планировать. Перед началом работ процесс производства ана- лизируется и составляется программа его реализации; при этом существенную роль играют такие элементы, как закупки и складирование деталей и материалов, обеспечение необходимо- го числа работников, проверка качества готовой продукции и обеспечение требуемой упаковки — все они должны быть спла- нированы совершенно четко. Такая схема производственной деятельности позволяет легко понять, на какие этапы (опера- ции) можно разделить процесс изготовления продукции и при- годны ли определенные этапы для дальнейшей автоматизации, например, такие, как закупка материалов, продажа и управ- ление запасами. Специалист по системному анализу должен исследовать, имеет ли техника автоматизации методы и сред- ства, необходимые для решения соответствующей задачи, и как реализовать эти методы с помощью простых или более слож- ных функций. 1.2. Автоматизация управленческой деятельности Рассмотрим в качестве примера автоматизацию управлен- ческой деятельности на фабрике — изготовителе бумажных мешков, размеры которых соответствуют определенным стан- дартам. Многочисленные заказы на бумажные мешки по почте до- ставляются на фабрику, где они проходят этап инвентариза- ции. При этом выписываются требования (формуляры) на продукцию с указанием размеров изделий, сорта бумаги, необ- ходимого количества мешков и т. д. Один экземпляр формуля- ра остается у администрации, а другой отправляется в отдел снабжения, который сортирует заказы по размерам изделий, сорту бумаги и виду этикетки. Каждую неделю на основе имею- щихся заказов составляется производственная программа, целью которой является максимально эффективная загрузка парка машин предприятия. На основании подготовленного общего плана для каждой машины составляется недельная программа выпуска готовых изделий. По этой программе в свою очередь составляется за-
Системный анализ 13 каз-наряд, в котором указываются следующие данные: имя и адрес клиента, размеры бумажных мешков, сорт бумаги, вид этикетки и количество мешков. По окончании процесса изго- товления эти наряды вместе с мешками отправляются в отдел упаковки. Здесь мешки упаковываются и снабжаются наклей- кой с адресом, на которой также указываются содержимое па- кета и его вес, после чего посылка переправляется в экспеди- цию для отправки клиенту. В экспедиционном отделе для железной дороги подготавли- вается сводный список-формуляр, который проверяется при погрузке посылок в вагоны и служит основой для расчета транспортных расходов. Затем заказы-наряды возвращаются в административный отдел, где после калькуляции цен мешков на них выписываются накладные. Одна копия накладной обрабатывается в дебиторском от- деле, другая переправляется в архив, и счет пересылается по почте. Ежемесячно проводится проверка оплаты счетов клиен- тами. Счета регистрируются в бухгалтерии, которая использу- ет полученную информацию для решения вопроса о предостав- лении кредитов клиентам. Бухгалтерия рассчитывает сумму налога и в конце месяца переводит ее в финансовое управление. Отдел зарплаты про- изводит ежемесячное начисление зарплаты, делает из нее вы- четы и заносит результаты калькуляции в бухгалтерские кни- ги. Отдел хранения готовой продукции подсчитывает необхо- димое количество готовых изделий по копиям заявок и при не- обходимости пополняет имеющиеся в наличии запасы. Такова в общих чертах картина действий администрации на реальном предприятии по изготовлению бумажных мешков. Теперь рассмотрим какие управленческие операции на этом предприятии можно возложить на ЭВМ, которая должна за- менить соответствующий персонал. ЭВМ на этом предприятии может выполнять следующие операции: собирать данные, рассчитывать и печатать наклад- ные, сортировать, с помощью принтера (печатающего устрой- ства) печатать адреса клиентов на бирках или этикетках, рас- считывать зарплату с необходимыми вычетами, заполнять ведомости для железной дороги, вести бухгалтерские книги для дебиторского и кредиторского отделов и передавать в ЗУ (дисковые ЗУ) данные по запасам продукции за большие про- межутки времени. Короче говоря, на данном предприятии ЭВМ может выполнить почти всю управленческую работу. Заказы, поступившие на фабрику, вводятся оператором в ЭВМ. Оператор печатает следующие данные: номер клиента, формат изделия (например, Н7), сорт бумаги и требуемое количество мешков в весовых единицах. Система ввода данных
14 Глава 1 может состоять из терминала с клавиатурой и дисплея с экра- ном, которые работают в режиме прямого доступа (on-line) с системой обработки данных, однако можно применить авто- номную станцию ввода с магнитным диском, которая работает в режиме непрямого доступа (off-line). При использовании стан- ции непрямого ввода дисковый пакет, т. е. группа дисков в гер- метичном корпусе, находится в дисковом ЗУ терминала. На дисках размещается база данных (БД) с информацией по дебиторам и имеющимся заказам. При поступлении новых зака- зов оператор вводит новые данные на диск. Эта операция на- зывается корректировкой (обновлением) накопленных данных. На небольших предприятиях с ограниченным объемом обраба- тываемых данных в основном используется режим прямого доступа. При большом объеме обработки переходят к непря- мому доступу, особенно в тех случаях, когда система полностью загружена другими задачами. В режиме ввода с прямым доступом ЭВМ сразу же разме- щает поступивший заказ в файл Н7 (с данным сортом бума- ги), находящийся в ЗУ, где размещены и другие заказы с при- знаками Н7 (с тем же сортом бумаги). В конце недели все введенные в ЗУ заказы извлекаются, при этом изделия сорти- руются по формату и сорту бумаги. ЭВМ указывает номер ма- шины, на которой можно изготовить бумажный мешок данного типа. Таким образом, планирование производства становится реальным фактом. Для сопровождения заказов в производственный отдел с помощью ЭВМ создается технологическая карта, в которой содержатся все необходимые данные. Одновременно принтер печатает бирки с адресами или этикетки соответствующего типа для последующей пересылки мешков клиентам. Сопроводительные документы сообщают производственному отделу точную последовательность технологических операций. Перед началом выполнения заказов на технологической карте указывается планируемое время начала работы. По окончании работы соответствующая временная отметка также заносится в технологическую карту. Продолжительность выполнения за- казов позволяет оценить реальные затраты, на основании ко- торых определяется цена изделия. Далее технологическая карта и бирки с адресами поступа- ют вместе с мешками в экспедицию, где они упаковываются и взвешиваются. Вес каждой упаковки с мешками записывает- ся на карте и на бирке, а также в товарную ведомость для железной дороги. После этого технологическая карта возвра- щается в ЭВМ и оператор вводит указанный на карте вес в базу данных. Технологические карты, поступившие в ЭВМ в течение определенного периода времени, проверяются по раз-
Системный анализ 15 личным параметрам и используются затем для целей контроля. Теперь можно перейти к финансовой части управленческой деятельности. Процесс заключения сделок распадается на ряд отдельных фаз, которые связаны между собой с помощью ав- тономной программы. Сначала для каждого заказа на основа- нии веса упаковки определяется сумма накладных расходов и налога, а также выбираются остальные заказы данного клиен- та. Цены на мешки определенных размеров, изготовленные из бумаги данного сорта, кодируются и передаются в ЗУ ЭВМ. Производится корректировка цен с учетом показателей инфля- ции. Возможна также корректировка данных, вызванная изме- нением суммы налога и т. д. После расчета накладных расходов накладная автоматиче- ски распечатывается с помощью принтера, связанного с ЭВМ. При этом используется непрерывный формуляр, т. е. формуляр в виде рулона (перфоленты) или пакета перфокарт с перфо- рацией для разделения формуляров по типам. Формуляры имеют классификацию, которую понимает ЭВМ. При распечат- ке накладных система обработки данных следит за тем, чтобы формуляр всегда находился в таком положении, которое позво- ляет напечатать имя и адрес клиента, а также параметры из- делия и расходы по разным статьям в определенных колонках. После распечатки накладные отделяются друг от друга и рас- кладываются по конвертам для последующей рассылки по ад- ресам. Одновременно с обработкой накладных дебиторский отдел ведет свою бухгалтерию, т. е. определяет общую сумму налога, рассчитывает реальные расходы на основе сроков изготовления и затрат бумаги и затем вносит эти данные в ЗУ с целью оп- ределения рентабельности, для чего применяется отдельная программа. Полученные при этом данные пересылаются на магнитный диск. Предполагаемая сумма оплаты заказов фиксируется по накладным и вводится через терминал в систему. Затем деби- торский отдел обрабатывает все данные с помощью специаль- ной программы и отправляет их в расчетный отдел. По истече- нии срока, например в 30 дней, производится обработка полу- ченной почты с оплаченными счетами, после чего с помощью принтера распечатываются формуляры и клиентам направля- ются документы с информацией по окончательным рас- четам. Количество бумаги, использованной за неделю и за день, определяется с помощью ЭВМ, сравнивается с переходящими остатками, и соответствующая информация направляется в от- дел снабжения. Другие программы оперативно обрабатывают данные по всем реализуемым заказам и позволяют контроля-
16 Глава 1 ровать рентабельность предприятия, на основании чего админи- страция делает соответствующие выводы. Если мы используем ЭВМ, то не нужно ждать конца года, чтобы подсчитать убытки и прибыли. ЭВМ осуществляет эти операции, например, каждый месяц, что позволяет принять над- лежащие оперативные меры для улучшения конкретного про- изводства. С помощью этой же ЭВМ кредиторский отдел мо- жет вести свою внутреннюю бухгалтерию, рассчитанную на раз- личные сроки. Бухгалтерия отдела снабжения ведется на основе данных по потребностям и закупкам бумаги различных сортов. При этом возникают проблемы выбора, сортировки, баланса заку- пок и производственного потребления бумаги, находящейся на складе. Разница между реальным и расчетным запасами бума- ги дает долю отходов, которую необходимо все время умень- шать. Таким образом, можно полностью автоматизировать про- цесс управления производством товаров на данном предприя- тии, эффективно контролируя производственную и финансовую деятельность. Кроме того, на данном предприятии можно ввес- ти отдельную систему для расчета зарплаты и автоматическо- го ведения банковских счетов. Если использовать для этих це- лей систему с ЗУ на диске или ленте и обеспечить к ней доступ со стороны банка, то можно избавиться от трудоемкой про- цедуры ввода в ЗУ банковских поручений. Нажимая один раз в месяц на клавишу, можно будет рассчитать все налоги и отпечатать требуемые результаты. В процессе обработки данных такая информация, как имена и адреса покупателей, поставщиков, количество поставлен- ных товаров, цены и сведения о работниках для расчета зар- платы, а также другие аналогичные данные обычно хранятся в массовом ЗУ, т. е. ЗУ на магнитных дисках емкостью в не- сколько мегабайт. При обработке данных типа расчетов накладных и зарпла- ты можно использовать такую организацию, при которой обра- батывающая система будет выбирать соответствующие количе- ственные данные, которые находятся на определенных страни- цах дискового тома, пересылать их в ЗУПВ (запоминающее устройство с произвольной выборкой), обрабатывать, коррек- тировать и печатать. В случае обработки накладных в ре- зультате будут получены аккуратно заполненные копии на- кладных с адресами клиентов, характеристиками поставленных товаров, ценами и итоговыми суммами, тогда как для отдела зарплаты будут заполняться формуляры с расчетом зарплаты, указанием начисленных премий, налогов на социальное обес- печение и подоходного налога. Данные о состоянии заказов
Системный анализ 17 могут обрабатываться непрерывно, а отдел зарплаты произво- дит обработку своих данных только эпизодически. Корректировка наборов данных происходит в том случае,, когда в режиме непрямого доступа требуется обрабатывать большое число изменений. В такой корректировке центральная ЭВМ не участвует. Для корректировки обычно используется отдельная система ввода данных, так называемая периферий- ная ЭВМ, которая снабжена дисковыми ЗУ, позволяющими присоединять большое число терминалов. С помощью терми- налов, снабженных клавиатурой и дисплеями, операторы вво- дят требуемые данные в ЭВМ, при этом контроль введенных данных осуществляется визуально с помощью дисплея. Каж- дая вводимая строка отображается на экране дисплея и опе- ратор решает, что делать с ней далее — исправлять или запи- сывать в файл. Проверенная информация, снабженная необходимым адре- сом, поступает через систему ввода данных и записывается на диск сменного дискового пакета, который размещается на дис- ководе периферийной ЭВМ. Диск (или диски) данного пакета обычно соответствует определенному набору данных. Периферийная ЭВМ снабжена не только одним или не- сколькими дисководами и дисковыми ЗУ, но и принтером, ко- торый печатает на бумаге результаты обработки с помощью программы управления базой данных (ПУБД), т. е. обраба- тывающей программы периферийной ЭВМ. Пакет дисков, т. е. группа дисков ЗУ в герметичном кор- пусе, используется для таких операций с данными, как, напри- мер, печать накладных, хранящихся в нем. В процессе коррек- тировки данных пакет дисков размещается на дисководе пери- ферийной ЭВМ и используется для передачи в набор данных новой информации с соответствующими изменениями. Для обработки данных с большой скоростью необходимо хранить информацию на диске в такой форме, которая допус- кает быстрый доступ. Эту форму хранения обеспечивает ПУБД. Возникающие при этом проблемы напоминают те, с которыми имеет дело архивариус. Архив необходимо система- тически пополнять таким образом, чтобы служащие могли быстро отыскать в нем любые интересующие их данные, т. е., другими словами, архив должен быть полным и обеспечиваю- щим быстрый доступ к документам. Для решения этой задачи на ЭВМ можно воспользоваться тем, что в дебиторском отделе каждый клиент получает для хранения данных участок ЗУ емкостью в 256 байт (256 симво- лов). На этой странице помещаются следующие данные: имя, адрес, данные по ликвидным фондам и количество товаров, которое клиент заказал за определенный промежуток времени.
18 Глава 1 Однако при использовании такого метода хранения информа- ции объем ЗУ используется слишком расточительно, потому что каждому клиенту резервируется одинаковый участок ЗУ (256 байт) независимо от объема информации клиента. Дан- ные клиента, который делает немного заказов, будут занимать только часть отведенного ему участка, тогда как для другого заказчика отведенный ему участок ЗУ может оказаться недо- статочным. В связи с этим специалисты по программному обеспечению управленческой деятельности разработали методы хранения, ко- торые обеспечивают более эффективные режимы работы ЗУ, чем указанные выше. При этом доступ к данным обеспечивается с высокой скоростью, а объем ЗУ используется с максимальной эффективностью. Различные методы хранения данных реализо- ваны в так называемых системах управления базами данных (СУБД), число которых в настоящее время весьма значительно. Если из-за большого объема бухгалтерской информации об- мен данными между предприятиями и банками требуется осу- ществлять за счет обмена дисковыми ЗУ, то необходимо предус- мотреть, чтобы системы баз данных были везде более или менее стандартными. Это условие в настоящее время выполнено почти повсеместно. Требуемый режим хранения данных на диске обычно обеспе- чивает периферийная ЭВМ, которая снабжается соответствую- щей программой. При этом центральная система обработки дан- ных работает так, чтобы обеспечить быстрый поиск и накопле- ние обрабатываемых данных. В этой системе результаты обра- ботки также записываются на диск с помощью встроенной ПУБД. Данные обрабатываются программами для решения задач дебиторского и кредиторского отделов, а также отделов снабже- ния и зарплаты, которые используют систему в режимах с пря- мым и непрямым доступом. Мы упоминаем здесь также и непря- мой доступ, потому что соответствующие программы часто бы- вают настолько большими, что их тексты приходится хранить на отдельном диске. Если требуется, например, программа для рас- чета зарплаты, то сначала текст этой программы переписывается с диска в ЗУ, и только после этого она используется для реше- ния поставленной задачи. Данные, хранящиеся на дисках, во время обработки постра- нично переносятся с дисков в ЗУПВ. Система обрабатывает эти данные и по окончании очередного этапа опрашивает следую- щую группу страниц ЗУ. Передача содержимого дисковой па- мяти в ЗУПВ центральной системы происходит при выполнении операции прямого доступа к памяти. Эта передача осуществля- ется очень быстро, причем без вмешательства центрального про-
Системный анализ 19 цессора. Отсюда видно, что система баз данных должна иметь программы для работы с наборами данных. При этом может потребоваться, чтобы различные наборы были обработаны од- новременно с помощью одной сложной программы. В этом слу- чае понадобится несколько дисководов одновременно, а также несколько выходных устройств, т. е. принтеров для печати соот- ветствующих списков данных. В обсуждавшемся выше примере фабрики по изготовлению бумажных мешков требовалось, например, после сбора сведений о поступивших заказах выполнить обработку этих входных дан- ных с помощью центральной ЭВМ, чтобы затем спланировать необходимый парк машин и получить информацию об имеющих- ся запасах бумаги и клея. В этом примере потребовалось два принтера. Данные можно выводить, конечно, и последовательно^ и тогда списки будут напечатаны один за другим на одном прин- тере. Банковские учреждения, которые обрабатывают счета вклад- чиков по стране в целом, обычно используют центральную рас- ширенную систему обработки данных, которая размещается, на- пример, в столице. Изменения в счетах, поступающие в центр иа местных отделений банков, передаются по специальной теле- фонной линии. Крупные отделения банков располагают система- ми ввода данных с одним или большим числом терминалов и вносят изменения в счета непосредственно на магнитный диск. В ночное время суток измененный набор данных пересылается по телефонной линии связи с диска местного отделения в цент- ральную систему обработки данных, где затем производится об- работка этого набора вместе с наборами данных из других отде- лений, банковских контор и предприятий. Скорректированные результаты возвращаются в местные отделения банка на соот- ветствующие дисковые ЗУ. При этом данные, находящиеся на диске, можно вывести на экран дисплея с клавиатуры терми- нала и при помощи специальных команд и индекса данного клиента проверить, достаточен ли остаток по счету для того,, чтобы можно было произвести соответствующую банковскую операцию. Однако во время обработки данных можно «сбиться с верно- го пути» в различных точках маршрута обработки. Для контро- ля правильности считывания битовых структур с дисковых ЗУ существуют различные методы LRC, VRC, CRC, которые1) были рассмотрены ранее в т. 3, гл. 4. Например, при использовании !) LRC — продольный контроль избыточности, VRC — поперечный конт- роль избыточности, CRC — контроль при помощи циклического избыточного кода. — Прим, перев.
20 Глава 1 CRC-метода вероятность того, что битовая информация будет считана с ошибками, составляет менее 10-6. Дисковые ЗУ повреждаются во время аварий, когда универ- сальная головка задевает поверхность диска, в результате чего соответствующая магнитная дорожка с данными уничтожается. Ясно, что вероятность подобной неприятности заставляет отдел обслуживания ЭВМ иметь копию информации на втором диске. Полезно также иметь копию данных на бумаге, например, для того чтобы можно было внести изменения, если появится в этом необходимость. С другой стороны, при обработке данных на ЭВМ можно предусмотреть такой режим работы, чтобы авария не приводила к серьезным последствиям. Для обмена наборами данных между предприятием и банком удобно использовать автоматизированные устройства разных типов. В качестве при- мера рассмотрим более подробно процесс начисления зарплаты. Как известно, некоторые предприятия обрабатывают соответст- вующие данные в собственном отделе зарплаты. Требуемые при этом данные, которые включают имя, адрес, номер банковского счета и сумму зарплаты к выдаче, помещаются на диск. Этот диск сменного типа пересылается в банк, который использует его в качестве элемента системы ввода данных для своей систе- мы обработки данных. Банковская ЭВМ обрабатывает данные и вносит требуемые коррекции в зарплату на личные счета ра- ботников данного предприятия. Приведем еще один пример обмена наборами данных теперь уже между предприятиями. Фирма, производящая потребитель- ские товары в широком ассортименте, собирается издать новый прейскурант на основе набора данных о товарах с ценами для оформления накладных. При составлении прейскуранта ЭВМ можно запрограммировать так, чтобы она сортировала товары по некоторым определенным показателям: ценам, размерам и т. д. С помощью сортирующей программы можно составить алфавитный список для последующего занесения в прейскурант. После обработки набор данных из этого списка передается с дис- ка на принтер, который во время печати использует некоторые специальные данные, записанные на диске в качестве входных для редактирующей ЭВМ. Такими специальными данными могут быть, например, требуемые типы букв (прописные или строч- ные), прямой или курсивный шрифт, величина пробела в начале строки, число интервалов между строками и т. д. После редак- тирования на диске создается новый набор данных, который можно использовать в качестве входного набора для так назы- ваемой наборной ЭВМ. Эта ЭВМ, которая специально разработа- на для полиграфистов, обеспечивает на выходе следующие друг за другом страницы прейскуранта, напечатанные на специаль- ной пленке. С помощью этой пленки можно отпечатать экземп-
Системный анализ 21 ляры прейскуранта определенного формата, используя соответ- ствующий фотопроцесс и офсетную печать. Здесь также проис- ходит последовательная обработка информации на ЭВМ с ми- нимальным участием человека. Для обработки информации административно-управленче- ского характера в распоряжении пользователя имеется большое число стандартных программ и подпрограмм, написанных на языке высокого уровня — Кобол. Основой этих стандартных про- грамм является пакет программного обеспечения, который обыч- но поставляется вместе с приобретаемой ЭВМ. Здесь имеются в виду стандартные программы для ввода данных, управления базой данных, сортировки, сбора и т. д., а также программы для расчета накладных, применяемые в разных отделах. Разумеется, на основе этого пакета можно создать специальные программы, предназначенные для решения производственных задач опреде- ленного типа. Таким образом, при использовании ЭВМ про- граммное обеспечение больших затруднений не создает. Доволь- но много времени может потребовать первоначальный ввод дан- ных в базу данных, особенно когда эти данные имеют большой объем. Кстати, что касается понятия базы данных, то представ- ление о ней можно составить на основе различных примеров, одним из которых является словарь, где все слова располагают- ся по алфавиту, чтобы было удобнее отыскивать незнакомые слова. Другим примером базы данных из области техники явля- ется справочник по электронным компонентам, например по ИС серии ТТЛ. Справочник по ИС обычно имеет указатель с но- мерами типов ИС, расположенными в порядке возрастания, и номерами страниц, на которых можно найти полные данные о соответствующей ИС, т. е. листки технических данных. Указа- тель можно вполне адекватно определить термином «ключ файла». Поиск требуемой страницы происходит обычно весьма при- ближенно, т. е. по методу последовательных приближений. Этим методом интуитивно пользуются почти все. Чтобы найти требуе- мую страницу, мы не подсчитываем все страницы, начиная с са- мой первой. Сначала оцениваем, где примерно находится тре- буемая страница, и продвигаемся вперед, производя все более мелкие оценки до тех пор, пока не найдем требуемую страницу. Поиск в электронном архиве, находящемся на магнитном диске, происходит аналогичным образом, что позволяет получить зна- чительную экономию во времени по сравнению с методом после- довательного перебора данных. Поиск по методу последователь- ных приближений носит название «дихотомический (бинарный) поиск». Перед началом поиска данных в файлах по этому методу произвольно введенные данные требуется сначала рассортиро-
22 Глава 1 вать. Метод сортировки с перестановкой записей позволяет ре- шить эту задачу с помощью относительно небольшого дополни- тельного объема ЗУ. Этот метод сортировки можно проиллюст- рировать на следующем примере. Допустим, что у нас имеется набор карт, которые необходимо расположить в алфавитном по- рядке. Вначале все карты смешаны в беспорядке. Мы берем первую карту и узнаем, что она помечена буквой Р. Затем бе- рем вторую карту и видим, что она помечена буквой D. Помеща- ем P-карту после D-карты и берем следующую, третью карту. Предположим, что она помечена буквой Z и помещаем ее после P-карты. Однако если соответствующая карта помечена бук- вой J, то такую карту помещаем перед P-картой и после D-карты. Следующая карта, помеченная буквой Е, будет поло- жена по этому методу между D- и J-картами. Можно называть базой данных набор карт, который исполь- зуется в отделе снабжения; данные по компонентам и материа- лам указаны на отдельных картах, расположенных в алфавит- ном порядке списка поставщиков. При вызове данных из соответствующей базы могут возни- кать существенно различные ситуации. В только что упомяну- том примере набора карт отдела снабжения могут понадобить- ся сведения об определенных материалах, имеющихся у разных поставщиков. В файле дебиторов, расположенных также по ал- фавиту, часто бывает необходимо произвести сортировку по- ставленных товаров для того, чтобы можно было планировать производство. Например, в базе данных ИС может потребоваться выбрать только те типы ТТЛ-схем, которые обеспечивают на выходе ток больше 24 мА. Программа, генерирующая требуемые листки технических параметров (сообщения) в требуемой форме (структуре), к ко- торым в процессе обработки данных можно обращаться произ- вольным образом, называется системой управления базами дан- ных (СУБД). Создание баз данных (занесение данных в архив) и другие операции в области обработки данных требуют исполь- зования специальной терминологии. В этой связи можно указать такие термины, как «элемент данных» (Data-item), «запись» (Record) и «набор» (Set). Дополнительные термины, которые будут далее довольно широко использоваться, это «главная за- пись— владелец» (Owner) и «детальная запись — член» (Mem- ber). Специальные термины утверждаются Ассоциацией по язы- кам систем данных (CODASYL). Элемент данных — это единица данных, например имя, номер типа или цена. Запись (блок) содержит набор элементов дан- ных. Внутри записи элементы данных связаны между собой.
Системный анализ 23 Имя, адрес, номер ответа на запрос, оформленные в виде от- дельной группы, являются записью. Записи можно разделить на несколько типов. Запись одного типа, например для конденсатора, которая содержит такие дан- ные, как стоимость, размеры, рабочее напряжение и т. д., мож- но встретить в одной базе данных в нескольких файлах. В этом случае говорят о большом числе появлений записи. Точно так же как элементы данных можно сгруппировать в записи, так и записи можно собрать в наборы. Внутри набора записи также связаны между собой. Обычно если в одном наборе запись встречается только один раз, ее называют главной записью, а если несколько раз, то де- тальной записью. Между главной и детальной записями сущест- вует определенная связь. Возможны наборы данных типа «один с многими», а также «многие с многими». На практике имеет место одна запись типа поставщик и несколько записей типа компонент, причем данные по поставщикам и компонентам бу- дут связаны друг с другом. Часто используется термин «контрольное значение (величи- на)» (Test Value), под которым мы понимаем определенный эле- мент данных, разыскиваемый в данном файле. Термин «ключ» (Key) уже встречался выше и обозначал ту часть записи, рядом с которой находится контрольная величина. Мы будем также часто использовать термин «указатель» (Pointer) — переменную, величина которой является адресом участка ЗУ, где нужно искать требуемые данные. Кроме того, следует еще назвать термин «массив» (Array), т. е. список или таблицу, который содержит данные и в котором каждый элемент данных можно отыскать по одному или двум индексам. Наконец, специальный термин «дихотомический поиск» (Binary Search) определяет метод поиска в таблице данных по принципу последовательных приближений. Этот принцип уже обсуждался выше. В процессе дихотомического поиска контрольная величина сначала сравнивается с ключевой величиной, находящейся в се- редине списка. Если контрольная величина лежит выше, то поиск продолжается с середины верхней половины списка, что будет соответствовать 3/4 всего списка. Предположим теперь, что сле- дует перейти в нижнюю половину списка. Тогда осуществляется проверка 5/в всего списка. Продолжая поиск, мы либо прибли- зимся к требуемой величине насколько это вообще возможно, либо найдем ее точно. Чтобы предотвратить доступ к базе данных посторонних лиц, ПУБД использует ряд совершенно уникальных проверок (те- стов). При этом одним пользователям разрешается читать и за- писывать данные в базу данных, другие могут только читать, но
24 Глава 1 ни один пользователь не получает полной информации о всех данных. Конфиденциальная информация, например данные о зарплате, доступна только ограниченному числу лиц. Для полу- чения доступа к определенной информации, хранящейся в базе данных, необходимо получить «разрешение» от ПУБД. Если данный пользователь не находится в списке лиц, имеющих соот- ветствующее разрешение, то он никогда не получит доступа к ин- тересующим его данным. Если же данное лицо зарегистрирова- но в качестве пользователя, то от него требуется дополнительно так называемый пароль, чтобы проконтролировать, является ли пользователь, который сообщает свое имя ЭВМ, действительно тем лицом, за кого он себя выдает. Важным аспектом процесса связи с базой данных является также предотвращение конфлик- тов, которые могут возникать, если в момент опроса данных в базе данных соответствующий файл корректируется (соглаше- ние о доступе). Например, возможна ситуация, когда одно или несколько лиц (первая группа) запрашивают, используя терминалы, запи- санные в базе данных цены на товары в тот момент, когда эти цены корректируются другими пользователями (вторая группа). В таком случае доступ получит либо первая, либо вторая груп- па, но не обе одновременно. Процедуры, которые требуются для обеспечения этого режима доступа, реализованы в системе уп- равления базой данных. Блокировка доступа к базе данных объ- является оператором ЭВМ через экран дисплея при помощи со- общения, которое адресуется тем пользователям, которые про- сят доступа. В настоящее время наблюдается тенденция реализации си- стемы управления базами данных в виде автономной ЭВМ (на аппаратурном уровне), которая соединена с главной ЭВМ и массовым ЗУ, содержащим базу данных. Рассмотрение систем баз данных в более детальной форме выходит далеко за пределы настоящего справочника. Подроб- нее системы описаны в книге «Искусство программирования» Д. Кнута из Станфордского университета, выпущенной изда- тельством Addison Wesley (США) в 1973 г.1) В 1977 г. издатель- ство Prentice-Hall издало книгу Дж. Мартина «Организация баз данных в вычислительных системах», в которой рассматривает- ся большое число применений систем баз данных, представляю- щих интерес и для менее подготовленных читателей* 2). Наконец, о D. Е. Knuth, The Art of Computer programming. [Имеется перевод: Кнут Д. Е., Искусство программирования, т. 1—3. — М.: Мир, 1976, 1977.] 2) J. Martin, Computer Data Base Organization. [Имеется перевод: Мар- тин Дж., Организация баз данных в вычислительных системах. — М.: Мир, 1980.]
Системный анализ 25 можно еще назвать книгу «Системы управления базами дан- ных» Д. Цикритзиса и Ф. Лоховского, которая выпущена издательством Academic Press (США)3\ 1.3. Функциональные схемы Для наглядного представления систем, состоящих из раз- личных элементов, используются блок-схемы. В блок-схемах отображаются потоки информации, направленные от входов к одному или нескольким выходам. Входы на этих схемах при- нято размещать слева, выходы — справа, а потоки информации перемещаются слева направо. При вертикальном расположении отдельных элементов входы располагаются сверху, а выходы — внизу. На рис. 1.1 приведена блок-схема радиоприемника. При- Рис. 1.1. Блок-схема радиоприемника. емник регистрирует радиосигналы с помощью антенны, усили- вает и демодулирует несущую радиоволну, промодулированную звуковым сигналом. Затем выделенный НЧ-сигнал снова усили- вается, переходит на более высокий энергетический уровень и воспроизводится громкоговорителем. Из приведенной блок- схемы сразу видно, что это именно радиоприемник. Как реали- зуются отдельные операции, с помощью каких компонентов и как эти компоненты связаны между собой — всю эту информацию можно получить из принципиальной электрической схемы дан- ного устройства. Блок-схема какой-либо функции в рамках комбинационной логики строится таким же образом. В блок-схеме необходимо указывать цепи отрицательной об- ратной связи, которые представляют собой связи выходов с вхо- дами через элементы отрицательной обратной связи. Отрица- тельная обратная связь является автономной функцией, которая обычно вводится в блок-схему с помощью отдельного функцио- нального блока. Как уже было показано в предыдущих томах данного спра- вочника, цепи отрицательной обратной связи применяются в си- стемах управления различными процессами, а также для стаби- 3> D. Tsichritzis, F. Lochovsky, Data Base Management Systems, 1977.
26 Глава 1 Символы начала и конца Простая операция Подпрограмма Символ решения с ветвлением Ветвление Связь с элементом, расположенным на той же странице Связь с диаграммой, расположенной на другой странице Символы ввода и вывода Символ ручного обслуживания Направление потока информации (сверху вниз и слева направо) Направление потока информации (снизу вверх и справа налево) Узловая точка с меткой SIGNAL Рис. 1.2. Символика, используемая в структурных схемах. лизации амплитуды, частоты и фазы в радио- и ТВ-приемниках. Примером цифровой схемы с отрицательной обратной связью является двоичный счетчик, который автоматически переходит в определенное счетное состояние. Здесь отрицательная обрат- ная связь активизируется только тогда, когда достигнуто опре-
Системный анализ 27 деленное счетное состояние. Соответствующие цепи могут обес- печивать и положительную обратную связь, как это происходит, например, в самовозбуждающихся генераторах. 1.4. Структурные схемы последовательных операций Как известно, некоторые специальные функции многократ- но используются при выполнении сложных операций. Такая ор- ганизация соответствует последовательному порядку выполнения отдельных этапов сложных операций. Указанный порядок явля- ется общепринятым в ЭВМ, где с помощью команд и макроко- манд сложные функции реализуются по методу многократно повторяющегося выполнения команд из соответствующего набо- ра команд ЭВМ. Для представления сложной функции функциональная схе- ма оказывается малопригодной, так как в ней отсутствует сим- волика, позволяющая отражать многократное использование определенных специальных функций. В таких случаях широко применяются так называемые структурные схемы, в которых вместо универсальных блоков используется специальная симво- лика. По аналогии с функциональными схемами в структурных схемах поток данных направлен сверху вниз и слева направо. Если же поток данных направлен снизу вверх или справа нале- во, то соответствующее направление указывается стрелками. На рис. 1.2 показаны специальные символы, которые исполь- зуются в структурных схемах. С помощью этих символов пред- ставляются как элементарные, так и сложные функции. Напри- мер, прямоугольником представляется не только такая сложная функция, как у = ех, но и такая простая функция, как z = yДх (z = y и х). Математическое выражение заданной функции обыч- но записывается внутри прямоугольника. В структурных схемах могут появляться и ветвления. По ка- кой именно ветви будет продолжено выполнение программы, за- висит от принятого решения. Это обстоятельство указывается с помощью условного символа, а само условие записывается в явной форме внутри рамки. Применение структурных схем можно проиллюстрировать с помощью ряда элементарных логических функций. На рис. 1.3 приведены две структурные схемы для представления функ- ции И. На рис. 1.3, а с помощью условного символа (ромба) проводится проверка «истинности» каждой переменной. Если все три переменные истинны, т. е. равны 1, то окончательное ре- шение будет выглядеть как А-В-С=1 (истина). Если же одна из переменных оказывается ложной, т. е. равна 0, то стрелка из точки Нет показывает, что программа должна вернуться к нача-
28 Глава 1 лу, а это означает, что для решения А-В-С=1 (истина) требу- ется, чтобы данная переменная была также равна 1 (истина). На рис. 1.3, б логическая функция представлена другим спо- собом. Если одна (или несколько) переменная окажется здесь ложной (ответ Нет), то это приведет к А+В + С = 0. Если А=1, В=1 и С=1 (ответ Да), то А-В-С=1 (истина) и А+В + С = 0 (ложь). Оба решения согласуются с таблицей истинности для функции И. АВС А-В-С (а) (б) Рис. 1.3. Функция И, представленная в структурных схемах, а —для функции А-В-С = 1; б — для функций А-ВС = 1 и А+В+С=0. Из анализа этих структурных схем можно сделать несколько интересных выводов. Во-первых, мы видим, что при описании функции И символы располагаются в последовательном поряд- ке, а при описании функции ИЛИ возникает параллельная структура (ветвление). В структурной схеме, показанной на рис. 1.3, а, после полу- чения отрицательного ответа (Нет) стрелка соединительной ли- нии указывает в начало, что следует понимать как режим ожи- дания. В структурной схеме предусмотрено ожидание того мо- мента, когда данная переменная, а также обе другие перемен- ные станут равными 1, после чего получим А-В-С = 1 (истина). Ждать до тех пор, пока все переменные не станут истинны- ми,— это наименее эффективный режим получения решения. Как показано на рис. 1.4, в режиме ожидания иногда можно принять другое решение, позволяющее быстрее достигнуть ко- нечного результата. В данном случае задается вопрос о равенст- ве А = В, и если А<В, то А увеличивается на 1, а если А>В, то А уменьшается на 1.
Системный анализ 29 Из рис. 1.3,6 видно, что если на вопрос (А=1) получен от- вет Нет, то имеет место «истин- ная» параллельная структура А+В4~С = 0. Очевидно, что при этом ответы на вопросы (В = 1) и (С=1) будут также отрицатель- ными. В структурных схемах часто подразумевается исключение оп- ределенных специальных опера- ций, если их выполнение зави- Рис. 1.4. Решение на участке сит от какого-либо условия (рис. ожидания. 1.5) . На рис. 1.6 приведены еще три примера ветвлений (функций ИЛИ), которые часто встречаются в структурных схемах. Определенная ветвь выбира- ется в том случае, когда соотношение, приведенное в виде усло- вия, получает утвердительный ответ (Да). Например, на рис. 1.6, в ветвление приводит к определенной подпрограмме, ко- торая содержит специализированную процедуру обработки со- ответствующей переменной. Ветвления в программе вычислений для ЭВМ выполняются по командам перехода. Известны как условные, так и безуслов- ные переходы. Если ветвление в структурной схеме происходит на основе какого-либо решения, то мы говорим об условном переходе. Адрес, по которому необходимо совершить переход, указывается в адресной части команды перехода. Можно выпол- нить переход, пропустив некоторые части программы, или же вернуться к началу и повторить снова уже выполненные части программы. Для обес- печения более детальной обработки пере- менных возможен также вариант организа- ции вычислений, состоящий в переходе из основной программы в соответствующую подпрограмму. Такой переход может быть как условным, так и безусловным. На рис. 1.7 приведена структурная схе- ма счетчика со сквозным переносом. Мы видим, что на первом шаге задается вопрос: осуществляет ли синхроимпульс переход с высокого уровня на низкий (Н->Ь)? Если ответом будет Да, то содержимое счетчика получит приращение, равное 1. После этого задается вопрос, не достигнуто ли значение Птах+1, И если ответ будет утвердитель- ным, то произойдет установка в нуль. Если Рис. 1.5. Исключе- ние операций.
30 Глава 1 же ответ окажется отрицательным, то содержимое счетчика снова получит приращение, равное 1. На рис. 1.8 представлена структурная схема двоичного счет- чика с предварительным просмотром переноса. Когда содержи- мое счетчика достигает nmax, задним фронтом синхросигнала осу- Рис. 1.6. Ветвления (элементы ИЛИ). Рис, 1.7. Структур- ная схема несин- хронизированного счетчика (счетчик со сквозным пере- носом), ществляется предварительный просмотр пере- носа. Затем после перехода L->H счетчик сбрасывается (п = 0). В заключение приведем пример функции сравнения, показанной на рис. 1.9. Мы видим, что в этой структурной схеме используются как последовательная, так и параллельная структура. Это связано с тем, что при реализа- ции функции сравнения выясняется истин- ность логических выражений А=1 и В=1 или А = 0 и В = 0, т. е. здесь имеет место комбина- ция И- и ИЛИ-элементов. При анализе структурных схем часто ис- пользуется понятие алгоритма. Это понятие можно проиллюстрировать с помощью ряда примеров. Требуется вычислить: F(x) = f 2xdx =
Системный анализ 31 = [x2]nm = ni2—п2. Данный интеграл можно вычислить аналитически. Од- нако значение этого же интеграла можно получить и иначе, вычисляя подынтегральную функцию для всех значений, которые может при- нимать х, после чего найденные ве- личины нужно просуммировать. Второй метод является числен- ным и позволяет получить прибли- женное решение. Последователь- ность действий при реализации та- кого метода, имеющая повторяю- щийся (итерационный) характер, называется алгоритмом. Для данно- го примера алгоритм будет выгля- деть следующим образом: 1. х = п 2. s = 0 3. dx=(m—п)/100 4. y = 2xdx 5. s*^-s+y 6. x*^-x + dx 7. x*<m, переход в п. 4 8. Конец. Присваиваем сумме s значение О и затем вычисляем y = 2xdx для не- которого значения х. К текущему значению суммы s добавляем у и по- лучаем новое значение суммы s*. После этого увеличиваем х на dx и проверяем в п. 7, не является ли х*<ш. Получив утвердительный от- вет, снова вычисляем у и новое зна- чение суммы s*. Далее циклы про- граммы повторяются до тех пор, пока не будет получено значение х>ш, после чего суммирование пре- кращается. При этом s*-b-s + y оз- начает: заменить s* на s + y. Следующий пример, иллюстри- рующий понятие алгоритма, связан с вычислением степени е по методу т Рис, 1.8. Структурная схема двоичного счет- чика с предварительным просмотром переноса. Рис. 1.9. Функция сравнения. разложения в ряд. Преимуществом этого метода является то, что каждый член ряда вычисляется посредством повторения опреде-
32 Глава 1 ленных операций, а сумма полученных членов ряда дает очень хорошее приближение для искомого значения функции: v . X2 . X3 . X4 хП е-.1 + 1+т + я+й7+...+ттг7 + „. . Нетрудно видеть, что можно получить член Ь*, следующий за членом Ь, путем присваивания , а промежуточную сумму как s*^-s + b*. Для данного ряда можно составить следующий алгоритм: 1. пусть п = 1 2. пусть b= 1 3. пусть s = 1 4. вычислить 5. вычислить s*^-s + b* 6. вычислить п*^-п+ 1 7. вернуться в п. 4, если р= |b |—8>0. Здесь р устанавливает предел на число членов, которые участвуют в вычислении. Структурная схема этого алгоритма приведена на рис. 1.10. В ЭВМ алгоритм используется не только для проведения конкретных численных расчетов. Под этим термином часто под- (Начало л=1Ь=1 s=1 | Рис. 1.10. Алгоритм вычисления ех. разумевают и порядок выполнения опера- ций в программах, который не имеет ника- кого отношения к численным расчетам. 1.5. Построение структурной схемы При составлении алгоритма не важно, как будет реализована определенная функ- ция. Сначала следует расположить в опре- деленной последовательности различные операции и выяснить, не используется ли определенная функция в данном алгоритме многократно. Только после этого нужно про- вести анализ специальных функций, кото- рые в общем случае состоят из более эле- ментарных функций. Анализ специальных функций продолжается до уровня сложных функций комбинационной логики. Если
Системный анализ 33 требуемые функции не будут найдены, то анализ продолжается до уровня базовых логических функций И, ИЛИ и НЕ. В случае системного анализа при переходе к обработке данных на ЭВМ происходит то же самое, только здесь после нескольких этапов анализа мы получаем сложные программы или подпрограммы, а затем переходим на уровень элементарных команд микроЭВМ. Системный анализ является не единственным видом деятель- ности, связанной с автоматизацией. Если кому-либо поручено изготовить определенное изделие, то сначала следует разобрать- ся, какие специальные операции необходимо выполнить и в ка- ком именно порядке. После этого нужно выяснить, какие ма- шины (сложные функции) требуются для выполнения отдельных операций. Во многих случаях в процессе производства требуют- ся такие простые инструменты (элементарные функции), как молоток или пила. Системный анализ, в ходе которого выполня- ются различные этапы, имеет пирамидальную структуру. На разных этапах требуется анализировать различные специальные функции, т. е. консультироваться со специалистами по реализа- ции этих функций. Так, например, бывает необходимо прокон- сультироваться с токарем по вопросу изготовления какой-либо детали. Те, кто занимается системным анализом, могут не знать возможностей токарного станка, поэтому для них консультация с соответствующим специалистом является абсолютно необхо- димой. В случае системного анализа, связанного с автоматизацией, необходимы комбинированные исследования, потому что проек- ты автоматизации часто выполняются группой исполнителей. На практике эти группы создаются так называемыми проектны- ми бюро, которые занимаются либо обработкой информации административно-управленческого характера, либо управлени- ем производственными процессами с помощью автоматов и ЭВМ. Для решения задач управления процессами формируются груп- пы из специалистов в области физики, химии, механики и вы- числительной техники. 1.6. Структурные схемы, применяемые на практике Подобно тому как схемотехник разрабатывает электронные схемы, системотехник стремится получить определенное реше- ние. При разработке структурной схемы первым приближением является блок, в котором описывается проект автоматизации (вершина пирамиды). Этот этап мы обычно пропускаем, так как достаточно хорошо его представляем. Обычно мы начинаем с того этапа, который требует анализа, обсуждения и изобрета- тельности. Для иллюстрации этих положений следует расе мот-
34 Глава 1 реть определенную задачу, анализируя ее таким образом, чтобы в конце концов можно было прийти к законченной структурной схеме. Чтобы увидеть различие между функциональной и струк- турной схемами, будем исходить из практического примера и его функциональной схемы. На рис. 1.11 приведена блок-схема частотомера. В процессе измерения частоты генератор, стабилизированный кварцем, и двоичный счетчик обеспечивают временной интервал в 1 с, в пределах которого счетчик частоты получает разрешение на отсчет нескольких периодов входного сигнала. Счетчик частоты связан с 7-сегментным индикатором, который считывает его по- следнее состояние. Рис. 1.11. Блок-схема частотомера. Операции измерения частоты и высвечивания данных на ин- дикаторе происходят в последовательно-повторяющемся режи- ме, т. е. после каждого измерения частоты следует интервал ра- боты индикатора длительностью в 10 с, после которого снова происходит измерение частоты в течение 1 с, а затем снова сле- дует период работы индикатора и т. д. Частотомер состоит из схемы управления, генераторов временных интервалов и счетчи- ка частоты с индикатором. Хотя эти основные части схемы и взаимосвязаны, каждая из них имеет собственную структурную схему, которая существен- но отличается от функциональной схемы, где все функции свя- заны друг с другом. Это вызвано тем, что структурная схема яв- ляется по существу сокращенным вариантом электрической принципиальной схемы. Структурная схема отражает все ситуации, в которых прояв- ляются обратные связи, т. е. ситуации, когда многократно повто- ряется определенная операция. В структурной схеме считыва-
Системный анализ 35 Рис. 1.12. Стру- ктурная схема управления. ликой. ние, запоминание и установка в нуль триггера рассматриваются как три разные последователь- ные специальные операции и представляются тремя разными символами, связанными друг с другом прямо или косвенно. Порт И имеет единственную связь со следую- щей операцией. Здесь мы встречаемся со спосо- бом схематического представления сложной функции, который полностью отличается от спо- соба, принятого в функциональных схемах. По- этому многие структурные схемы являются слож- ными комбинациями функциональной схемы со структурной схемой, особенно когда такую схе- му рисуют схемотехники. При разработке структурной схемы рекомен- дуется, не прибегая к какой-либо символике, со- ставить список последовательных операций с большими промежутками между ними, что поз- воляет вставлять те операции, которые первона- чально были пропущены. Для стороннего наблюдателя структурная схема в первом приближении выглядит как бес- смысленный и плохо составленный документ. В конце работы по построению такой схемы, ког- да заканчивается анализ различных специальных операций, мы переходим к окончательному варианту с понятной всем симво- На рис. 1.12—1.17 приведены шесть специальных структур- ных схем, применяемых для описания работы частотомера. Эти Рис. 1.13. Реализация интервала в 1 с. Рис. 1.14. Реализация интервала в 10 с.
36 Глава 1 Рис. 1.15. Структур- ная схема синхрони- зированного декад- ного счетчика с пред- варительным прос- мотром переноса. структурные схемы представляют алгорит- мы управления, формирования интервала в 1 с, формирования интервала в 10 с для индикации, счета и сканирования. Из структурной схемы, приведенной на рис. 1.12, видно, что если интервал индика- ции в 10 с еще не сформировался (Q10c = = 1: «ложно») и на вход счетчика поступи- ло разрешение (Qic=l: «истинно»), то счетчик будет считать сигналы с частотой fBx до тех пор, пока не закончится интервал длиной в 1 с. После этого начинается ин- тервал длиной в Юс, в котором дается раз- решение на считывание информации. В структурной схеме формирования «из- мерительного окна» (рис. 1.13) двоичный счетчик делит поступающие на его вход сиг- налы с частотой f0, которые обеспечивает кварцевый генератор, и формирует интер- валы длительностью в 1 с. Qic инициирует- ся задним фронтом Qioc,- и затем начинает- ся отсчет сигналов с частотой f0. По исте- чении интервала времени в 1 с Qic перехо- дит в исходное состояние. Измерительное окно представлено в управляющей схеме в виде переменной Qic. Интервал длиной в 10' с формируется ждущим мультивибратором., который, как следует из схемы, показанной на рис. 1.14, генерирует асимметричный сигнал. Qioc также является переменной, которая ис- пользуется в схеме управления. Для счетчиков приведена только схема, относящаяся к предварительной ступени деления частоты (рис. 1.15). Здесь рас- смотрен синхронизированный счетчик с предварительным просмотром переноса. Задним фронтом синхросигнала Т подготавливается приращение содержимого счетчика на 1, которое реализуется передним фрон- том этого синхросигнала. Затем следует проверка, достигнута ли величина птах (состояние счетчика 9), и если она достигнута, то задним фронтом синхросигнала предсказанный перенос пере- дается на выход для управления следующей ступенью деления. Наконец, передним фронтом синхросигнала осуществляется ус- тановка счетчика в состояние 0, после чего отсчет импульсов начинается снова.
Системный анализ 37 Рис. 1.16. Структурная схема, иллюстрирующая работу индикаторов на све- тодиодах. f=1000 Гц Рис. 1.17. Реализация временных сигналов ТО ... ТЗ для «сканирования» индикаторов на светодиодах и делители счетчика частоты. Рис. 1.12 иллюстрирует каскадное включение декадных счет- чиков, а рис. 1.13 — функцию счета входной частоты и f0. На рис. 1.16 приведена структурная схема, которая иллюст- рирует работу индикаторов. Здесь используется принцип ска- нирования, который заключается в том, что выходы четырех де- кадных счетчиков связаны с дешифратором, который преобра- зует двоичную информацию в 7-сегментный код. После дешиф- рации информация поступает на один из четырех индикаторов, выполненных на светодиодах, которые осуществляют вывод из-
38 Глава 1 Рис. 1.18. Структурная схема процесса «перевозки материа- лов». меренных данных. Последователь- ное сканирование отдельных сту- пеней деления управляется с по- мощью временных сигналов Т0...Тз. То же самое происходит и при рас- пределении преобразованных дан- ных на входы четырех имеющихся в наличии индикаторов на светодио- дах. Мы видим, что верхняя функ- ция (рис. 1.16) реализуется дешиф- ратором, а нижняя функция — рас- пределительной схемой (демульти- плексором). Наконец, на рис. 1.17 показано, как вырабатываются временные сиг- налы То... Т3. Временные сигналы обеспечивает один из делителей, формирующих интервал в 1с для измерительного окна. В качестве счетчика для сканирования выбран делитель, который производит от- счеты через каждые 1 мс. Здесь производится опрос содержимого двух младших битов этого счетчи- ка, в результате чего формируются временные сигналы То... Т3. На рис. 1.18 приведен аналог из производственной практики. Здесь рассматривается задача перевозки земли в тачке из пункта А в пункт В. Работа начинается в пунк- те А с заполнения тачки землей с помощью лопаты. В этом случае можно отметить цикл, который со- ответствует многократному исполь- зованию лопаты для наполнения гачки землей. После каждого на- полнения тачка перевозится в пункт В, причем момент прибытия в этот пункт устанавливается посредством многократного опроса. После получения утверди- тельного ответа (Да) тачка опрокидывается и затем перевозит- ся обратно в пункт А, после чего она снова наполняется землей. Этот процесс повторяется до тех пор, пока не будет перевезена вся земля. Вместо тачки и лопаты можно воспользоваться бо- лее сложным устройством, например бульдозером, который пе- реместит всю землю из пункта А в пункт В за один прием.
Системный анализ 39 В случае частотомера вместо дискретной схемы можно также' использовать единое устройство, реализующее сложную функ- цию, на одном кристалле. 1.7. Средства, применяемые при обработке данных Из изложенного выше видно, что для выполнения сложных операций требуется большое количество функциональных эле- ментов. При строительстве дома применяются бульдозеры, экс- каваторы и бетономешалки. С другой стороны, требуются и бо- лее простые средства в виде молотка, лопатки и других инстру- ментов, позволяющие выполнять специальные операции, кото- рые не могут быть реализованы с помощью более сложных уст- ройств (функций). Нечто подобное происходит и при обработке данных. В ком- бинационной логике можно применять с высокой эффективностью сложные функции, однако для решения специальных частных задач требуются и более простые функции. В частности, при об- работке данных на ЭВМ мы располагаем готовыми программа- ми в виде подпрограмм для решения административно-управ- ленческих задач и задач управления различными процессами. Однако в нашем распоряжении имеются и более простые сред- ства, такие, как элементарные функции, которые необходимы для адекватного программирования в ходе решения специаль- ных прикладных задач. В начале разработки ЭВМ в 50-х годах системы обработки данных имели довольно простую структуру. Для общения с си- стемой применялся машинный язык, т. е. достаточно простой язык, в котором детально программировались даже специаль- ные функции. В настоящее время используются языки более высокого уровня, которые существенно упрощают процесс про- граммирования. По командам, записанным на этих языках, ЭВМ находит те специальные функции, из которых состоит каждая макрокоманда, и затем реализует их в надлежащем порядке следования. То же самое наблюдается, например, и при обуче- нии ученика столяра. В начале обучения любой новичок с тру- дом отличает молоток от клещей, но его можно в принципе обучить методам работы с этими инструментами, используя на- глядную демонстрацию. На самом же деле такой метод обуче- ния обычно не применяется. С учеником говорят на «обычном» языке высокого уровня и дают определенные указания, не пояс- няя в деталях, как выполняется та или иная операция. Однако и здесь может сложиться так, что ученик получит определенные детальные команды, для выполнения которых по- требуется использовать и молоток, и клещи. То же самое может произойти и в случае языков программирования высокого уров-
40 Глава 1 ня, применяемых в ЭВМ. Для выполнения определенных опера- ций на ЭВМ также могут понадобиться простые команды. ЭВМ работает с нулями и единицами, поэтому она понимает только те команды, которые выражены в двоичном коде. Каж- дая команда ЭВМ состоит из одного или нескольких слов дли- ной 8—32 бит; кодирование такой команды требует больших за- трат времени. В общем случае биты кода команды разбиваются на группы по 3 или 4 бит, которые используются для записи восьмеричных или шестнадцатеричных чисел соответственно. Обе системы счи- сления применяются при адресации ЗУ, а также входных и вы- ходных портов. Простая техника программирования широко применяется в тех случаях, когда с помощью отдельных битов требуется уп- равлять какими-либо входными или выходными портами или же когда нужно принимать биты данных. В последнем случае мы имеем в виду считывание величин, поступающих из измери- тельной аппаратуры. Для более подробной иллюстрации различия между языка- ми высокого уровня и машинным языком можно снова обратить- ся к аналогу из сферы организационно-производственных отно- шений. Пусть, например, дается команда доставить некоторый товар в магазин X. Того, кто дает эту команду, не интересует, как будут обращаться с товаром грузчики и по какому маршру- ту его доставят в магазин. В данном случае отдается макроко- манда, которая только указывает, куда и в каком количестве необходимо отправить товар. Затем эту макрокоманду требует- ся разделить на несколько команд, которые известны тому, кто будет выполнять данную макрокоманду. В процессе выполнения макрокоманды могут возникнуть и со- вершенно новые операции опроса. В данном случае такая «не- ожиданная» операция вызывается переменной «красный свет светофора». Соответствующую программу можно рассматривать как автономную (под)программу. Прежде чем ЭВМ начнет исполнять заданную программу на языке высокого уровня, эту программу обычно требуется перевести на язык простых команд, с которым знакома ЭВМ. Указанный перевод осуществляет сама система, а процесс пере- вода называется компиляцией (трансляцией). К известным языкам программирования высокого уровня относятся, напри- мер, Ада, Алгол, Фортран, Бейсик и Паскаль. Люди в обществе также говорят на разных языках, таких, как административно-управленческий язык, нотариальный язык и т. д. Команда, отданная, например, руководством предприя- тия, приводит к совершенно другим последствиям, чем команда, отданная на более низком уровне. Одно решение на уровне ди-
Системный анализ 41 рекции может привести в действие все предприятие, тогда как команда на более низком уровне воздействует лишь на группу лиц, работающих в каком-либо отделе. Конечно, ошибочное решение, принятое на низком уровне, может повлиять и на деятельность предприятия в целом: напри- мер если из-за этого решения задержится доставка какой-либо детали, в результате остановится работа на предприятии в це- лом. То же самое происходит и в ЭВМ, где пропуск одного бита может существенно нарушить ход выполнения всей программы в целом. Мы выражаем «команды» с помощью алфавитно-цифровых символов, объединенных в самых разнообразных комбинациях. ЭВМ делает то же самое, используя только два символа 0 и 1. Для тех, кто впервые знакомится с ЭВМ, первоначально оста- ется загадкой, как можно программировать сложные задачи, используя всего лишь два символа. В предыдущих томах подробно было объяснено, что такое кодирование информации вполне осуществимо. Для этой цели применяются объединения двоичных цифр в определенные груп- пы. Для кодирования всех алфавитно-цифровых знаков доста- точно иметь 64 различные комбинации. Эти 64 кодовые комби- нации можно выразить словами длиной по 6 бит каждое. Каж- дая кодовая группа определяется позицией, которую она зани- мает в битовом поле. В случае команды ЭВМ первый байт обычно содержит спе- цификацию команды, а второй и третий байты содержат, напри- мер, адрес ячейки ЗУ, входного или выходного портов. 1.8. Пользовательский интерфейс — операционная система Плотник имеет в своем распоряжении набор инструментов, позволяющих ему выполнить работу наиболее эффективным об- разом. Эти инструменты (интерфейсы) могут представлять со- бой простые орудия труда, такие, как молоток, клещи или пила, а могут быть более сложными — в виде электропилы, электро- дрели или строгального станка. Известно, что без применения инструментов плотник свою работу не выполнит. «Инструменты» в форме программного обеспечения приме- няются и в системах обработки данных, где они определяются термином «операционная система» (ОС). В действительности ОС является настоящим ящиком с «инструментами», в котором можно найти все «орудия труда», необходимые для обработки данных. В состав ОС входят как простые, так и сложные средства;
42 Глава 1 она использует множество программ, которые упрощают как процедуру доступа к ЭВМ, так и сам процесс обработки данных. Кроме того, ОС управляет потоками информации и связью с пе- риферийными устройствами, такими, как дисковые ЗУ, принте- ры, магнитофоны и терминалы. Современные ОС более высоко- го уровня предоставляют в распоряжение пользователя такие средства из сферы программного обеспечения, как программа редактирования текстов (редактор), различные трансляторы, ас- семблер и набор команд для обработки файлов данных, таких, как сортировка определенных записей (SORT), уничтожение файлов данных (DELETE), присваивание файлу другого имени (RENAME), а также набор исполнительных команд типа команды RUN, которая приказывает ЭВМ выполнить данную программу. Программа-редактор осуществляет ввод и коррекцию дан- ных как в текстовой, так и в табличной форме. При использовании сложной системы обработки данных поль- зователь получает доступ к системе через так называемые тер- миналы. Эти устройства обеспечивают общение пользователя с входной и выходной аппаратурой посредством алфавитно-циф- ровых символов. Ввод данных с терминала производится с помощью соответ- ствующих клавиш, а вывод данных осуществляется через дис- плей, т. е. устройство, снабженное кинескопом, на экране кото- рого высвечиваются строки из алфавитно-цифровых символов. Терминалы обычно связываются с ОС через интерфейс, напри- мер типа RS232C или V24, и устанавливаются на рабочем ме- сте— в комнате или в зале, откуда пользователь (например, разработчик, заказчик, плановик, служащий магазина или ка- кое-либо другое административное лицо) может получить доступ к ЭВМ. На предприятии, использующем машинную обработку дан- ных, везде устанавливаются пользовательские терминалы, свя- занные с центральной ЭВМ, которая находится в специальном помещении, оборудованном всеми средствами для надежной эксплуатации системы обработки данных. Машинный зал ЭВМ обычно снабжается кондиционированным воздухом и строится с учетом специальных мер противопожарной безопасности. При эксплуатации терминалов одними из самых распростра- ненных операций являются ввод и редактирование текста. В ЗУ системы обработки данных, в частности в ЗУ на магнит- ных дисках, ОС подготавливает специальные области для хра- нения файлов с данными и программами. При вводе файла в ЗУ пользователь присваивает ему имя и тип. Эти признаки регист- рируются затем в личном каталоге соответствующего пользова- теля, который представляет собой по существу каталог файлов.
Системный анализ 43 Используя имя и тип, требуемый файл можно вызвать из ЗУ для последующей обработки в ЭВМ. Данные, такие, например, как тексты программ, написанные на языке высокого уровня, а также другие тексты, таблицы и данные обычно вводятся в ЭВМ с клавиатуры построчно. Если во время ввода обнаруживаются так называемые ошибки программирования, то соответствующий фрагмент текста с ошиб- кой удаляется с помощью «стирающей» клавиши. Клавиатура терминала аналогична клавиатуре обычной пи- шущей машинки. Для реализации специальных команд имеется отдельный блок управляющих клавиш, который обычно распо- лагается справа от основных клавиш (рис. 1.21). Специальные функции реализуются с помощью команд, ко- торые, например, в режиме редактирования обеспечивают до- ступ к ранее введенным данным. Редактор позволяет заменять, вводить или убирать символы, слова и целые строки ранее вве- денного текста. Кроме того, редактор обеспечивает возможность перемещать в тексте слова и строки, а также отыскивать спе- циально выделенные фрагменты текста. Важным элементом при выполнении этих операций является так называемый курсор, т. е. подвижная светящаяся метка на экране дисплея, которая производит индикацию символа и мо- жет перемещаться с помощью четырех специальных клавиш со стрелками налево, направо, вверх и вниз по поверхности экра- на. При вводе текста с помощью клавиш курсор передвигается так, что оказывается каждый раз в позиции следующего вводи- мого символа. Он виден на экране дисплея в виде квадратика, который высвечивает место соответствующего символа; сам же символ появляется как черное изображение в светлом поле кур- сора. На некоторых дисплеях для целей индикации используется мерцающая метка, которая помещается в виде светлой черточ- ки под соответствующим символом. Тексты и списки данных можно вводить с помощью клавиа- туры в любом требуемом формате; при этом те символы, кото- рые вводятся в ЗУ, обычно отображаются на экране (сообщение эхо-контроля). Программа, написанная на языке высокого уров- ня (Бейсик, Фортран, Паскаль) или на ассемблере, вводится построчно при помощи редактора, в результате чего получается полный текст программы с комментариями (листинг). Этот текст программы представляет собой исходный модуль, который после трансляции преобразуется в объектный модуль. Трансляция происходит после ввода с клавиатуры команды BASIC, или FORTRAN, или PASCAL, за которой следует имя файла; затем нажимается клавиша RETURN, т. е. например: BASIC, FILENAME [RETURN].
44 Глава 1 После трансляции по- является так называемый объектный модуль, к ко- торому необходимо доба- вить стандартные подпро- граммы из библиотеки программ или другие объ- ектные модули, чтобы сформировать оконча- тельный вариант про- граммы — загрузочный модуль. Необходимые для этой цели этапы обработки файлов выполняются по команде LINK. Эта ко- манда формирует одну общую программу, кото- рая затем по команде RUN загружается в ЭВМ и производит требуемую обработку данных. Программа, написан- ная на языке Фортран, которая вводится в ЗУ с помощью редактора, должна быть зарегистри- рована в справочнике с помощью имени файла, за которым следует обо- значение типа файла FOR (сокращение от FORtran). В результате Рис. 1.19. Структурная схема операций, которые необходимо осуществить при вы- полнении программы в ЭВМ. трансляции возникает второй файл с соответствующим именем, однако его тип изменя- ется теперь на OBJ. И наконец, после редактирования межпро- граммных связей тип файла изменяется на EXE (сокращение от слов EXEcutable image). Если после этого вводится команда RUN, за которой следует имя файла, то ОС «по умолчанию» автоматически вызовет файл типа EXE и передаст этот файл на исполнение в ЭВМ. Различные процедуры, которые предшествуют исполнению программы, указаны в структурной схеме, представленной на рис. 1.19. На рис. 1.20 показано, какие типы файлов использу- ются на различных этапах обработки — при компиляции (тран- сляции), редактировании связей и т. д.
Системный анализ 45 При проверке (тестировании) программы должна быть обес- печена возможность остановки программы на промежуточных этапах ее исполнения, чтобы затем можно было двигаться шаг за шагом к получению конечных результатов. При этом текст программы может быть изменен. После такой проверки можно* снова запустить программу на исполнение. Вспомогательная программа, которая используется в процессе проверки, называ- ется отладочной программой. Тил файла Имя файла Создание исходной программы (неприметна ФОРТРАНе) Диск Ввод и коррекция Компилирование исходной программы Вычисление FOR Диск Вычисление OBJ Диск Библиотека подпрограмм Перевод в машинный код Связи с объектным модулем Выполнение программы вычислений Связи со стандарт ными подпрограммами ил Вычисление EXE FOR- ФОРТРАН (исходный модуль) ОВйюбъектный модуль EXE- выполняемый модуль Выполнение программы Рис. 1.20. Обзор файлов, которые используются на подготовительных эта- пах выполнения программы в ЭВМ. Отладочная программа соединяется с основной (отлаживае- мой) программой во время работы редактора межпрограммных связей. С помощью команды LINK/DEBUG, за которой следует имя файла (отлаживаемой программы), отладочная программа автоматически присоединяется к основной программе и затем весь модуль пересылается на исполнение в ЭВМ по команде RUN. Если в процессе трансляции ОС устанавливает, что произо-
46 Глава 1 шло нарушение правил синтаксиса (т. е. правильного порядка записи команд и следования параметров в строке), то по окон- чании трансляции она сообщает об этом в списке синтаксиче- ских ошибок. После этого с помощью редактора производится коррекция ошибок и в программу вводятся дополнительные строки текста. Чтобы ввести исправления в соответствующую объектную программу, после изменения или дополнения обычно требуется выполнить полную трансляцию программы. Связь между программами и файлами данных (содержащи- ми обрабатываемые данные) осуществляется при помощи сим- волических имен. Здесь имеется в виду не абсолютная адреса- ция ЗУ, а физическая спецификация адреса. В случае, например, языка Бейсик, данные можно вызывать последовательно без подробного указания адреса с помощью следующих друг за другом параметров, т. е. цифр или строк символов (групп букв, цифр или слов). В других языках высо- кого уровня внутри файла (имени файла) допускается еще бо- лее подробная спецификация, например на уровне записей. ОС может быть разработана и для какого-либо специально- го применения. Так, например, ОС, созданная для испытаний процессоров, может иметь дополнительные средства про- граммного обеспечения, которые применяются только для реше- ния данной задачи. В случае автоматизированного проектирования используют- ся ОС, по типу совершенно отличные от тех, которые применя- ются в системах, предназначенных для обработки информации административно-управленческого характера. Если ОС связана с несколькими терминалами, то програм- мы и файлы данных подготавливаются таким образом, чтобы можно было работать в режиме пакетной обработки. Пакетная обработка заключается в том, что все необходимые команды вводятся последовательно, например с перфокарт, и сразу же начинается их исполнение. Если появляется команда «транс- лировать», то после карты с этой командой должны следовать карты с текстом транслируемой программы. После карт с текстом программы обычно находится карта с командой LINK, которая вызывает редактора межпрограм- мных связей. Как известно, эта программа осуществляет связь с подпрограммами из системной библиотеки. И наконец, карта с командой RUN инициирует исполнение программы в ЭВМ. Данные, которые требуется считывать в процессе исполне- ния программы, находятся на картах, расположенных после кар- ты с командой RUN. Таким образом, можно последовательно исполнять программы разных пользователей без их прямого вмешательства в процесс обработки на ЭВМ.
Системный анализ 47 После выполнения одной программы в ЭВМ автоматически запускается следующая программа. Все программы при этом находятся во входной очереди. ЭВМ узнает о содержании задания по первой прочитанной карте. С помощью этой карты устанавливается связь между конкретным пользователем и ЭВМ. Каждый пользователь дол- жен получить также разрешение на выполнение задания у ЭВМ. По этой причине, для того чтобы ЭВМ перешла к ре- альной обработке данных, на второй карте необходимо указать так называемый пароль. Окончание исполнения программы происходит по команде EOJ (End of Job). При трансляции ассемблерной программы в машинный код (в форме нулей и единиц) используется та же процедура, что и при преобразовании в машинный код программы, написанной на языке более высокого уровня. Ассемблер представляет собой язык с командами в виде комбинаций букв и символов, с которыми мы познакомимся бо- лее подробно в гл. 3. С клавиатуры построчно вводятся коман- ды с комментариями; текстовый файл записывается в дисковое ЗУ под соответствующим именем файла и типом файла, напри- мер ASSY. Запись происходит после команды EXIT, поданной в режиме редактирования. После этого производится ассембли- рование программы по команде ASSY, за которой следует имя файла, затем нажимается клавиша CR. Ассемблирование заканчивается появлением нового (объект- ного) файла типа OBJ. Этот объектный файл необходимо свя- зать с подпрограммами из системной библиотеки, что выполня- ется в режиме редактирования при помощи команды LINK, за которой следует имя файла, и нажатия клавиши CR. Файл типа EXE, получаемый в результате этой операции, представляет собой программу на машинном языке, которая на- зывается абсолютным модулем. Здесь ассемблирование заклю- чается в переводе объектного модуля на машинный язык. Если исходная программа составлена на другом языке ас- семблера, то описанная выше процедура оказывается неприме- нимой. При ассемблировании программы на ЭВМ с другим языком ассемблера используется так называемое кросс-ассемблирова- ние. Перед началом операции кросс-ассемблирования необходи- мо загрузить ассемблер, применяемый на другой ЭВМ, для ко- торой написана программа. Автономная программа ассемблирования имеет все средства для генерации абсолютного модуля, поэтому операция редакти- рования межпрограммных связей (LINK) здесь исключается. В большинстве систем имеются средства для связывания дру-
48 Глава 1 гих команд между собой, что позволяет создавать короткие вер- сии программ. Довольно часто при распознавании файлов встречается тип файла, обозначаемый, например, СОМ, т. е. в действительности здесь мы имеем дело с командой процедуры (СОМ — сокраще- ние от слов COMmand Interpreter). Трансляция в этом случае является излишней операцией, так как при составлении проце- дур порядок выполнения команд уже задан и необходимые под- программы находятся постоянно в системной библиотеке. В слу- чае запрограммированных процедур часто говорят о макросах (макрокомандах), т. е. о коротких программах. В этом случае обработка происходит на основе принципа интерпретации. Ин- терпретатор объединяет все команды друг с другом в одну про- грамму. Примером ОС, которая обеспечивает все указанные выше средства, является UNIX, разработанная фирмой Bell Labo- ratories. Фирма DEC (Digital Equipment Corporation) также применяет такую ОС, которая известна как VAX/VMS и используется на всех ЭВМ типа VAX производства этой фир- мы. Как уже отмечалось выше, введенные в ЭВМ данные, про- граммы или константы хранятся в виде файлов с определенной организацией на магнитном диске. Управление этими файлами осуществляется при помощи каталога файлов, снабженного справочником-указателем. В справочнике можно указать файл, который является справочником для файловой организации дру- гого уровня. Этот процесс можно продолжить, при этом возни- кают различные уровни файловой организации. Справочник данных известен системе под именем, которое присваивается пользователем. Если справочник не имеет име- ни, то система присваивает ему имя, которое совпадает с име- нем пользователя, под которым последний получает доступ к системе. Поэтому для получения в рамках UNIX доступа к си- стеме, например для ввода данных или выполнения программы, пользователь должен сначала выполнить операцию ввода ре- гистрационного имени, т. е. после команды LOGIN он должен набрать на клавиатуре свое пользовательское имя и пароль. После этого между терминалом и ЭВМ устанавливается связь в диалоговом режиме. Файлы регистрируются в справочнике под именами, которые им присваивает пользователь. Тип файла также сообщается пользователем. Различные уровни файловой организации приводят к иерар- хической структуре, которая может понадобиться, например что- бы сгруппировать файлы по родственным признакам. ОС обеспе- чивает возможность копировать файлы из одного справочника в другой по команде COPY, если соответствующий справочник
Системный анализ 49 не «защищен». В случае защищенных файлов имеет место так называемый «санкционированный доступ». Наряду с UNIX широко известны также ОС типа СР/М, OASIS, МР/М и USCD-p, UNIX является самой мощной из перечисленных ОС, так как обеспечивает трансляцию программ, написанных на языках Кобол, Алгол, Фортран, Паскаль, Бей- сик, Пл/1, ЛИСП, Си и АПЛ. В последующих главах рассматривается МП-система, в ко- торой доступ к микроЭВМ обеспечивает пульт ручного управле- ния. Этот пульт можно рассматривать как ОС в аппаратурном исполнении. Однако он имеет ограниченные возможности по* части обслуживания по крайней мере по сравнению с програм- мно-реализованной ОС высокого уровня. Тем не менее мы вы- брали это элементарное устройство для иллюстрации той роли, которую играет связь между человеком и системой, и тех про- блем, которые возникают в процессе осуществления указанной связи. На рис. 1.21 показана фотография терминала, состоящего из устройства ввода данных с клавиатурой и дисплея. Преимущест- вом автономных устройств такого рода является то, что пользо- ватель может располагать клавиатуру и видеодисплей так, как ему кажется наиболее удобным. 1.9. Персональные ЭВМ Персональные ЭВМ появились в продаже около десяти лет назад и первое время использовались в основном для развлече- ний, а не в научных целях. Вызвав огромный интерес у широкой публики, эти простые относительно дешевые системы стал» пользоваться большим спросом. Хотя первоначально реакция специалистов на появление этих ЭВМ была сдержанной (по цене 1000—5000 гульденов купить надежную «настоящую» ЭВМ нельзя), сейчас наметилась тен- денция к широкому применению персональных ЭВМ. В настоящее время персональных ЭВМ используется больше, чем микроЭВМ. Примечательно то обстоятельство, что на ры- нок персональных ЭВМ вторгаются такие мощные концерны, как IBM и Philips. Персональные ЭВМ, рассматриваемые как автономные си- стемы, находят особенно широкое применение для решения за- дач преобразования в таких устройствах, как сверлильные и то- карные станки и т. д. Например, выписанный окулистом рецепт на линзы определенного типа для очков необходимо преобразо- вать в набор команд для станка с числовым программным уп- равлением (ЧПУ), который вырежет и отшлифует требуемые линзы. С помощью соответствующей программы персональна»
50 Глава 1 Рис. 1.21. Терминал типа VT 173/С фирмы DEC. Буквенно-цифровая часть клавиатуры идентична клавиатуре пишущей машинки. Блоки, расположен- ные сверху и справа от алфавитно-цифровой части, включают специальные функциональные клавиши, которые пользователь может запрограммировать для выполнения требуемых специальных функций. ЭВМ осуществляет указанное преобразование и затем печатает на бумаге необходимый набор команд. Кроме того, ЭВМ может одновременно выполнить и обработку административно-управ- ленческих данных, напечатав рядом с исходным рецептом имя и адрес окулиста, чтобы при последующей упаковке и пересыл- ке заказа свести к минимуму возможные ошибки оформления. То же самое происходит и в аптеке. Лекарство, выписанное лечащим врачом в виде только одного слова, может представ- лять собой совокупность различных ингредиентов, которые при смешивании и перемешивании требуется нагревать до п°С. В данном случае, для того чтобы исключить возможные ошибки, которые могут привести к тяжелым последствиям, ис- пользуется ЭВМ для подготовки подробного рецепта с указани- ем требуемых ингредиентов и их количеств; рецепт печатается
Системный анализ 51 на бумаге в виде так называемой «твердой копии», содержащей имена и адреса пациента и лечащего врача. И здесь персональ- ная ЭВМ используется с достаточно высокой эффективностью. Персональные ЭВМ обычно программируются на языке Бей- сик, который легко может выучить любой человек. Этот язык является сейчас самым распространенным и применяется почти в 95% всех случаев, когда производится внедрение машинной обработки на массовом уровне. Диалекты Бейсика с большими возможностями, которые часто называют «расширенными» или «углубленными», существенно способствуют расширению обла- сти применения персональных ЭВМ в народном хозяйстве. В качестве примера можно указать на ЭВМ серии 4050А фирмы Tektronix с 46 новыми командами и операторами на языке Бейсик, которые позволяют осуществлять структурное программирование с помощью фортраноподобных подпрограмм и операторов, что раньше было возможно лишь на таком мощ- ном языке, как Паскаль. Бейсик применяется и в ЭВМ других типов, так как большин- ство мини-ЭВМ и ЦП оборудованы Бейсик-компиляторами. Имеющиеся в продаже персональные ЭВМ исполняют программы на языке Бейсик в соответствии с принципом интер- претации. Согласно этому принципу, каждый оператор рассмат- ривается как отдельная подпрограмма. Интерпретатор следит за тем, чтобы следующие друг за другом подпрограммы, опреде- ляемые операторами основной программы, были связаны друг с другом, образуя исполняемый модуль. При обработке данных на ЭВМ принцип интерпретации реализуется относительно медленно по крайней мере по сравне- нию с тем, что можно сделать, используя компиляцию. В на- стоящее время в персональных ЭВМ компиляторы начинают использовать более широко, имея в виду дальнейшее усовер- шенствование этих вычислительных систем. Огромная популяр- ность персональных ЭВМ и языка программирования Бейсик привела к появлению большого числа публикаций по примене- ниям этих ЭВМ, содержащих соответствующие тексты программ. Возникло много ассоциаций владельцев персональных ЭВМ, ко- торые координируют деятельность по обмену программами. Большие комплексы программ для обработки административно- управленческих данных, предназначенные для небольших пред- приятий, распространяются таким же образом. Деятельность та- кого рода делает персональные ЭВМ особенно привлекательными, так как в обычных условиях создание программного обеспе- чения связано с дополнительными затратами, а при коллектив- ной системе обмена это обеспечение становится бесплатным. Не- которые персональные ЭВМ эффективно применяются в качест- ве терминалов для ввода данных в большие ЭВМ.
52 Глава 1 Несомненно, что в будущем персональные ЭВМ будут иметь ЗУ большего объема, чем их предшественники. Кроме того, за счет улучшения технологии изготовления увеличится и степень интеграции электронных компонентов на кристалле. С увеличением объема ЗУ будут применяться более совер- шенные ОС, в которых система UNIX будет реализована в уп- рощенной форме не только с Бейсик-транслятором, но и с Пас- каль-транслятором, а также с системой управления базами дан- ных, которая осуществляет связь с дисковыми ЗУ. В настоящее •время разрабатываются дисковые ЗУ с диаметром 6,35 см (2,5 дюйма), которые будут представлять интерес и для персо- нальных ЭВМ. Что касается полупроводниковых ЗУ, то уже на одном ЗУПВ-кристалле можно разместить 256К1 бит и на одном СППЗУ-кристалле — 64К8 бит. ЗУ на ЦМД (на цилиндриче- ских магнитных доменах) также являются потенциальными кан- дидатами на роль дополнительной магнитной памяти, хотя в на- стоящее время еще нельзя утверждать, что в скором будущем: эти ЗУ существенно подешевеют. Популярный язык программирования Бейсик подробнее рас- смотрен в гл. 6.
Глава 2 ЭВМ 2.1. Введение Для того чтобы система типа ЭВМ или какого-либо автома- та могла использоваться в сфере организационно-производствен- ных отношений, она должна выполнять функции, эквивалентные некоторым функциям человека. Мы уже неоднократно показывали, что человеческий подход •базируется на элементарных функциях И, ИЛИ и НЕ, из кото- рых можно образовать более сложные функции, такие, как функции сравнения, выбора, распределения и принятия реше- ния. При последовательном способе организации какого-либо про- цесса, когда для выполнения различных операций требуется со- ответствующее исполнительное устройство, необходимо иметь «накопители», где хранится готовая (полуготовая) продукция. В промышленном предприятии в качестве таких накопителей служат стеллажи с ячейками для различных деталей, располо- женные вблизи рабочих мест, склад для хранения готовых изде- лий и склад отдела снабжения. Между этими складами проис- ходит постоянное перемещение данных: стеллажи заполняют де- талями, перемещаются полуфабрикаты, готовые изделия пере- возятся на различные склады. Такая же система перемещения данных имеется и в ЭВМ. Роль локальных накопителей в обрабатывающей системе выполняют регистры, роль склада готовых изделий — внешние ЗУ, а роль отделов снабжения и сбыта — порты ввода-вывода информации, также имеющие регистры для промежуточного хра- нения данных. 2.2. Команды передачи данных Перед началом работы плотника, штукатура или монтаж- ника требуется снабдить необходимыми деталями и материала- ми (данными). Таким образом, каждой операции предшествуют различные процессы перемещения. При использовании ЭВМ также требуется выполнять многочисленные пересылки данных, например из ЗУ в рабочий регистр, прежде чем действительно
54 Глава 2 Рис. 2л. IMSAI-8048 с ЗУПВ на 2К8 бит и ПЗУ на 2К8 бит. Мониторная программа находится в дополнительном ПЗУ на 1Ц8 бит. можно будет приступить к выполнению какой-либо операции обработки. Пересылки происходят и после окончания операций, когда готовая (или полуготовая) продукция перемещается в оп- ределенное место для временного хранения, после чего она по- ступает через порты ввода-вывода на внешние устройства (рис. 2.2). Очевидно, что для обеспечения эффективной передачи тре- буется адресация, которая может быть либо прямой, либо кос- венной. При прямой адресации изделие снабжается меткой с ад-
ЭВМ 55 ресом, по которому оно отправляется. Этим адресом может быть стеллаж в производственном помещении (регистр), склад (ЗУ) или внешний потребитель (порт вывода). В общем случае можно утверждать, что перед выполнением какой-либо операции почти всегда происходит передача (дан- ных). Передачи, происходящие между различными этапами опе- рации или самими операциями, необходимо тщательно планиро- вать, точно указывая источник и приемник передачи. Другими словами, для того чтобы не произошло задержки в изготовлении продукции, необходимо тщательно планировать весь производ- Рис. 2.2. Архитектура производственного предприятия. ственный процесс совместно с этапами пересылки и управления изготовлением изделий. В ЭВМ требуется программировать не- обходимую последовательность выполнения передач, специаль- ных операций и операций управления, которая определяет нор- мальное выполнение процесса обработки в целом. Необходимо научиться выражать мысли человека в виде про- стых функций, так как человек не приучен мыслить на языке
56 Глава 2 элементарных логических категорий, из-за чего часто остаются незамеченными основные этапы процесса обработки, являющие- ся исключительно важными элементами для программирования. Тот факт, что необходимо перечислять все основные этапы об- работки, настолько перегружает деталями специальные опера- ции, что при этом часто теряется общий план задания. При программировании для современных ЭВМ эта трудность ком- пенсируется за счет применения языков высокого уровня; при этом ЭВМ выполняет задачу преобразования сложных логиче.- ских функций в более простые компоненты. 2.3. Операционные команды Помимо команд передачи данных, которые используются в ЭВМ и аналоги которых встречаются на каждом шагу при пересылке данных в повседневной жизни, известны также опе- рационные команды АЛУ (арифметико-логическое устройство)., В обычной жизни мы также встречаемся с такими командами,, например, при реализации элементарных функций И, ИЛИ, НЕ, операций сложения и вычитания, функций сравнения и приня- тия решений. Так, выполняя операцию сложения, мы складываем две ве- личины, а в соответствующем организационно-производственном аналоге происходит сложение двух чисел или же соединение двух материальных объектов с помощью какого-либо связываю- щего материала. При вычитании мы выбираем определенное количество деталей из имеющегося запаса или вычитаем одно число из другого. Операция сравнения реализуется в виде вспо- могательной операции, на основе которой, например, можно при- нять какое-либо решение. Функция принятия решения реализу- ется в виде положительного или отрицательного заключения по некоторой проблеме. Отрицательное заключение (Нет) означа- ет, что мы продолжаем движение вперед, тогда как положитель- ное заключение (Да) означает выбор другого пути или вариан- та. При этом мы говорим о ветвлении в последовательности вы- полнения операций. ЭВМ может осуществить ветвление в про- грамме с помощью команд передачи управления. 2.4. Ветвления в программе Простым примером программы с ветвлением является про- грамма проведения летнего отпуска. Отклонение от основной программы может возникнуть из-за прогноза погоды в странах, перечисленных в соответствующей программе летней поездки. Всякий раз, когда приходится принимать решение, задается во- прос о прогнозе погоды (хорошая погода сравнивается с той по-
ЭВМ 57 годой, которая наблюдается в данной стране, указанной в про- грамме поездки) и при этом нужно решить следующую зада- чу — придерживаться программы поездки или же отклониться от нее. Отклонение от основной программы не означает, что мы больше не вернемся назад, потому что первое ветвление может содержать второе ветвление, которое приведет снова в прежний пункт основной программы, так как по ходу поездки погода мо- жет существенно измениться. Если в течение отпуска этот во- прос задается повторно, то в программе возникает цикл. В связи с выполнением ветвления в основной программе (на- пример, в программе поездки, производственной программе или вычислительной) следует запоминать, где именно имело место отклонение. Дело в том, что в случае прерывания в программе поездки мы возвращаемся не домой, чтобы начать эту поездку заново, а направляемся в то место, которое было выбрано. ЭВМ может запомнить адрес (+1), где мы прервали первоначальную основную программу. В случае ветвления можно задать один или несколько раз вопрос о том, будем ли мы возвращаться к исходной программе. Адрес, в который мы должны возвра- титься, находится в стековом ЗУ. При появлении в вычислитель- ной программе команд ветвления можно предусмотреть, чтобы адрес возврата вводился в стек автоматически. Этот адрес воз- врата равен адресу команды ветвления +1. Такое ветвление в программе (переход из некоторого адреса в основной программе в некоторый адрес в подпрограмме) за- висит не только от определенного условия, например состояния погоды, но и от выполнения ряда последовательных регулярных операций в основной программе. Так, например, в нашей повсе- дневной жизни встречается такой регулярно повторяющийся цикл, как «визит» к кофеварочному автомату, т. е. деятельность, состоящая из одних и тех же операций, но происходящая в раз- ных точках основной программы. Такой цикл может повторяться, если, например, к нам при- шли посетители, которых также необходимо угостить кофе. В такой ситуации произойдет переход из основной программы и кофеварочный автомат снова наполнит нам несколько чашек кофе. Эта ситуация (рис. 2.3) отличается тем, что сначала бу- дет совершен один переход из основной программы, а затем не- сколько локальных переходов, связанных с получением из авто- мата п чашек кофе — ввод монеты, ожидание, заполнение чаш- ки. После заполнения n-й чашки кофе произойдет возврат в ос- новную программу, которая описана в нашем ежедневном рабо- чем расписании (графике). Переход из основной программы может быть условным, если перед его выполнением будет задан какой-либо вопрос. Напри- мер, после 10 часов мы можем регулярно посматривать на часы
58 Глава 2 Переход в... (вызов) Рис. 2.3. Структурная схема процедуры приготовления кофе. и проверять, не наступило ли время 10 ч 30 мин. Когда часы показывают ровно 10 ч 30 мин, мы совершаем переход из ос- новной программы, т. е. идем пить кофе. Подпрограмма кофе- пития содержит условный переход, перед выполнением которо- го задается вопрос о числе чашек кофе, которое должен обеспе- чить кофеварочный автомат. При утвердительном ответе (Да)
ЭВМ 59 этот переход не будет выполнен и произойдет безусловный пе- реход назад в основную программу. При выходе из основной программы имеет место ветвление. При этом мы запоминаем следующий этап нашей повседневной работы и идем пить кофе. При появлении команды ветвления в основной программе ЭВМ запоминает, где это ветвление про- изошло, засылая в стек соответствующий адрес +1. После вы- полнения подпрограммы и появления команды RETURN (ВОЗ- ВРАТ) ЭВМ извлекает из стека адрес +1 и помещает этот код в счетчик команд, после чего выполнение основной про- граммы возобновляется. Такой стек регистров представляет собой устройство, кото- рым постоянно пользуются в повседневной жизни. Примером стека регистров является автобус со специальным отделением для временного хранения чемоданов во время поездки. Первые пассажиры, которые входят в автобус, ставят свои чемоданы в багажное отделение и усаживаются на задние сиденья. Чемо- даны постепенно накапливаются. В конце поездки пассажир, ко- торый вошел в автобус последним, возьмет свой чемодан пер- вым. Те пассажиры, которые поставили свои чемоданы в багаж- ное отделение первыми, получают их последними. Чемодан, ко- торый попал в отделение последним, извлекается первым (по принципу — последним вошел, первым вышел). Стек регистров в ЭВМ также работает по этому принципу. Указатель стека, т. е. счетчик объектов, вводимых в стек и выводимых из него, сооб- щает, по какому адресу был записан последний объект. Стек регистров представляет собой ЗУ, в котором можно хра- нить данные без явной адресации, используя всего лишь одну команду проталкивания (PUSH), после которой следует специ- фикация регистра, в котором записаны данные. С помощью команды выталкивания (POP) данные можно снова извлечь из стека, однако только те, которые были записаны в нем послед- ними. 2.5. Коды команд Следующие друг за другом команды, которые управляют работой ЭВМ, хранятся в программном ЗУ в двоичном коде. С помощью группы битов можно сформировать код, разным кон- фигурациям которого можно присваивать разные значения. Для кода из одного бита возможны две конфигурации, для двух бит — 4, для трех бит — 8 и т. д. (рис. 2.4). В общем слу- чае, когда кодовое слово состоит из п бит, число возможных конфигураций составляет 2П. Один байт (8 бит) обеспечивает 28 = 256 различных битовых конфигураций.
60 Глава 2 Команда ЭВМ состоит из командной части, также называв* мой КОП (кодом операции), которая определяет выполняемую! операцию, и операнда, т. е. дополнительных данных, необходи- мых для выполнения команды. Операнд может указывать ре- гистр или содержать адрес ЗУ, где находятся данные, с по- мощью которых выполняется команда. Кроме того, операнд мо- жет содержать двоичное число или спецификацию портов вво- да-вывода системы. 1 бит 0 1 0 1 2 бит 0 0 0 1 0 1 2 1 0 3 1 1 3 бит 0 ООО 1 0 0 1 Рис. 2.4. Возможные конфигура- 2 0 1 0 ции с одно-, двух- и трехбито- 3 0 1 1 выми кодами. 1 бит обеспечивает 4 1 0 0 2 конфигурации, 2 бит —4 кон» 5 1 0 1 фигурации, 3 бит — 8 конфигура- 6 1 1 0 ций, n-битовый код —2П конфи* 7 1 1 1 гураций. Длина операнда существенно зависит от типа команды. Из- вестны команды длиной в 1 байт, т. е. без операнда, а также двухбайтовые и трехбайтовые команды, показанные на рис. 2.5. Однобайтовые команды обычно связаны с функциями, которые не содержат обращений к внешним устройствам, так что полный адрес для них является излишним. Такими командами могут быть, например, команды передачи данных между различными регистрами в МП. Однобайтовая команда имеет длину, доста- точную для спецификации регистров. Команды появляются в порядке следования выполняемых операций, коды которых находятся в программном ЗУ. В ЭВМ» использующих для связи с ЗУ однобайтовые слова, трехбайто- вая команда означает, что для ее хранения в ЗУ требуется три ячейки. Тот факт, что команда состоит из 1, 2 или 3 байт, ЭВМ определяет по типу команды, так что при считывании команды автоматически осуществляется обращение к ЗУ 1, 2 или 3 раза, что обеспечивает считывание всей команды и ее размещение в регистре команд МП. Здесь еще раз проследим, как происходит выполнение про- граммы на примере организационно-производственного аналога, когда манипулируют материалами (данными), хранящимися на складе (ЗУ). Вернемся еще раз к процессу изготовления ящика по опре- деленной программе, которая хранится на листе бумаги (ЗУ). Необходимые операции описаны в ней достаточно подробно и в требуемом порядке следования. Лист бумаги с перечнем операций, которые необходимо вы- лолнить, представляет собой «программное ЗУ». Часть ЗУ резер-
ЭВМ 61 Рис. 2.5. ППЗУ с одно-, двух- и трехбайтовыми командами. вируется для хранения обрабатываемых величин; в данном при* мере это склад с пиломатериалами, крепежом и отделочным» материалами. Таким образом, бумага выполняет роль ЗУ для хранения программы, а склад — роль ЗУ для различных мате* риалов. Исполнительным органом здесь является плотник, голова ко- торого играет роль управляющего органа, а различные приспо- собления в мастерской — аналоги функциональных устройств ЭВМ. Конечное (готовое) изделие, т. е. ящик, выносится черев
62 Глава 2 дверь. Через эту же дверь в мастерскую вносятся строймате- риалы. ЭВМ также работает в соответствии с такой организацией. Плотнику с приспособлениями соответствует АЛУ, «программно- му ЗУ» — ППЗУ и складу для хранения материалов и обраба- тываемых величин — ЗУПВ. Через порты ввода-вывода можно передавать данные в ЭВМ и из ЭВМ. При выполнении производственных операций также даются поручения (команды) с операндом и без него. При перемещении пиломатериалов требуется указать адрес плотника, тогда как в случае команды «соединить две рейки между собой» адрес можно опустить. Необходимо точно указать, какие именно две детали требуется соединить между собой, однако с учетом того, что число реек, необходимых для изготовления ящика, ограни- чено. Это обстоятельство можно закодировать достаточно про- сто уже в самой команде. Программы вычислений могут содержать сотни и тысячи команд. То, что ЭВМ выполняет команду за доли секунды, оз- начает, что на выполнение тысяч команд, т. е. программы в це- лом, ЭВМ затрачивает относительно небольшое время. Объем программы должен соответствовать типу ЭВМ. Решение этой проблемы следует искать с помощью подпро- грамм, предназначенных для многократного использования. В качестве иллюстрации можно воспользоваться примером с накладными на поставку большого числа товаров. Для раз- ных накладных используется один и тот же метод решения, а от- личаются только переменные, такие, как имя клиента, количест- во товара и его цена. Подпрограмма «оформление накладной» также представляет собой всегда одну и ту же процедуру, в которой изменяются только имя и адрес клиента, специфика- ция товаров, их количество и полная стоимость. Из более тщательного анализа алгоритма такой подпро- граммы «оформление накладной» следует, что отдельные опера- ции в ней выполняются последовательно. В конце этой подпро- граммы добавляется ряд дополнительных операций, которые осуществляют переход в начало программы и повторное оформ- ление накладной, однако уже для нового клиента. Также по- ступает и служащий, который заполняет накладные. В конце программы номер клиента увеличивается на 1; при этом в ЗУ автоматически поступает информация о том, что именно зака- зал и получил данный клиент за истекший период, после чего происходит заполнение накладной. Программа будет выполнять- ся так, что после оформления накладных для всех клиентов про- изойдет автоматическая остановка и переход к новой программе. Естественно, на практике обработка происходит не так про- сто, как имеет место в рассмотренной выше программе. Одно-
ЭВМ 63 временно с оформлением накладных, естественно, ведутся бух- галтерские книги отдела снабжения и т. д., так что система обра- ботки расходует на всю эту деятельность значительное время, особенно если речь идет о тысячах клиентов. В данном примере необходимость команды ветвления оче- видна. Здесь используется переход, так как в конце программы всегда проверяется, все ли клиенты при оформлении своих на- кладных ознакомились, например, с ценой. Разумеется, это не единственная возможная команда перехода — количество их может исчисляться сотнями. Чтобы узнать, все ли клиенты ознакомлены с ценами, тре- буется выполнить сравнение номера клиента, который при каж- дом условном переходе увеличивается на 1, и общего числа кли- ентов, которое хранится в ЗУ. При совпадении чисел условный переход не производится и программа останавливается. ЭВМ в процессе оформления накладных будет постоянно возвращаться в начало программы, чтобы осуществлять непре- рывное управление процессом и его проверку. Если во время выполнения программы произойдет какой-либо сбой, то он вы- зовет переход из управляющей программы в программу восста- новления, которая управляет процессами, происходящими при аварийной остановке, и обеспечивает безопасные условия рабо- ты. При контроле процесса управления обычно применяется одна или несколько команд сравнения; при этом соответствую- щие величины сравниваются с граничными (предельными) зна- чениями, которые хранятся в ЗУ в виде констант. Как известно, управляющая ЭВМ обычно не останавливается вообще, так как процессы контроля и управления в ней являются непрерывными. При каждом изменении какой-либо величины производится проверка на превышение предельных значений и, если такое превышение зафиксировано, происходит переход в программу восстановления. Другая возможность — отключение обнаружен- ного отказавшего элемента и включение резервного элемента с выдачей сообщения на панель управления о восстановлении работоспособности. При этом процесс обработки не прерывается. 2.6. Аппаратурное и программное обеспечение Систему обработки данных можно эффективно использо- вать только тогда, когда она соответствующим образом запро- граммирована. Программа обычно состоит из следующих друг за другом команд, которые хранятся в программном ЗУ, допус- кающем только считывание (ПЗУ). Программа ЭВМ и обраба- тываемые данные, которые также хранятся в ЗУ, образуют про- граммное обеспечение ЭВМ. Электронные схемы выполняют все операции и хранение данных, а также ввод и вывод данных,
64 Глава 2 т. е. реализуют то, что называется аппаратурным обеспечением. Между программным и аппаратурным обеспечением лежит «по- граничная» область — фирменное обеспечение. Это обеспече- ние, как мы уже видели при рассмотрении МП с разрядно-мо- дульной организацией, представляет собой микропрограммы для элементарных решающих устройств в биполярном испол- нении. Как известно, набор следующих друг за другом команд, ко- торые обеспечивают требуемые специальные операции в необ- ходимом порядке следования, называется алгоритмом. Использование при программировании команд ЭВМ в двоич- ном коде является довольно трудоемкой задачей, поэтому были предприняты попытки кодировать команды так, чтобы соответ- ствующий буквенный код указывал требуемую операцию или функцию. Такое буквенное обозначение обычно называют мне- моническим или семантическим. Так, например, определенные команды по передаче данных задаются мнемонически в виде MOV, т. е. трех букв английского глагола MOVE, который пере- водится как «пересылать, перемещать». MOV в качестве коман- ды передачи данных легко запоминается, так же как команда суммирования ADD (add — прибавлять), команда вычитания •SUB (subtract — вычитать) и команда перехода JMP (jump—• прыгать, перескакивать). Байт 58 Восьмеричное представление 1 1 1 / 0 1 7 0 F16 616 Шестнадцатеричное представление Рис. 2.6. Представление 8-разрядной двоичной информации (команды или операнда) восьмеричными и шестнадцатеричными числами. При программировании текст записывается в мнемонических символах, т. е. на языке ассемблера, а затем соответствующие им двоичные коды легко находятся из таблиц команд. В процессе кодирования каждые три или четыре бита двоич- ного кода объединяются и представляются восьмеричной или шестнадцатеричной цифрой соответственно {рис. 2.6).
ЭВМ 65 Более профессиональный подход к преобразованию мнемо- нической символики в требуемый двоичный код заключается в использовании ЭВМ, которая имеет программу перевода мне- монического кода в машинный. Такая программа называется программой ассемблирования, или просто ассемблером. Эта программа не только переводит код, но и осуществляет адреса- цию однобайтовых, двухбайтовых и трехбайтовых команд. При ассемблировании область ЗУ, отводимая программе, определяется адресом, который вводится в начале выполнения программы и обозначается через ORG (Origin — начало). Во время программирования не требуется постоянно указывать ка- кие-либо определенные участки ЗУ, где должны храниться со- ответствующие команды. При программировании для целей адресации используются символические имена и метки; при этом мнемонические обозна- чения используются в качестве значений адресов, которые поз- же при ассемблировании определяются ЭВМ. Метки могут быть, например, типа LOOP (цикл), SIGNAL (сигнал) и SIGNAL POINT (сигнальная точка). Константы также можно обозна- чать с помощью аналогичных символических имен. Наличие меток позволяет производить быструю подготовку программы для использования в другом участке ЗУ, т. е. зано- во ассемблировать и присваивать ей новый начальный адрес. Если для ввода программы применяется перфолента, то по- следующая операция ассемблирования будет выполняться с бо- лее высокой скоростью. Другая форма ввода программ связана с так называемым редактором, который позволяет вводить при помощи телетайпа команды в машинном коде в виде шестнадцатеричных цифр. На перфоленте телетайпа пробиты шестнадцатеричные цифры в коде ASCII. После ввода информации с перфоленты при по- мощи устройства чтения код ASCII необходимо преобразовать обратно в двоичный код, для чего требуется специальная про- грамма. Система с перфолентой позволяет осуществить доста- точно простой поиск ошибок в соответствующей программе, так как телетайп печатает дубликат правильно пробитой части про- граммы вплоть до той позиции, где находится ошибка. Эту ошибку можно затем исправить с клавиатуры, после чего дубли- кат ленты печатается далее вплоть до следующей ошибки. Вставить пропущенные команды по этому методу нельзя, так как в таком режиме нужно иметь доступ к ассемблеру, кото- рый загружает адреса команд и символических имен. Редактор в общем случае имеет в своем распоряжении ин- формацию о предварительной обработке данных до определен- ного качественного уровня, что позволяет ему переходить к оп- тимальному варианту обработки данных. Конкретно это выра-
66 Глава 2 жается в том, что в программу вводятся все необходимые кор- рекции и данные на различных приоритетных уровнях. Редакторы могут иметь различные возможности в зависимо- сти от конкретного применения. При предварительной обработ- ке программ, написанных на ассемблере, можно ограничиться применением телетайпа и простой формы редактирования. Более сложные варианты программы-редактора используют- ся при корректировании программ в системах высокого уровня, где ввод данных происходит с терминала, снабженного алфавит- но-цифровой клавиатурой и видеодисплеем. При этом предвари- тельную обработку можно вести как в режиме автономного до- ступа (off-line), так и в режиме прямого доступа (on-line) к вычислительной системе. 2.7. Прерывание — вмешательство в процесс последовательного выполнения программы ЭВМ является системой, которая, вообще говоря, не нуж- дается в контактах с внешними устройствами, кроме случаев, когда ее «внимание» необходимо привлечь к каким-либо особен- ностям процесса вычисления. В первые годы развития техники ЭВМ, когда она использовалась разработчиками, ввод инфор- мации производился с применением переключателей и устройств для чтения перфолент, а результаты вычислений печатались на переделанной электрической пишущей машинке. О таких пери- ферийных устройствах, как дисковые ЗУ, быстрые принтеры, перфораторы, видеодисплеи и т. д., в то время не было и речи. Процесс вычислений в ЭВМ, еще очень медленный по сравне- нию с современными ЭВМ, почти не нарушался, за исключе- нием периода выдачи информации на пишущую машинку в те- чение относительно короткого интервала времени. Позднее ЭВМ начали применять для обработки администра- тивно-управленческих данных и появилась необходимость в осу- ществлении связи с большим числом периферийных устройств. В этих условиях прерывания процесса решения стали отнимать много времени, поэтому была начата разработка таких систем связи, которые обеспечивали бы минимальные потери времени на прерывание. Примеры прерываний можно легко найти в сфере организа- ционно-производственной деятельности. Например, мастер, ос- тановив одного из своих подчиненных во время работы и спро- сив, не может ли он помочь заведующему мастерской выпол- нить определенную операцию, не ждет пассивно ответа, а про- должает выполнять свою основную работу. «Прерванный» ра- ботник выполняет указание мастера и затем возвращается к своей основной работе.
ЭВМ 67 Поведение различных устройств в системе обработки данных похоже на поведение участников этого эпизода. Центральная ЭВМ является системой высокого уровня, которая «командует» устройствами более низкого уровня. Система высокого уровня не ждет ответа от системы низшего уровня. После того как си- стема низшего уровня выполнила соответствующее указание, она сообщает об этом системе высокого уровня и, если ей не- обходимо получить какие-либо дополнительные данные, она должна располагать сведениями, где они находятся. Устройство низшего уровня «стучится в дверь», однако оно должно подож- дать, пока ему не дадут разрешение на вход. Прерывания возникают во всевозможных формах, причем в каждом случае имеет место новый вариант запроса на пре- рывание. Рассмотрим, например, прерывание во время связи между дисковым ЗУ и центральной системой. При этом нужно различать случаи прерывания, когда делаются попытки переда- чи данных из системы на диск и в противоположном направ- лении. При передаче данных с диска в систему вводится информа- ция об адресах этих данных на диске. Контроллер, который управляет работой диска, с помощью устройства позициониро- вания устанавливает магнитную головку над требуемым треком. Затем контроллер просматривает индексы секторов, и, как толь- ко требуемые данные становятся доступными для считывания, включается последовательно-параллельный преобразователь, который преобразует последовательный набор данных в парал- лельный. Это можно сделать, например, с помощью регистра сдвига, который выполняет также роль временного ЗУ. После завершения операции появляется параллельный набор данных и контроллер посылает с диска сообщение в систему в виде за- проса на прерывание. При этом система заканчивает выполне- ние текущей команды и сообщает контроллеру, что готова при- нять данные из регистра сдвига. Контроллер сразу же реагиру- ет на это сообщение, передавая на шину данных первый байт. Система принимает первый байт и помещает его в ЗУ. Затем она запрашивает контроллер на передачу следующего байта. Этот процесс продолжается до тех пор, пока все запрошенные байты не будут переданы в ЗУ. При передаче в обратном направлении система с помощью специальной команды сообщает контроллеру о данных, которые она хочет передать на диск. Контроллер, работающий в жду- щем режиме, отвечает на эту просьбу прерыванием, после кото- рого система передает данные по шине данных в ЗУ контролле- ра с помощью нескольких последовательных пересылок. Контроллер продолжает этот процесс, т. е. преобразует па- раллельный набор данных в последовательный, выбирает трек
68 Глава 2 и записывает данные на диске. Прерывание должно начинаться с контроллера, так как это управляющее устройство не должно быть занято выполнением предыдущей операции передачи. Если пересылку необходимо осуществить напрямую, перед этой опе- рацией старую информацию следует переписать в ЗУ контрол- лера. 2.8. Архитектура ЭВМ Автоматическая обработка данных является отображением процессов, происходящих в повседневной жизни. Ведь автомат или ЭВМ для того и служит, чтобы заменять человека при вы- полнении действий рутинного характера. На основе вышеизло- женного можно прийти к заключению, что автомат или ЭВМ должны иметь организационную структуру, которая часто встре- чается в повседневной жизни. Как известно, ЭВМ состоит из ЦП (центрального процессо- ра), ЗУ и дополнительных схем для связи с внешними (перифе- рийными) устройствами. АЛУ является частью ЦП, в котором находится также схема управления АЛУ и регистры, в которых хранятся данные, подготовленные к обработке. ЦП связан с ЗУ и портами ввода-вывода информации шинами данных и ад- ресов. На рис. 2.2 была уже показана организация, которая совпа- дает с архитектурой ЭВМ. На этом рисунке представлена схема мастерской с рабочим местом, где работает плотник. На рабочем месте располагаются стеллажи (регистры), где лежат материалы, необходимые для работы. Плотник получает команды от мастера (управление). Мастер дает указания под- собному рабочему, который заполняет стеллажи пиломатериа- лами и столярным клеем, взятыми со склада (ЗУ), а также обес- печивает внутреннюю транспортировку (передачу) в пределах рабочего помещения и отправляет готовые и полуготовые изде- лия в отдел снабжения и сбыта (порты ввода — вывода). Мастер получает в свой адрес макрокоманды из отдела пла- нирования (программы вычислений на ЭВМ), находящегося в главной конторе (программное ЗУ). Макрокоманды имеют форму заказов на изготовление, которые мастер вывешивает на доске приказов (хранение в командном регистре). Каждая команда имеет номер, который указывает позицию команды в программе (счетчик адресов). Мастер знает, какие специальные операции (команды) не- обходимо осуществить, и отдает соответствующие указания плотнику и подсобному рабочему либо устно, либо по телефону (через шину управления), если ему необходимо установить кон- такт со складом или отделом снабжения. В конторке мастера
ЭВМ 69 имеется телефон для связи с внешним миром, по которому к нему поступают внешние команды (прерывания). Мастер мо- жет быстро сообщить по телефону о необходимости в поставках материалов для производства изделий. Кроме официальной про- граммы для осуществления необходимых операций, он может выполнять и срочные специальные операции, если, например, какой-либо клиент потребует срочной поставки изделий опреде- ленного типа. Мастер также производит перемещение материа- лов между внутренним складом и внешним большим хранили- щем (команды DMA-HOLD в ЭВМ, Direct Memory Access Hold — прямой доступ к памяти с захватом). Если со склада необходимо получить определенные материа- лы и подсобный рабочий должен ожидать их, стоя у хранилища, то мастер может выдать в адрес этого подсобного рабочего команду ожидания (WAIT для связи с ЗУ). Управление мастер- ской осуществляет лицо, которое занимается планированием про- изводства изделий (программа вычислений на ЭВМ). В соответ- ствии с этой программой отдельные операции выполняются по- следовательно. Программа составляется таким образом, что мастерская получает вовремя необходимые материалы либо со склада, либо из отдела снабжения. Программа обеспечивает также своевременный вывоз полуготовых и готовых изделий из мастерской. Специальными операциями непосредственно в рабочем поме- щении управляет заведующий мастерской (микропрограмма). Основная программа никак не влияет на эти специальные опе- рации. Ответственность за них полностью возложена на заве- дующего мастерской. Передача материалов (данных), а также приказов по мас- терской (команд) происходит по одним и тем же каналам (ши- нам данных). При передаче как материалов, так и приказов мастера можно использовать прямую или косвенную адресацию. Мастер всегда может сказать посыльному: «Пойди к X и спроси у него, где можно взять материал Y». Такой пример косвенной адресации часто встречается при программировании на ЭВМ. В случае серийного производства отдел планирования может выдать набор инструкций, которые должны быть выполнены в повторяющемся режиме. Если при этом полуфабрикаты не пе- ремещаются, то происходит переполнение стеллажей в мастер- ской (переполнение). Плотник получает команду следить за этим, и, после того, как такая ситуация возникает, он сообщает о ней мастеру, который принимает соответствующее решение. Транспортировка полуфабрикатов со стеллажей соответствует ветвлению в программе. Сообщение о переполнении реализуется в микроЭВМ с по- мощью одноразрядного флажкового регистра. Может возник-
70 Глава 2 нуть такая ситуация, когда в процессе непрерывного производ- ства запас деталей на стеллажах истощится, т. е. станет нуле- вым. В ЭВМ соответствующий флажковый бит называется ну- левым. Относительно прерывания деятельности мастера можно так- же отметить, что мастер может выключить телефон, если он занят, например, анализом какого-либо проекта и при этом не хочет, чтобы ему кто-то мешал. В случае ЭВМ две разные ко- манды делают систему либо восприимчивой к прерыванию, либо нечувствительной к нему. Если необходимо осуществить вывоз изделий через отдел сбыта, то имеется возможность разделить партию изделий пе- ред отправкой на две части и затем вывезти обе половины от- дельно одну за другой (последовательно) через ворота наружу, после чего снова объединить обе половины за воротами. Подобный аналог имеется и в системах обработки данных, в частности в ЗУ МП, которые не имеют достаточного количест- ва внешних выводов (клемм корпусов DIP) для того, чтобы вы- вести наружу слово данных или адрес целиком. Такие слова данных или адреса разделяются на две части, которые с по- мощью мультиплексора выводятся одна за другой через одни и те же внешние выводы, после чего объединяются. 2.9. Микропроцессор 8085А В предыдущих разделах при обсуждении аналогов мы уже познакомились с большим числом структур, которые имеют ор- ганизационно-производственную архитектуру, напоминающую архитектуру ЭВМ. Был рассмотрен ряд специальных терминов, которые связаны с этими структурами и становятся более со- держательными при переходе к детальному описанию конкрет- ных микроЭВМ. В качестве примера был выбран микропроцессор (МП) 8085А, разработанный фирмой Intel. В настоящее время он изготавливается и поставляется на рынок большим числом раз- личных фирм. На рис. 2.7 приведена блок-схема этого МП. Из нее видно, что основным модулем МП является АЛУ, т. е. арифметико-ло- гическое устройство, выполняющее различные операции по об- работке данных. Ввод данных осуществляется с помощью акку- мулятора А и регистра временного хранения. В процессе обра- ботки чаще всего участвуют две величины, которые вводятся в два вышеуказанных регистра, находящиеся на входе АЛУ. Результат вычисления возвращается в аккумулятор А. Оба входных регистра могут загружаться из источника данных, при- соединенного к шине данных. Таким источником могут быть
INTA(L) RST6,5(H) TRAP(H) S1D(H) SOD(H) INTR(H) RST7,5(H) 2 Управление прерываниями Последовательный ввод-вывод 39 Управление Аккумулятор Временный у 1 регистр Дешифра- тор команд Устройство управления и синхронизации Синхро- Управляющие сигналы сигналы Состояв. DMA Сброс Регистр флажковых битов шина Затык'//////У/////////////^ Управление Регистр команд Рег. В Рег. С Рег. D Рее. Е Рег. Н Рег. L Указатель стека Счетчик команд Адресный буфер Ж адресов 8 Готов- ность (Н) XI Выход WR синхро^ (l) сигн. RD AlE' ' S1 XZ (L) (H) (H) _(Н) I/O HLDA RESULT (Я) (Н) (Н) HOLD RESIN । (Н) (L) + 5В ОВ Рис. 2.7. Шина адресов Шина данных/адресов А8...А15 AD0...AD7 (Н) (Н) а — архитектура МП 8085А; б — МЭК-символ МП 8085А. 2--- INTR г—i5’5|. 6----175 °____ ’ 4 35 36. RESET(L) 5 Ф 8-разрядный МП X/ 8085 Х2 $ Захват0, шины ' 2 3 6,51RST Состояние CLK Останов m пд Запись MLUA Чтение INTA Выборка $10 WR v RD v М 10 v ALE7 trap Готовность Вход сброса Выход —I cdpocaj- ADRD?< ADR v/ SID 37 38 .__11 1___29 ____« _____3 SOD ADRD - адрес жданные ADR-aflpec (6) 12 J4 15 16 17 18 J9 22 23 24 25 26 6
72 Глава 2 внутренние регистры В, С, D, Е, Н и L, устройство ввода-вывода и внешнее ЗУ. Внутренние регистры предназначены для хране- ния промежуточных результатов- вычислений, т. е. выполняют роль стеллажей, используемых в организационно-производствен- ных аналогах. Как данные, так и команды вводятся через шину данных. Команды передаются во время цикла ввода команд и используются для обработки данных в течение исполнительного цикла. Требуемый порядок следования этих операций обеспечи- вает устройство управления, или контроллер МП. Команды, необходимые для передачи данных, находятся в наборе команд, применяемых в конкретном МП. Устройство управления не только управляет работой МП, но и запускает в определенные моменты времени ряд внешних устройств. К ним относятся внешнее ЗУ и порты ввода-вывода информации. На- пример, если с помощью какой-либо команды требуется запи- сать или прочитать информацию, находящуюся в определенной ячейке внешнего ЗУ, то устройство управления для выполнения соответствующей команды выбирает «подходящий» момент вре- мени. Такие операции осуществляются с помощью команд WR(L) (запись) или RD(L) (чтение), одновременно с которыми на ад- ресную шину поступает код адреса для поиска требуемой ячей- ки ЗУ. Сигнал МП 10(H)/M(L) сообщает, имеет ли отношение передача данных к ЗУ (М) или к портам ввода-вывода (I/O). Мы говорим о «подходящем» моменте времени, так как об- ращаемся к ЗУ не только для того, чтобы извлечь необходимые данные. Ряд других операций обращения к ЗУ будет рассмотрен ниже более подробно. С помощью внешнего сигнала HOLD(H) (захват шины) можно «предписать» МП не пользоваться шинами данных, ад- ресов и управления, потому что мы хотим применить их для других целей. В результате буферы данных, адресов и управле- ния освобождаются и МП переводится в состояние ожидания до тех пор, пока эти буферы не освободятся снова для передачи данных. МП всегда заканчивает команду HOLD сигналом HLDA(H) (подтверждение захвата шин). После приема запроса о передаче данных в ЗУ или в порты ввода-вывода МП находится в состоянии ожидания до тех пор, пока не получит сообщение о том, что требуемый регистр пере- шел в состояние готовности или что требуемый адрес найден в ЗУ. Сообщение об этом поступает в МП через соответ- ствующий управляемый вход в виде сигнала READY (Н) (го- товность) . Этот вход связывает медленное внешнее ЗУ с быстрым МП, так как сигнал READY заставляет МП ждать до тех пор, пока в ЗУ не закончится процесс выборки адресов. Время выборки из
ЭВМ 73 ЗУ можно всегда увеличить, чтобы успеть записать данные из ЗУ на соответствующую шину. Кроме того, сигнал READY со- общает об операции регенерации при использовании динамиче- ских ЗУПВ. Сигнал RESIN (внутренний сброс) позволяет установить счетчик команд в нулевое состояние. В этом случае программа будет автоматически начинаться снова, если не приостановить повторный старт, например, с помощью внешнего сигнала NO-READY. Сигнал сброса RESIN после использования в МП преобразуется на выходе устройства управления в сигнал RESOUT (внешний сброс) и его можно использовать, напри- мер, для сброса в нулевое состояние периферийных схем и внеш- них регистров. К входам XI и Х2 можно подключить кристалл кварца с собственной частотой порядка 6 МГц. Генератор син- хросигналов, связанный с контроллером или устройством управ- ления, определяет реальное быстродействие МП. Этот генератор вырабатывает синхросигналы, необходимые для последователь- ного выполнения внутренних операций. МП снабжен внешними выводами, к которым вместо кристалла кварца можно присо- единить RC-цепочку в качестве элемента, задающего требуемую частоту тактирования. Разумеется, длительность операций при использовании RC-цепочки фиксируется менее точно, однако для ряда применений это обстоятельство не создает особых затруд- нений. Далее рассмотрим еще один выходной управляющий сигнал ALE (Н) (Address Latch Enable — разрешение адресного режи- ма). С помощью ALE часть информации шины адресов, а именно биты от АО до А7 включительно, выводится из МП по шине дан- ных. Это делается для более эффективного использования внешних выводов корпуса МП. Врёменное разделение (мульти- плексирование) с помощью ALE позволяет выдать всю адрес- ную информацию через шины адресов и данных с тем, чтобы по окончании действия ALE снова использовать шину данных для передачи данных. Сигналы состояния S0(H) и S1(H) содержат информацию о состоянии МП. Из таблицы, приведенной на рис. 2.8, видно, какие значения имеют сигналы SO и S1, когда МП находится в различных рабочих состояниях. Эти сигналы в действительно- сти указывают, в какой фазе находится устройство управления (контроллер) МП. Прерывание производится с помощью команды INTR(H). Если МП закончил выполнение текущей команды, то он ответит на прерывание сигналом INTA(L) (подтверждение прерыва- ния). Через линию RST (повторный запуск) может поступить и внешний запрос на прерывание. Если МП подтвердит этот за- прос, то одновременно с генерацией сигнала INTA произойдет
74 Глава 2 S1(H) SO(H) ОСТАНОВ 0 0 ЗАПИСЬ 0 1 ЧТЕНИЕ 1 0 ВЫБОРКА КОМАНДЫ 1 1 Рис. 2.8. Информация о сос- тоянии, подаваемая на вы- воды SO и S1. переход к требуемой подпрограмме, т. е. подпрограмме обслуживания соот- ветствующего периферийного устрой- ства для последующей обработки за- проса прерывания. С другой стороны, сигнал прерывания TRAP(H) (преры- вание в непредвиденной ситуации) обычно не маскируется, т. е. соответст- вующий вход МП всегда находится в состоянии разрешения прерывания. При наличии сигнала TRAP могут быть выполнены действия, необходи- мые, например, для сохранения резуль- татов и перевода МП в режим HALT (останова). Таким образом, в случае появления сигнала TRAP команда «разрешение прерывания» не требуется. В нормальном режиме запроса на прерывание МП обычно находится в состоянии ожидания, которое можно инициировать командой EI (разрешение прерывания). Вывести МП из состоя- ния ожидания можно с помощью команды DI (запрет преры- вания). МП 8085А располагает набором внешних контактов последо- вательного ввода и вывода информации, которые позволяют с помощью специальной программы вывести последовательно из МП параллельный набор битов или ввести в МП последователь- ный набор битов и преобразовать его в параллельный набор. Такое преобразование требуется, если необходимо передавать данные по одной линии, например, в процессе обмена данными (см. т. 3, гл. 4). Для этой цели служат выводы МП 8085А, обо- значенные SID(H) и SOD(H). Связь МП с внешними схемами осуществляется через буфе- ры, которые обеспечивают эффективное управление схемами типа ТТЛШ. Кроме указанных выше регистров для временного хранения данных, в структурной схеме МП имеются регистр указателя стека и счетчик программ. Указатель стека сообщает, по како- му адресу стекового ЗУ, т. е. в зарезервированной части ЗУПВ, записан последний байт. Стековое ЗУ используется для быстрого извлечения одного или нескольких байтов, не прибе- гая к явной адресации. В счетчике программ производится подсчет адресов команд программы во время выполнения вычислений. Инкрементор (декрементор) осуществляет автоматическое увеличение (уменьшение) содержимого указателя стека в зависимости от но- мера выполняемой команды. С регистром команд соединен де- шифратор, предназначенный для выбора источников и приемки-
ЭВМ 75 ков, а также операций АЛУ, которое управляется соответствую- щими тактовыми сигналами (машинными циклами), выраба- тываемыми в устройстве управления. 2.10. Тактирование Команды МП (макрокоманды) состоят из различных «внутренних» специальных команд—микрокоманд, порядок вы- полнения которых зависит от типа команды. Этот порядок оп- ределяется внутренней управляющей схемой (контроллером), т. е. управляющим органом, реализованным в виде двоичного счетчика, который обычно работает в коде Грея, т. е. в двоич- ном коде, последовательные значения которого отличаются только в одном разряде. Такая схема управляется временными сигналами, которые выдает тактовый генератор. Мы уже не- сколько раз упоминали эту управляющую схему, в частности в примере, где двоичный счетчик применялся для управления работой автоматической стиральной машины. В этом примере приращение содержимого счетчика при пере- ходе от одного состояния к другому определяется переменными, которые содержат информацию о длительности процесса. На- пример, когда управление нагревом барабана передается управ- ляющей схеме, одно состояние сменяет другое только после того, как температура воды в барабане достигнет определенной ве- личины. В контроллере МП происходит то же самое, только здесь приращение содержимого счетчика обеспечивают временные сиг- налы, так как продолжительность определенных операций, та- ких, как передача данных, известна заранее, потому что скорость передачи данных по соответствующим каналам измеряется до- статочно точно. Переход от одного состояния счетчика к другому вызывается приращением содержимого счетчика и тогда, когда, например, возникает состояние ожидания в процессе выполнения операции при обращении к ЗУ. Медленная реакция на запрос о получении информации свя- зана с тем, что МП вынужден ждать в течение определенного времени, прежде чем запрашиваемые данные появятся на вы- ходе ЗУ. При этом контроллер не переходит к следующему шагу, а находится в состоянии ожидания до тех пор, пока из ЗУ не будет получен сигнал READY (готов). Имеется ряд команд, которые нарушают регулярное изменение содержимого этого счетчика. Эта ситуация возникает в случае команд с определен- ным числом специальных операций, например внутренних пере- дач. При выполнении такой команды обращение к внешнему ЗУ не требуется и специальные операции выполняются быстрее.
76 Глава 2 В таких случаях контроллер можно сбросить в нуль (состоя- ние 0). В ходе изменения содержимого счетчика могут возникать и ветвления, если некоторые специальные операции, которые инициируются определенными состояниями счетчика, оказыва- ются нежелательными. За счет повторения контроллер может пройти ряд состояний, как в случае повторяющихся специаль- ных операций. Подобные повторения, когда в действительности происходят последовательные переходы к предыдущим состоя- ниям, имеют место при умножении или делении, так как эти операции всегда являются комбинациями операций сложения и сдвига или вычитания и сдвига соответственно. При умноже- нии подпрограмма или цикл прерываются после нескольких ша- гов сложения, а при делении это происходит тогда, когда оста- ток становится равным нулю или изменяет знак. МП 8085А не имеет этих команд, однако в настоящее время известны МП, та- кие, как Z8000, 8086 и 68000, которые имеют команды умноже- ния и деления в аппаратурном исполнении. Цикл управления контроллера начинается в МП с вызова команды из программного ЗУ. Во время первого этапа произ- водится считывание ячейки ЗУ, адрес которой указан в счетчике команд. Байт считанной команды передается в регистр команд для последующей интерпретации. Во время интерпретации МП устанавливает длину команды — один, два или три байта и на основе этого параметра определяет последовательность дальней- ших шагов операций, а также узнает, какие состояния контрол- лера будут при этом использованы. В МП 8085А шаги операций происходят в пределах так назы- ваемого машинного цикла. Выборка команды в зависимости от типа команды требует от одного до трех машинных циклов. За- тем устанавливается длина соответствующей команды — один, два или три байта. Если машинный цикл определяется состоя- нием контроллера, то первые три состояния контроллера резер- вируются под выборку команды. Так как в состоянии 1 счетчика происходит интерпретация команды, то в состояниях 2 и 3 долж- но произойти приращение содержимого счетчика команд, что- бы в случае двухбайтовых и трехбайтовых команд можно было обращаться к соответствующим последовательным адресам ЗУ. После считывания команды можно приступить к исполнению требуемой операции. В зависимости от взаимодействия с ЗУ, ко- торое необходимо на шаге исполнения, эта специальная выпол- няемая операция может включать большое число машинных циклов. Такая информация связана с особенностью данной команды. В исполнительных состояниях контроллера вырабаты- ваются временные сигналы, которые вместе с дешифрованными битами команд активизируют такие исполнительные органы, как
ЭВМ 77 регистры, АЛУ и порты ввода-вывода, используемые при выпол- нении операций обработки данных, считывания и передачи дан- ных. Эти сигналы управления передаются по управляющей шине, которая соединяет внутри МП различные регистры и ЦП. Ряд сигналов выдается из МП для управления работой внешних схем, таких, как ЗУ и порты ввода-вывода. Такими сигналами являются уже упоминавшиеся выше управляющие сигналы RD(L), WR(L) и 10(H)/M(L). Если какая-либо команда име- ет отношение к операциям АЛУ, то происходит активизация уп- равляющих шин АЛУ и определенная комбинация соответст- вующего временного сигнала и сигнала, полученного после де- шифрации битового АЛУ-поля в команде, в надлежащий мо- мент времени запускает АЛУ для выполнения указанных выше выбранных операций. Контроллер вместе с регистром команд реализует микропро- грамму для МП. Здесь микропрограммирование осуществляется не с помощью ПЗУ и устройства задания последовательности (УЗП), как в случае ЭВМ с разрядно-модульной организацией, а схемами контроллера, регистра команд, счетчика команд, АЛУ и регистрами данных. Здесь мы имеем дело с программировани- ем при помощи аппаратурных средств в противоположность мик- ропрограммированию в случае интерпретаторов с разрядно-мо- дульной организацией. Разумеется, работа АЛУ также программируется с помощью соответствующих аппаратурно-реализованных связей. Это про- граммирование осуществляется на более низком иерархическом уровне и может быть названо нанопрограммированием. Для описания различных операций внутри МП фирма-изго- товитель предлагает временные диаграммы, из которых схемо- техник может получить необходимые данные. Пример такой диа- граммы приведен на рис. 2.9. Эта диаграмма описывает ход вы- полнения двубайтовой команды, которая занимает три машин- ных цикла. В первом машинном цикле Ml производится выбор- ка команды. В этом же цикле осуществляется адресация про- граммного ЗУ по шине адресов (старший байт) и шине данных (младший байт команды) при подаче сигнала ALE, после чего с помощью сигнала RD(L) происходит считывание соответст- вующего байта программы. Из этой временной диаграммы видно, что за счет мультиплексирования шины данных через группу из восьми выводов двухрядного корпуса (типа DIL) пер- выми передаются биты адреса для адресации ЗУ и затем через те же восемь выводов производится считывание данных под уп- равлением команды RD(L). Команды чтения и записи обозна- чаются на диаграмме как RD(L) и WR(L) соответственно. Сигнал IO(H)/M(L), который выдает МП, сообщает, с ка- ким устройством будет поддерживать связь МП. Если сигнал
78 Глава 2 Рис. 2.9. Временная диаграмма циклов вызова команды и записи данных (двухбайтовая команда вывода МП 8085А). Ml имеет длительность 1, 33 мкс, М2 и М3 — по 1 мкс. Длительность машинного такта составляет 333 нс (fK=3 МГц). Указанные значения обеспечиваются при использовании 6 МГЦ- кристалла кварца. 10(H)/M(L) имеет высокий уровень, то МП будет осуществлять связь с портами ввода-вывода, если же сигнал IO(H)/M(L) имеет низкий уровень, то на связь вызывается ЗУ. Таким обра- зом, каждый машинный цикл имеет две фазы — фазу адресации и фазу обмена данными. Сигналы RD(L) и WR(L) определяют, что именно будет считано или записано во время этого обмена. Сигналы состояния, которые появляются на выходе МП, мо- гут понадобиться для того, чтобы сообщить внешним схемам, какие действия были выполнены ими и что МП находится в ре- жиме HALT (останова). В этом режиме МП генерирует коман- ду останова (HLT), после чего прекращаются все операции. Команда HLT используется, в частности, для окончания про- граммы. 2.11. Минимальная конфигурация МП Как показано выше, МП реализует вычислительную функ- цию в комбинации с программным и оперативным ЗУ, а также портами ввода-вывода, которые обеспечивают связь с внешними
ЭВМ 79 устройствами. Такая минимальная конфигурация, в которой ис- пользуется МП типа 8085А, приведена на рис. 2.10. Для сов- местной адресации ЗУ и портов ввода-вывода МП вырабаты- вает 16 адресных сигналов, которые через шину адресов (16 сиг- нальных линий) подаются как в ЗУ, так и в порты ввода-выво- да. Эта шина адресов показана в схеме в виде широкой по- лоски. Так как младший байт адреса выдается из МП по шине дан- ных, то для хранения этого байта требуется регистр, который обеспечивает полный 16-разрядный адрес в течение оставшейся части машинного цикла. На рис. 2.10 этот регистр представлен интегральной схемой типа 8212. Передача адресной информа- ции по шине данных МП 8085А производится сигналом ALE (Н). С помощью шины адресов и шины данных осуществляется двусторонний обмен данными между ЗУ, портами ввода-выво- да и МП. Для записи и считывания данных используются сиг- налы WR(L) и RD(L). С помощью сигнала IO(H)/M(L) можно указать, какое именно устройство связано с передачей данных. Если сигнал IO(H)/M(L) имеет высокий уровень, то МП будет связан с портами ввода-вывода, если же сигнал IO(H)/M(L) имеет низкий уровень, то разрешение связи по CS(L)-входу (выбор кристалла) получит ЗУ. Информация, которая поступает в порты ввода-вывода, пе- редается во время генерации сигнала WR(L). Этот сигнал по- является после фиксации входных данных. Предполагается, что в данной схеме ЗУ работает быстрее МП, потому что на входе READY постоянно поддерживается напряжение высокого (Н)-уровня. Сигналы TRAP(H), RSTn(H) и INTA(L) используются в том случае, когда МП должен реагировать на внешнее прерывание. Сигнал HOLD временно приостанавливает МП, если требуется использовать шины адресов, данных и управления для других целей, таких, как передачи данных между ЗУ и внешними уст- ройствами, в которых МП не участвует (режим DMA, Direct Memory Access — прямой доступ к памяти). В HOLD-режиме МП отключает шины адресов и управления. Сигнал HLDA(H) указывает, что МП находится в HOLD-режиме, и сообщает внешним устройствам, что указанные выше шины имеют разре- шение передачи данных. Схема 8-разрядного регистра типа 8212 приведена на рис. 2.11. В дополнение к восьми D-триггерам эта схема содер- жит еще некоторую дополнительную логику для управления считыванием регистров и выдачей данных. Если на стробируе- мом входе STB(H) появляется сигнал ALE(H), то триггеры считывают данные с шины данных. В нормальном режиме дан- ные с тристабильных выходов буферов передаются в триггеры,
Рис. 2.10. МикроЭВМ с МП8085А (минимальная конфигурация). В ИС8212 хранятся адресные биты (младший байт), которые через шину данных вы- водятся из МП 8085А.
Рис. 2.11. Буфер адресов, ИС 8212 с маркировкой выводов. 6—974
<82 Глава 2 за исключением случая, когда МП переходит в HOLD-режим и отключает соответствующие шины. Таким образом, сигнал HLDA(H), связанный с DS(L),обес- печивает отключение выходов ИС 8212, когда МП находится в HOLD-режиме. Из примера, представленного на рис. 2.10, сле- дует, что, кроме ИС ЗУ, используемой МП, в системе имеются также периферийные схемы портов ввода-вывода, которые по- зволяют существенно упростить связь с внешними устройства- ми, такими, как дисковые ЗУ и аппаратура для передачи дан- ных. Число типов периферийных схем, которые используются в качестве ЗУ и портов ввода-вывода, постоянно увеличивается. Во многих случаях в качестве таких периферийных схем приме- няются интерфейсные контроллеры, которые выполняют специ- альные функции связи между МП и внешним ЗУ и, более того, осуществляют синхронизацию между системой и внешними уст- ройствами. После того как ЭВМ загрузила ЗУПВ данными для после- дующего вывода на экран видеодисплея, интерфейсный конт- роллер считывает эти данные и подготавливает их для отобра- жения на экран в виде буквенно-цифровых знаков. Имеется так- же ряд ИС, в которых несколько периферийных устройств рас- положены на одном кристалле. На рис. 2.12 приведена блок- схема микроЭВМ с МП 8085А, с которым связаны ИС 8156 и 8355. ИС 8156 является комбинацией интерфейса типа ЗУПВ — порт ввода-вывода и таймера. ИС 8755 представляет собой СППЗУ с интерфейсом ввод-вывод. В СППЗУ можно хранить программу, а ЗУПВ можно использовать в качестве оператив- ного ЗУ. Таймер предназначен для обеспечения определенных временных интервалов без использования дополнительного про- граммирования. В таком варианте микроЭВМ работает с более высокой эффективностью. Схема деления частоты, на которой основан таймер, управ- ляется синхросигналами МП и программируется с помощью МП. После отсчета требуемого числа синхросигналов счетчик с по- мощью прерывания сообщает, что соответствующий интервал сформирован. Кроме того, можно считывать данные, получен- ные в процессе счета, в МП. Специальные интерфейсные схемы рассмотрены в гл. 5. ЗУ разных типов описаны в гл. 2 т. 3 на- стоящего справочника. Для соединения различных частей микроЭВМ в тех приме- нениях, где требуется не очень высокое быстродействие и рас- стояние между соединяемыми частями невелико ( — 2 м), можно применять стандартный плоский кабель, который выпускается разной ширины для шин данных, адресов и управления. Этот плоский кабель рекомендуется монтировать в разъеме нажим- ного действия, что значительно сокращает время монтажа.
ЭВМ 83 Рис. 2.12. МикроЭВМ с МП 8085А, ИС 8156 и ИС 8355/8755А.
384 Глава 2 Плоский кабель довольно легко разъединяется на части необхо- димой ширины, если это требуется по условиям применения, -а разъем крепится на конце такого кабеля с помощью за- жимов. Системотехник имеет в своем распоряжении не только специ- фические периферийные схемы, предназначенные для опреде- ленных применений, но и устройства, входящие в состав таких семейств логических элементов и компонентов, как ТТЛ и КМОП. Например, к ТТЛ-семейству относятся двунаправленные буферные схемы, например 74LS244, которые могут служить в качестве интерфейса между МП и кабельным соединением, защищая систему от повреждений при коротких замыканиях в кабелях. Кроме того, буферы обеспечивают более высокую выходную мощность, чем получаемая на МП-выходах адресов, данных и управления, так что при использовании таких буферов можно применять соединительные кабели большей длины. Дву- направленные буферы увеличивают коэффициент ветвления по выходу. К ТТЛШ-семейству относятся также универсальные 8-раз- рядные регистры с D-триггерами, причем как «прозрачные», так и запускаемые по фронту. Эти триггеры совместно с буферами с тристабильными выходами используются для отсоединения шин. При обсуждении практической схемы микроЭВМ мы еще вернемся к подобным ТТЛШ-схемам. Выходной регистр, загруженный одним байтом из микроЭВМ, не может, например, активизировать какой-либо логический эле- мент. Для управления этим элементом нужно усилить сигнал 1 или 0 до определенного уровня мощности. Как было показано в главе, посвященной интерфейсам (т. 3), для повышения мощ- ности сигналов микроЭВМ можно использовать усилители, та- кие, как ULN2003, на выходе которых имеется мощный транзи- стор. Требуемый электрический интерфейс между вычислитель- ной системой и управляемым процессом можно также обеспе- чить, применяя оптические элементы связи. С выходным регист- ром соединен цифро-аналоговый преобразователь (ЦАП), кото- рый преобразует числовые значения одного или нескольких бай- тов в аналоговые уровни напряжения. Оптические элементы связи можно применять и для ввода данных. При этом можно передавать и аналоговый сигнал через эти элементы, преобра- зовать его с помощью аналого-цифрового преобразователя (АЦП) в один байт, который затем считывается в микроЭВМ. Выше уже обсуждалась проблема управления игрушечной железной дорогой с помощью микроЭВМ. В этом случае желез- нодорожные перегоны обслуживаются с помощью битов выход- ного регистра. Этот регистр загружается микроЭВМ, и усилите- ли обеспечивают определенный режим работы перегона, стрел-
ЭВМ 85 ки и светофора. Состояние всей дороги определяется при помо- щи диода, на котором возникает падение напряжения в том слу- чае, когда в соответствующей схеме управления перегоном, стрелкой или светофором протекает ток. Это падение напряже- ния преобразуется в Н-уровень ТТЛ-элементов (логическая 1) и считывается входным портом как один из многих битов, кото- рые обеспечивает схема управления железной дороги. На основе поступающих извне данных микроЭВМ решает, какую операцию необходимо выполнить, и передает соответствующий сигнал че- рез выходные порты на исполнительные устройства железной дороги. При управлении игрушечной железной дорогой с помощью микроЭВМ в самом начале, особенно если программирование освоено еще недостаточно надежно, можно использовать метод, согласно которому на основе сравнения реальных ситуаций, возникающих на железной дороге, с запрограммированными си- туациями должна производиться коррекция программы управ- ления движением. На практике это сводится к тому, что в случае запрограммированных ситуаций требуется выполнить ряд дей- ствий, которые для конкретной ситуации являются оптимальны- ми. Там, где наблюдаются небольшие отклонения от заданной программы, соответствующая операция тем не менее доводится до конца; при этом фиксируются замеченные отклонения в ре- шении проблемы движения по железной дороге. Эти отклонения обнаруживаются не на уровне управления конкретным режимом работы железной дороги, а на уровне констатации различий между этим режимом и запрограммированным режимом. 2.12. Ручное управление Как уже отмечалось в предыдущих разделах, микроЭВМ не имеет ручного управления для проверки программ вычислений. В схемах микроЭВМ предусмотрена только установка в исход- ное состояние, так что можно запускать или перезапускать про- грамму, начиная только с нулевого адреса. Прежде чем перейти к блок-схеме управления, необходимо сначала, по всей вероятности, выяснить назначение ручного уп- равления. Пульт ручного управления, под которым подразуме- вается схема ручного управления, должен обеспечить поэтапное прохождение программы и контроль правильности выполнения всех команд. Далее нужно иметь возможность считывать ин- формацию из ЗУ или записывать ее в ЗУ без вмешательства МП. Другими словами, должна быть обеспечена возможность переводить МП в режим HOLD, чтобы отключать шины дан- ных, адресов и управления. Кроме того, нужно уметь останав- ливать МП в состояниях с определенным адресом. Такой режимв
86 Глава 2 например, требуется в том случае, когда проверена некоторая часть программы и необходимо быстро выполнить «прогон» этой части после возврата в исходное состояние (с нулевого адреса). Начиная с адреса останова, можно продолжить проверку про- граммы в шаговом режиме отладки. Желательно также иметь возможность останова в тех случа- ях, когда определенная команда считывается из ЗУ, особенна если программа записана в определенных ячейках ЗУ. Когда программа уже помещена в ППЗУ, этот режим не реализуется, однако он возможен на промежуточном этапе отладки, когда проверяемая программа введена в ЗУПВ. В связи с этим уже отмечалось, что в такой ситуации ЗУПВ, которое временно ис- пользуется в качестве программного ЗУ, следует заблокировать относительно записи с помощью специального переключателя. В частности, сдвоенный переключатель позволяет соединить внешний вывод записи ЗУПВ с шиной управления, в результате чего на этот вывод будет подано напряжение Н-уровня, причем ЗУПВ будет все время работать в режиме чтения. При необхо- димости внести какие-либо изменения в программу, хранящую- ся в ЗУПВ, этот переключатель следует сначала переключить. После ввода необходимых слов в ЗУПВ переключатель возвра- щается в исходное состояние. В источнике питания ЗУПВ должна быть предусмотрена до- полнительная батарея, чтобы при аварийном выключении сете- вого напряжения не произошла потеря информации, хранящей- ся в ЗУПВ. В обычном режиме применяется выпрямитель сете- вого напряжения. Если напряжение питания сильно понижается, с помощью схемы ИЛИ происходит переключение в режим пи- тания от аккумулятора или сухой батареи. В случае перебоев в подаче сетевого напряжения в течение одного периода частоты 50 Гц можно использовать электроли- тический конденсатор большой емкости, который включается после выпрямителя (эффект сглаживания). Этот конденсатор действует как резервуар, который позволяет скомпенсировать уменьшение напряжения питания в течение коротких временных промежутков. Возвращаясь к пульту ручного управления, можно констати- ровать, что он должен обеспечивать возможность пошагового выполнения программы (ступенчатый режим). Кроме того, он должен останавливать программу в случае совпадения опре- деленных данных или адресов и, наконец, обеспечивать вы- бор ЗУ в режимах исполнения, считывания и записи. С по- мощью ручных переключателей и шестнадцатеричной клавиату- ры данные и выбираемые адреса должны вводиться по команде, инициируемой сигналом загрузки, который генерируется при на- жатии соответствующей клавиши. При считывании необходимо
ЭВМ 87 иметь возможность проверить адрес, по которому производится считывание, а также данные, которые хранятся по этому адре- су, при помощи индивидуальных индикаторных светодиодов или шестнадцатеричного дисплея. Так как счетчик команд указывает адрес выбираемой коман- ды, то выводя на экран дисплея содержимое этого счетчика, мы будем знать, в каком состоянии находится микроЭВМ при вы- полнении операций, указанных в программе. Рис. 2.13. Отладочный комплекс типа РМ 4421 (фирма Philips). На рис. 2.13 приведена фотография отладочного комплекса типа РМ4421 фирмы Philips. Этот комплекс обеспечивает мо- делирование и эмуляцию различных типов МП и родственных им схем. В тех применениях, где такой комплекс заменяет МП оп- ределенного типа с ЗУ и портами ввода-вывода, имеет место режим так называемой схемной эмуляции. При этом можно провести испытания МП для специального применения в отно- шении как программного, так и аппаратурного обеспечения, после чего его можно передавать в массовое производство. При оценке качества программного обеспечения имеется возмож- ность моделирования требуемого аппаратурного обеспечения. В случае схемной эмуляции, которая по существу представ- ляет собой имитацию, соответствующий МП помещается в от-
88 Глава 2 Рис. 2.14. Схемная эмуляция. Эмулируемый МП, в данном случае МП 8085А, связан с главной микроЭВМ, которая располагает всеми средствами ввода и вывода данных. Программное и аппаратурное обеспечение разрабатывав* мой системы оцениваются в режиме «схемной» эмуляции быстро и эффек- тивно. ладонный комплекс, т. е. этот МП и процессор, который явля- ется частью эмулирующего отладочного комплекса, используют- ся вместе с ЗУ и портами ввода-вывода. В действительности эмулируемый МП связан с внутренними шинами данных, адре- сов и управления отладочного комплекса (рис. 2.14). Таким образом, здесь внутренний процессор и МП использу- ют общее ЗУ, в результате чего с помощью главного процессо- ра можно изменить программу МП. Вначале можно ввести в МП полную программу из главной микроЭВМ, оборудованной всеми необходимыми устройствами, такими, как видеодисплей, дисковое ЗУ, клавиатура и принтер. Этому МП выделяется
ЭВМ 89 Рис. 2.15. Схемная эмуляция. Эмулируемая микроЭВМ (МП, ЗУ и порты ввода-вывода) находится в системе, которая с помощью плоского кабеля связана с разрабатываемым аппаратурным обеспечением (периферийными схемами). Здесь также программное и аппаратурное обеспечение эмулиру- ется быстро и эффективно, так как система имеет все средства для ввода исправлений в программу и для того, чтобы при отладке программы обеспе- чивался пошаговый или поблочный режим. часть ЗУ, в которую может записывать информацию главная микроЭВМ. Если главная микроЭВМ оборудована устройства- ми для останова при совпадении данных или адресов, то это позволяет останавливать эмулирующий МП в ячейке с опреде- ленным адресом и в случае появления определенной конфигура- ции данных на шине данных. Этими остановами на совпадение можно управлять как с клавиатуры, так и при помощи текста программы. Другими словами, можно ввести в главную часть отладочного комплекса тестовую и отладочную программы, снаб- женные всеми необходимыми дополнительными средствами, и затем проверить с их помощью главный МП вместе с его про- граммным обеспечением. При использовании схемных эмуляторов с ограниченными возможностями в отладочном комплексе располагается только эмулируемый МП с ЗУ и портами ввода-вывода (рис. 2.15). В подобной эмулирующей схеме программа испытываемой си-
90 Глава 2 стемы изменяется с пульта ручного управления с видеодиспле- ем. Главная микроЭВМ с программным обеспечением при ис- пытании разрабатываемой системы не используется. Пульт руч- ного управления обеспечивает для ЗУ исследуемого МП режимы считывания и записи информации, а также тестирования и по- иска ошибок в программном обеспечении. Через эмулирующую схему можно присоединить видеодисплей, который делает «ви- димыми» те части программы, которые необходимо проверять. Если требуется большое число различных средств прежде всего из области программного обеспечения, в отладочный комплекс обычно вводится вторая микроЭВМ, предназначенная для управления ходом выполнения различных операций. За счет взаимной связи двух микроЭВМ через общее ЗУ автоматически возникает конфигурация схемного эмулятора с теми возможно- стями, которые обеспечивает, например, РМ4421. Пульт ручного управления, который подробнее будет описан в гл. 4, относится к разряду отладочных комплексов с ограни- ченными возможностями. Этот комплекс может служить в каче- стве базовой ЭВМ для многих применений, таких, как управле- ние игрушечными железными дорогами, домашняя телефонная станция и т. д. С помощью простых отладочных комплексов можно моделировать с достаточно высокой эффективностью си- стемы управления для автомобилей и автозаправочных станций, устройств с цифровым управлением, таких, как стиральные ма- шины, швейные машины и т. д., а также игральных аппаратов и различной бытовой электронной аппаратуры — короче говоря, эти комплексы позволяют моделировать МП с ограниченным программным и аппаратурным обеспечением. По окончании тестирования и отладки комплекс заменяется на МП с требуемой конфигурацией и самыми необходимыми органами управления, после чего отработанная система пере- дается в массовое производство. Для каждой системы обработ- ки данных при заданном типе МП используется одна и та же базовая конфигурация МП, ЗУ и портов ввода-вывода, а ем- кость ЗУ и количество портов ввода-вывода устанавливаются в соответствии с требованиями к системе. Программирование, или, другими словами, программное обеспечение, определяет функцию системы и особенности кон- кретных применений. Периферийные схемы различаются в за- висимости от области применения, при этом имеются в виду различные датчики измеряемых величин и управляющие схемы. 2.13. Монитор Как уже отмечалось выше, управление МП выполняется не только с помощью аппаратуры, например пульта ручного управ- ления. Программное обеспечение также позволяет реализовать
ЭВМ 91 ряд специальных функций управления. Та часть программы, ко- торая обеспечивает эти дополнительные возможности управле- ния ЭВМ, называется программой-монитором или просто мони- тором. При вводе данных обычно применяется шестнадцатеричная или буквенно-цифровая клавиатура, к которой добавлен ряд клавиш для реализации специальных команд. Считывание дан- ных производится с помощью шестнадцатеричного или буквен- но-цифрового дисплея и видеодисплея, расположенных на уп- равляющей панели. Для размещения программы-монитора в небольших системах отводится объем ЗУ, равный 2К8 байт. С помощью этой про- граммы можно, используя соответствующие команды с клавиа- туры, выполнять такие операции, как считывание из ЗУ и за- пись в ЗУ с автоматическим приращением адреса и последова- тельным заполнением ячеек ЗУ различными константами. Кро- ме того, монитор обеспечивает передачу данных между порта- ми ввода-вывода и кассетным матнитофоном, инициирование программы с возможностью одного или нескольких прерываний в случае остановов, вызванных совпадениями данных и адре- сов, и, конечно, пошаговое выполнение программы вычислений. 2.14. Однокристальные микроЭВМ Однокристальная микроЭВМ состоит из МП, ПЗУ и ОЗУ, размещенных на одном кристалле. Кроме того, на одном кри- сталле часто располагаются порты ввода-вывода, а также счет- чик/таймер. В общем случае однокристальные микроЭВМ имеют ограни- ченный набор команд по крайней мере по сравнению с универ- сальными МП, причем эти команды ориентированы на примене- ния, для которых существенны различные операции с битами. В таких областях, как обработка данных, регулировка уличного движения, управление различными процессами и числовое уп- равление станками, важную роль играют управляющие схемы. Однокристальная микроЭВМ находит также применение в ка- честве управляющего и контролирующего органа в автомобилях и игральных автоматах. В продаже имеются различные варианты однокристальных микроЭВМ с ПЗУ или СППЗУ и внешними программными ЗУ. Кроме того, имеется возможность расширения ЗУ и портов вво- да-вывода с помощью дополнительных ИС, а также присоедине- ния других специальных схем (периферийных устройств), таких, как программируемый интерфейс связи, интерфейс для связи с клавиатурой и дисплеем, короче говоря, схем, которые имеют- ся в универсальной микроЭВМ.
92 Глава 2 Кроме семейства однокристальных микроЭВМ серии MCS-48 фирмы Intel имеется еще серия однокристальных мик- роЭВМ, которая выполняет роль универсального периферийно- го интерфейса, а именно серия микроЭВМ/контроллеров, кото- рая программируется в качестве интерфейса для таких систем, как МП 8080, 8085 и 8086. Как уже отмечалось выше, для этих МП разработаны специальные периферийные схемы, располо- женные на одном кристалле, такие, как ИС 8251, т. е. про- граммируемый интерфейс связи, а также схемы, которые реа- лизуют функции управления и арбитража. Здесь можно на- звать также контроллеры для устройств с гибкими и фиксиро- ванными дисками. Таким образом, функции такого рода реализуются с по- мощью однокристальных микроЭВМ семейства универсальных периферийных интерфейсов. Часто используются однокристаль- ные микроЭВМ, которые реализуют одну определенную функ- цию и которые программируются фирмами — изготовителями ИС. Такие ИС содержат программу выполнения соответствую- щей функции, однако в действительности являются «настоящи- ми» микроЭВМ, например микроЭВМ серии UPI-41. Пользо- ватель, однако, об этом ничего не знает. Эти универсальные периферийные интерфейсные микроЭВМ также применяются в различных вариантах с ПЗУ или СППЗУ, с портами ввода- вывода и без них; при этом они часто допускают расширение объема как ПЗУ, так и ЗУПВ. 2.15. Блок-схема однокристальной микроЭВМ На рис. 2.16 приведена блок-схема однокристальной мик- роЭВМ типа 8048 фирмы Intel, которую также изготавливает фирма Philips-Signetics. Для передачи данных и адресов в кристалле применяется внутренняя 8-разрядная шина, которая обеспечивает режим временного мультиплексирования. К этой шине присоединены все функциональные схемы, которые также связаны между собой, такие, как резидентные (находящиеся на кристалле) ПЗУ и ЗУПВ, МП и порты ввода-вывода с но- мерами от 0 до 2. Режимы управления и тактирования системы, показанные на схеме внизу, определяются внешними сигналами, такими, как сигналы прерывания, сброса в нуль, разделения ЦП/ЗУ и поэтапного режима работы. ЕА и PROGR являются сигнала- ми, которые используются для программирования СППЗУ, а также эмуляции и поиска ошибок, т. е. тестирования и провер- ки применяемой программы. Кроме того, данная управляющая система обеспечивает сигналы типа RD и WR для управления внешним ЗУ и внешними портами ввода-вывода.
ЭВМ 93 Процедура программирования с использованием програм- матора состоит из следующих фаз: адресации слова, запоми- нания соответствующего адреса, ввода данных и инициирова- ния передачи данных импульсом программатора. Эта процеду- ра рекомендуется только для ИС типа 8748 с СППЗУ «на кри- сталле». В ИС типа 8048 используется ПЗУ в качестве про- граммного ЗУ. По окончании программирования и проверки одного слова» происходит обращение к другому адресу. С помощью вывода TEST 0 производится выбор режима программирования илв проверки. Ввод и вывод данных и адресной информации осуществля- ют двунаправленные буферы (порт 0), управляемые сигналами RD, WR и ALE, т. е. сигналами от D0 до D7 включительно. Эти входы и выходы используются для программирование СППЗУ, тогда как в рабочем режиме порт 0 обеспечивает связь с внешним ЗУ. Двунаправленный буфер может также служить для адресации внешних портов и загрузки их данны- ми или же для считывания данных из этих портов. В резидент- ном ЗУ с 64 ячейками для хранения данных восемь ячеек вы- делены для использования различными командами в качестве рабочих регистров с прямой адресацией. Так как адреса этих ячеек короткие, они в основном применяются для хранения* промежуточных результатов. Эти регистры эффективно приме- няются, например, в качестве счетчиков при организации^ программных циклов. Уменьшение номера цикла и проверка содержимого счетчика осуществляются с помощью соответству- ющей команды. Ячейки 8—23 ЗУ можно использовать в качестве стекового или обычного пользовательского ЗУ, а обращение к ячейкам 24—31 возможно с помощью отдельных команд, если предва- рительно используется команда SEL RB (переключение банкам регистров). Эту группу ячеек можно рассматривать как про- должение регистров, занимающих ячейки 0—7. Однокристальная микроЭВМ 8048 (8748) имеет 27 линий,,, которые можно использовать для ввода и вывода информации. Три линии служат в качестве контрольных входов, на которые? можно подавать данные, влияющие на ход выполнения про- граммы аналогично флажковым битам в универсальных МП. Входные и выходные линии портов ввода-вывода 1 и 2 яв- ляются двунаправленными и выполняют функцию запоминания при выводе данных (режим статического фиксатора). Подроб- ная схема порта ввода-вывода для одной из сигнальных линий приведена на рис. 2.17. При поступлении команды D-триггер сбрасывается в нуль, с помощью сигнала записи. Выходы триггера связаны через*
Глава 2 Порт 2, буфер шины Порт 2, иши&аХи. запоминаю- 4 $игпа)ирас- щии(старш. ширение 1/0 \ 4 бита) Порт 2, 4 бита) Счетчик команд (старш.4бита) СППЗУ/ПЗУ >на кристалле 1К8 4 4 8 4 Дешифрирование &иератора~1 480 Тест) ма временной развертки (8) Счетчик команд (младший байт) (8) Аккумулятор ___SZ____ Временный регистр (8) Флажковые биты ____XZ— ... -г\ Фиксатор у аккумулятора исс Питание------ Uss ~--рр» Программирование + 5В (резервный источник питания малой мощности) Земля Десятичные вычисления Рис. 2.16. Блок-схема однокристальной микроЭВМ типа 8748 (с СППЗУ). <4С 8048 имеет резидентное ПЗУ, содержимое которого обеспечивается фир- мой-изготовителем на конечной стадии изготовления.
ЭВМ 95 /ч Расширение Г ввода-вывода 8 и ЗУ (i/o) Порт О, буфер шины Порт О,запоминающий] и временный регистры счетчика команд (младший байт) Слово состояния программы Порт /, буфер Л шины и у фикса- тор Логика условных переходов Регистр адресов ЗУПВ в <—ТестО < —Тест 1 < —INT ___Флажковый * бит О __Флажковый бит 1 • *— Флажковый бит таймера - *— Перенос "•--Аккумулятор Sj Тест битов аккумулятора [мультиплексор Регистр О Регистр 1 Регистр 2 Регистр з Регистр 4 Регистр 5 Регистр 6 Регистр 7 Стек регистров, 8 уровней (пере- меннаядлина) Резервный вто- рой банк регистров ЗУ данных ЗУПВ на кристалле 64 Кв & 5 МОП-транзисторы с клеммой ввода-вывода, что позволяет передавать данные наружу. При появлении сигнала записи верхний МОП-транзистор переходит в проводящее состояние, обеспечивая на выходной линии Ь->Н-перепад (0->1). Нижний МОП-транзистор обеспечивает мощность, достаточ- ную для управления портом, реализованным при помощи ТТЛ- схем. После переключения входного порта под действием команды ввода информации в схему записывается 1, которая переводит триггер в состояние 1 (Н-уровень). При выполнении
se Глава 2 Рис. 2.17. Квазидвунаправленная структура порта. «подобной команды этот режим обеспечивается автоматически. Буфер, находящийся между входами и выходами D-триггера а управляемый командами ORI и ANI, обеспечивает выполне- ние операций И или ИЛИ над содержимым выходного регист- ра с помощью битовых масок, указанных в этих командах, или же набора битов в аккумуляторе. Соответствующая шина связана через порт 0 с двунаправленным буфером, который ак- тивизируется входными и выходными стробами для подтверж- дения правильности данных. Если двунаправленная функция буфера не используется, то порт 0 может служить либо в ка- честве регистра при выводе данных, либо в качестве группы входных усилителей. Лучшие однокристальные МП снабжаются цифровыми счет- ииками/таймерами для подсчета событий и генерации точных временных интервалов. В результате отпадает необходимость в обеспечении таких подсчетов и временных интервалов при помощи программных циклов, т. е. микроЭВМ используется более эффективно. Для реализации функций таймера и счетчика применяется один и тот же 8-разрядный счетчик. Возможность такого ком- бинированного режима следует из дальнейшего анализа. Ес- ли 8-разрядный счетчик используется в качестве счетчика со- бытий, то в определенный момент времени Ti на вход счетчика
ЭВМ 97 подается разрешающий импульс, который обеспечивает режим счета внешних импульсов (событий). Начало определяется командой START CNT, для останова счета применяется команда STOP TCNT. Программное считывание состояния счетчика осуществляется с помощью команды MOV А,Т. При превышении максимального состояния 8-разрядного счетчика, т. е. 255 или FFi6, происходит сброс в нуль триггера переполнения и одновременно выдается запрос на прерывание. Таким способом можно сообщить программе о том, что счет- чик достиг максимального счетного состояния. Разумеется, при этом операция счета не нарушается, а продолжается далее, на- чиная вновь с нулевого счетного состояния счетчика. Програм- ма запоминает, сколько раз было зафиксировано переполнение, и, после того как счет прекратится и будет определено послед- нее состояние счетчика, она может установить общее число со- считанных импульсов. Счетчик остается в состоянии STOP до тех пор, пока не будет подана новая команда START CNT. Во время счета микроЭВМ должна «слышать» сигнал прерывания. Состояние флажка переполнения следует проверять с помощью условного перехода, в частности в ИС 8048, с помощью коман- ды JTF. Этот флажок должен быть сброшен в нуль либо после выполнения этого перехода, либо по команде RESET (сброс). В таком режиме частота счета ИС 8048 имеет верхний пре- дел, а именно на каждые три командных цикла (7,5 мкс в случае бМГц-кристалла) можно зарегистрировать только од- но событие. Длительность импульса события должна быть ^100 нс. События будут сосчитаны во время Н->Ь-перепада на выводе Т1. Счетчик используется в качестве интервального таймера следующим образом. С помощью команды MOV Т,А счетчик устанавливается в любое требуемое состояние. После того как сигнал START Т запустит счетчик, вход счетчика будет связан с внутренним генератором синхросигналов, после чего начнет- ся счет этих сигналов. Этот счет будет продолжаться до тех пор, пока не возникнет переполнение, что снова приведет к прерыванию. Программа будет реагировать на него сигна- лом STOP. Отсчет числа синхросигналов от запрограммирован- ного счетного состояния до максимального счетного состояния FF выполняется в точно заданном временном интервале. Дли- на этого интервала определяется содержимым счетчика, кото- рое устанавливается и контролируется программным способом. В таком режиме работы можно обеспечить любой требуемый интервал времени. Внутренний генератор запускается сигналом ALE, который формируется из сигналов машинного 400 кГц-цикла при помо- щи предварительного счетчика с коэффициентом пересчета,
98 Глава 2 равным 32. Этот счетчик сбрасывается в нуль в момент по- явления команды START Т. Полученный после пересчета сиг- нал с частотой 12,5 кГц увеличивает содержимое счетчика че- рез каждые 80 мкс. Различные задержки, лежащие между 80 мкс и 20 мс (пересчет на 256), можно получить путем пред- варительного программирования работы счетчика и регистра переполнения. Времена задержки более 20 мс могут быть реализованы программным способом за счет суммирования переполнений в регистре. Рис. 2.18. Блок-схема таймера/счетчика в ИС 8048. Для получения времен задержек короче 80 мкс можно ис- пользовать сигналы внешней синхронизации, подаваемые на Tl-вход, которые запускают счетчик в режиме счета. Очень короткие времена задержки или точный отсчет более длин- ных времен задержки можно легко обеспечить при помощи программных циклов. На рис. 2.18 приведена принципиальная схема таймера/ /счетчика, применяемая в МП 8048.
Г лава 3 НАБОР КОМАНД МИКРОЭВМ 3.1. Введение Как неоднократно отмечалось в этом справочнике, при создании новой логической функции всегда возникает вопрос о связях между уже известными функциями. В автомате и ЭВМ они реализуются с помощью электрических соединений точно так же, как в комбинационной логике, однако эти связи можно осуществить и программным образом с помощью опре- деленного алгоритма. При последовательной организации выполнения операций в общем случае требуются специальные элементы для хранения промежуточных результатов. В случае комбинационной логики требуемые операции реализуются электрическими соединения- ми, в случае последовательностной логики — программой, хра- нящейся в ЗУ. Конкретные связи между операциями соответ- ствуют информации, которая носит постоянный характер. Оче- видно, что подобные связи жестко определяют выполняемую программу. В предыдущих главах была рассмотрена стираль- ная машина, программа функционального поведения которой реализуется постоянными связями. Последовательность опера- ций, которые должна выполнить машина, определялась управ- ляющими схемами. По окончании каждой операции, выполняе- мой при фиксированном содержимом (состоянии) управляю- щего счетчика, содержимое счетчика увеличивается на 1. Конт- рольные переменные, которые дают определенную информацию о ходе выполнения процесса стирки, например об уровне воды в барабане или ее температуре, существенно влияют на весь процесс стирки. В современных стиральных машинах до сих пор применяются «программы», реализуемые электрическими соединениями. Современные швейные машины, бензиновые на- сосы и другие устройства часто снабжаются микроЭВМ, ко- торые управляют выполнением операций с помощью програм- мы, хранящейся в ПЗУ. Такая программа также обычно зада- ется коммутацией элементов ПЗУ. Функции, которые определяют ход выполнения программы, реализуются в данном случае не макрокоммутацией какого-ли- бо прибора, а микрокоммутацией элементов ПЗУ. При после- дующем управлении каким-либо процессом с помощью ПЗУ
100 Глава 3 можно, заменяя ЗУ, полностью изменить всю программу управ- ления, в то время как макрокоммутация, используемая в самом приборе, останется неизменной. ПЗУ позволяет реализовать большое число разных программ, что является существенным преимуществом, например в случае швейной машинки. Замена программы, определяющей макрокоммутацию, оказывается го- раздо более дорогостоящим мероприятием и требует большого числа дополнительных элементов. В общем случае можно утверждать, что программирование какой-либо функции с по- мощью макрокоммутации всегда будет более трудоемким, чем программирование на уровне микрокоммутации с последова- тельным выполнением отдельных операций. Последовательное выполнение операций является характерной особенностью ЭВМ, поэтому все управляющие функции, реализуемые в про- игрывателе, радио- и телевизионных приемниках и других уст- ройствах, описываются в рамках «компьютерного» подхода. В случаях стиральной машины, «компьютеризованного» про- игрывателя и других устройств речь идет о сложных функцио- нальных схемах, которые выполняют набор специальных опе- раций. Функции, выполняемые этими схемами, являются частью программы более высокого уровня, например для домашней хозяйки — это программа ведения домашнего хозяйства в це- лом. Последняя программа в свою очередь является элементом программы социально-общественной жизни соответствующего индивидуума женского пола. Такие же уровни организации встречаются и при обработ- ке данных с помощью автоматов. В общем случае можно утверждать, что те программы, которые находятся на более низком уровне, реализуют более простые функции. Отсюда можно сделать заключение, что если используется некоторая сложная функция, то простые функции не потребуются. Напри- мер, владелец проигрывателя, управляемого с помощью мик- роЭВМ, не нуждается в эквивалентной функциональной схеме (заменителе ЭВМ) из десятков блоков с ручным управлением. С другой стороны, существует большое число операций, при выполнении которых применять сложные функциональные схе- мы оказывается просто невозможно. В качестве примера мож- но указать на земляные работы, которые в настоящее время выполняются экскаватором; при строительстве зданий ни один разумный человек не предложит использовать для этой цели, скажем, лопату. Однако при посадке в саду каких-либо расте- ний столь же неразумно вместо лопаты применять экскаватор. То же самое относится и к использованию молотка, ручной пи- лы и других инструментов. Более сложные функции можно реализовать, используя языки высокого уровня. Для управления работой проигрывате-
Набор команд микроЭВМ 101 ля с различными специальными элементарными функциями требуется большое число различных регуляторов, к каждому из которых следует «обращаться» вполне определенным обра- зом. Для обеспечения оптимального режима работы системы требуется большое число команд. В случае «компьютеризован- ного» проигрывателя системе сообщается только одно слово (нажимается одна кнопка) и автомат сразу же «понимает», о чем его «просят», т. е. в ответ он обеспечивает оптимальное выполнение сложной функции. Аналогичная ситуация имеет место и при программирова- нии. Чем сложнее операции, которые выполняет система, тем проще может быть язык общения с ней. В случае сложных операций, выполняемых на ЭВМ, используются подпрограммы, т. е. автономные программы, реализующие определенные слож- ные операции, такие, как вычисление ех или начисление зара- ботной платы на предприятии. Для запуска этих программ тре- буется только одна команда, а именно осуществить переход в ту ячейку ЗУ, где находится вход в требуемую подпрограмму, и выполнить вычисление ех или расчет заработной платы. Для формулирования указания ЭВМ — выполнить необхо- димое вычисление — не требуется «многословие». ЭВМ «зна- ет», как работать — для этого ей требуется только разреше- ние. Как и в примере с экскаватором и лопатой, при программи- ровании используются элементарные функции, т. е. машинные команды, для того чтобы выполнить какие-либо специальные операции. Простые команды делают процесс программирова- ния чрезвычайно гибким. Чем выше уровень применяемого языка программирования, тем менее гибкими становятся команды. Следует также учесть, что языки более высокого уровня имеют ограниченную область применения, так Кобол предназначен для экономических и управленческих расчетов, а Алгол — для научных вычислений. С помощью этих языков почти невозможно, например, программировать некоторые функции управления процессами. Для решения частных (специальных) задач программирова- ния требуются элементарные операции, точно так же как плот- нику нужны молоток и пила при строительстве дома, хотя ра- мы, двери и балки для этого дома изготавливаются на слож- ных автоматизированных станках. 3.2. Элементарные команды для управления ЭВМ В этой главе будут рассмотрены элементарные операции или команды МП, которые применяются для управления ап- паратурой.
102 Глава 3 Команды, записанные в двоичном коде, поступают из ре- гистра команд и управляют аппаратурными дешифраторами, которые активизируют функции нижнего уровня в МП. Современные 8-разрядные МП имеют примерно тот же уро- вень «развития», что и ученик 1-го класса начальной школы. Что касается арифметики, то эти МП могут только суммиро- вать и вычитать. Умножению, делению и другим более слож- ным операциям эти МП необходимо «научить». Это осуществ- ляется с помощью программ, которые однозначно определяют, каким образом следует выполнять более сложные операции с использованием простых вычислительных операций. Решения задач такого типа являются вполне реальными, так как более сложные операции типа умножения, деления и т. д. являются не чем иным, как повторением операций сумми- рования и вычитания совместно с операциями сдвига, которые следуют до тех пор, пока какая-либо полученная контрольная величина не укажет, что данная сложная операция выполнена. Например, при делении такой контрольной величиной является остаток. Более сложные функции можно реализовать, используя про- граммирование или расширяя имеющуюся аппаратуру. Известно, что даже в специализированном калькуляторе, который обладает возможностью выполнять различные слож- ные операции, эти операции реализуются путем установления электрических связей между его компонентами. В настоящее время наблюдается тенденция использования для этих кальку- ляторов программируемого аппаратурного обеспечения, кото- рое позволяет реализовать более сложные арифметические опе- рации. Для более сложных и более дорогих ЭВМ чаще при- меняются ППЗУ, которые обеспечивают выполнение ряда опе- раций в последовательности, задаваемой пользователем. Речь идет о более сложных вычислениях, которые реализуются с помощью программного обеспечения и менее сложных базовых («встроенных») операций. Выше отмечалось, что для выполнения операций требуются данные. Управляющая информация поступает в различные функциональные органы через конкретные электрические со- единения (аппаратуру). Программы также представляют собой управляющую информацию, так как они указывают ЭВМ, что именно и в каком порядке необходимо делать во время обра- ботки данных. Через общую шину данных в одно время пере- даются обрабатываемые данные, а в другое — управляющая и адресная информация. С другой стороны, для передачи уп- равляющей и адресной информации можно использовать от- дельные шины управления и адресов соответственно. Необходимость в передаче управляющей и адресной инфор-
Набор команд микроЭВМ 103 мации через шину данных возникает тогда, когда имеется ог- раниченное число информационных каналов. Такая ситуация возникает, например, при передаче на длинные расстояния, так как отдельные магистрали при этом становятся очень до- рогими, или же в случае ограниченного числа внешних выво- дов на корпусе DIP. При этом передача информации происхо- дит не параллельно, а последовательно. При передаче через порты ввода-вывода довольно часто по шине данных сначала передается адресная информация, а за- тем данные. Такой метод передачи требует две команды вво- да-вывода. При подаче первой команды регистр, находящийся на другом конце шины, может перейти, например, в режим «прослушивания», а после второй команды происходит пере- сылка данных в выбранный регистр. Таким образом, потреби- тель (информации) будет сначала предупрежден о возможной передаче данных. Аналогичная ситуация часто наблюдается и в повседневной жизни, например когда с помощью письма мы предупреждаем клиента об отправке ему товаров. 3.3. Структура команд Команда, находящаяся в регистре команд МП, выполняет- ся только после дешифрации в соответствующем дешифраторе (см. блок-схему на рис. 3.1). Для экономичной дешифрации требуется разбить байт команды на битовые поля, которые определяют выполняемую операцию и устройства ввода и вывода данных, требуемые для выполнения этой операции. В частности, если для данной опе- рации необходимо выбрать один из восьми регистров, то для идентификации одного из этих регистров потребуется 3 бит. В случае команд передачи данных необходимо указывать, какой именно регистр или другое аналогичное устройство явля- ется источником данных и какое устройство является их при- емником. В результате для восьми регистров в соответствую- щей команде выделяются два адресных поля по три бита. Эти поля используются не только для команд передачи дан- ных. В других командах, которые выполняются без участия регистров или ячеек памяти, указанные адресные поля исполь- зуются для других целей. При выполнении команд вначале обычно интерпретируется описание функции, после чего происходят дешифрация и ин- терпретация остальных битов. Из первого байта команды МП может также узнать длину команды — один, два или три бай- та. Длина команды увеличивается в связи с тем, что для обме- на информацией с внешними ЗУ и портами ввода-вывода тре-
Ю4 Глава 3 Рис. 3.1. Интерпретация команды с помощью дешифрующей схемы. буется указывать адреса соответствующих устройств. В сов- ременных 8-разрядных МП для указания адреса выделяются один или два байта: с помощью одного байта можно обра- щаться к одному из 256 адресов, а с помощью двух байтов — к 216 = 64К адресам. Как следует из рис. 3.2, к описанию функ- ционального назначения команды обычно добавляется описа- ние данных или адресов, для которого требуется не более двух байтов. Как уже отмечалось выше, операции ввода-вывода осу- ществляются с помощью двухбайтовых команд. Когда число устройств ввода-вывода не превышает 256, можно осуществ- лять ввод и вывод данных, используя в качестве их регистров свободную часть ЗУ. При этом станции ввода и вывода зани- мают ячейки ЗУ произвольным образом и идентифицируются
Набор команд микроЭВМ 105 Слово данных D7 D6 D5 D4 D3 D2 D1 D0 Старший, бит t Младший бит Однобайтовая команда (б) Рис. 3.2. Слово данных (а); однобайтовая, двухбайтовая и трехбайтовая команды (б). по командам записи и чтения. Такой способ ввода и вывода данных получил название «ввод-вывод, отображенный в па- мяти». Анализируя ту часть команды, которая содержит описание операции, можно заметить, что старшие биты соответствую- щего байта указывают, к какой именно группе принадлежит данная команда — к командам передачи данных, арифметиче- ским командам, командам переходов и т. д. Более детальное описание типа операции обеспечивают младшие биты указан- ного байта. В этой связи важно напомнить о часто используемом поня- 1ии «синтаксиса», под которым подразумевается определенный порядок кодирования при передаче информации (синтаксис — устанавливаемый порядок). Для простых языков, таких, как машинный язык, это означает, что внутри команды не разре- шается перемещать биты или битовые поля. Это же требова-
10в Глава 3 ние сохраняется и для второго и третьего байтов, которые уточ- няют содержание команды. На практике синтаксис обеспечивает правильное применение языка. При этом ЭВМ является синтаксически строго опреде- ленным устройством. Как мы увидим в последующих разде- лах, битовая информация, которая представляет команду, обычно записывается в виде некоторой комбинации букв, яв- ляющейся сокращением от полного названия данной команды. Например, STA является сокращением от слов Store Accumu- lator (запомнить содержимое аккумулятора). С помощью таких мнемонических обозначений, образующих в совокупности язык ассемблера, можно составить программу, которая при помощи специальной вспомогательной программы, называемой ассемблером, затем переводится в требуемую дво- ичную информацию, записанную на машинном языке. При этом, в частности, не разрешается вместо STA использовать STE или ST Е (ST — пробел — Е). Ассемблер точен и в от- ношении таких знаков препинания, как запятые, точки с запя- той и т. д. В случае языков более высокого уровня каждая синтаксическая ошибка обычно обнаруживается диагностикой. В действительности синтаксис определяет структуру прог- раммы как единого целого, потому что если поменять места- ми всего лишь одну команду с другой, то результат выполне- ния программы изменится. То же самое имеет место и в обыч- ном языке. Фраза «У вас есть молоток» означает нечто отлич- ное по сравнению с вопросом «Есть у вас молоток?» Изменение расположения слов «У вас есть» приводит к совершенно другой интерпретации предложения. Большинство МП имеет наборы команд, состоящие из нескольких десятков команд. Программи- рование с помощью такого набора оказывается довольно слож- ным. Опыт показывает, что первое время каждый начинающий программист при составлении программ использует ограничен- ное число команд, и это неудивительно, так как многие коман- ды функционально перекрываются друг с другом. Кроме того, ряд команд можно «разложить» на более простые команды. При использовании простых команд программа существенно удлиняется по сравнению со случаем применения сложных команд. Это связано с тем, что в первом случае сложные функ- ции программируются фактически заново, и программист обыч- но и не подозревает о том, что они находятся в составе набо- ра команд. Например, требуется временно извлечь один байт из некоторого регистра и поместить его в аккумулятор, чтобы затем записать в ЗУ. При обратном считывании можно вернуть этот байт сначала в аккумулятор, а затем передать его в со- ответствующий регистр, откуда он первоначально и был извле- чен. Однако существует и другая возможность передачи этого
Набор команд микроЭВМ 107 байта — без подробного указания адреса — прямо из регистра с помощью так называемой команды PUSH (протолкнуть), а затем по команде POP (вытолкнуть) можно вернуть этот байт назад. Первый пример программирования показывает, что если программист делает первые шаги в программировании, то он может использовать множество команд там, где опытный про- граммист обходится всего лишь двумя. Разумеется, первый ва- риант программы также будет решать поставленную задачу, и при выполнении программы на микроЭВМ вряд ли кто-ни- будь вообще заметит, что программа не оптимизирована. Мик- роЭВМ при этом будет занята вычислениями дольше и в не- которых случаях может даже не уложиться в заданный интер- вал времени, например в ходе управления каким-либо произ- водственным процессом в реальном масштабе времени. Однако по мере накопления опыта в процессе регулярного» составления программ набор команд становится все более по- нятным, так что в конце концов программист начинает рацио- нально использовать наличный арсенал команд МП. При рассмотрении различных кодов в наборе команд МП 8085А различные функции распределяются по группам для более ясного представления содержимого этого набора и свя- зей команд внутри групп. Для принятия решения на основе полученных результатов МП имеет ряд так называемых регистров флажковых битов (контрольных переменных), которые обеспечивают определен- ную информацию о результатах обработки данных. С помощью контрольных переменных можно принять, например, решение о ветвлении в исполняемой программе. Эти ветвления реализу- ются обычно командами переходов. Такие переходы могут быть условными, т. е. соответствующий переход будет выполнен только тогда, когда определенный флажковый бит станет рав- ным 1. Таким образом, осуществляется переход как бы на ос- нове результата ранее выполненной операции. Прежде чем перейти к самим командам, следует, по-види- мому, проанализировать те обозначения, которые будут при- меняться для адекватного представления функций без дополни- тельных подробных описаний. В рамках комбинационной логики уже был рассмотрен ряд символов для обозначения функций И, ИЛИ и ИСКЛЮЧАЮ- ЩЕЕ ИЛИ. Так как эти функции входят и в состав набора команд МП, правда, вместе с функциями сложения и вычита- ния, то для большей однозначности при составлении программ следует перейти к другой системе обозначений для команд И, ИЛИ и ИСКЛЮЧАЮЩЕЕ ИЛИ. Из таблицы, приведенной на рис. 3.3, следует, что для функций И, ИЛИ и ИСКЛЮЧАЮ-
108 Глава 3 Символ Значение rh rl PC Старший байт двойного регистра Младший байт двойного регистра Счетчик команд— 16-разрядный регистр в МП РСн — старший байт PCl — младший байт SP Указатель стека—16-разрядный регистр в МП SPh — старший байт SPl — младший байт Гщ Z, S, Р, CY, АС бит m регистра г (ш=0...7) Флажковые биты (признаки условий) Z — нуль, CY — перенос, S — знак, АС — вспомогательный перенос, Р — четность ( ) Содержимое регистра или ячейки ЗУ (А) — содержимое регистра А (п) —содержимое ячейки ЗУ ((HL)) Содержимое ячейки ЗУ, адрес которой находится в двойном регистре HL ((п)) Содержимое ячейки ЗУ, адрес которой находится в ячейках ЗУ п и п+1 := или •*- Заменить: А«-А+В 1 заменить содержимое регистра А на содер- д:==Д4-В / жимое регистра А+регистра В А V V + Логическое И ИСКЛЮЧАЮЩЕЕ ИЛИ ЛОГИЧЕСКОЕ ИЛИ Сложение (сумма) I * । Вычитание (разность) Умножение Замена на — Дополнение до 1, или инверсия, например, (А) Рис. 3.3. Значения символов, используемых в этой главе. ЩЕЕ ИЛИ можно использовать обозначения, Д, V и У, т. е. символику, которая считается общепринятой. В зависимости от типа команды та ее часть, которая связа- на с операндом, может содержать как адрес, так и данные. Это справедливо и в отношении содержимого регистра. Данные, на-
Набор команд микроЭВМ 109 ходящиеся в регистрах или в ячейках ЗУ, обозначаются с по- мощью скобок. Например, символ А в скобках, т. е. (А), обо- значает содержимое регистра А, а символ М в скобках, т. е. (М),— содержимое М-й ячейки ЗУ. В регистре или в ячейке ЗУ может указываться адрес, по которому можно найти соот- ветствующие данные. В этом случае название регистра или ячейки ЗУ заключается в двойные скобки, например ((HL)). Таким образом, двойные скобки означают, что указывается содержимое содержимого. При этом имеется в виду, что речь идет о косвенной адресации. Форма косвенной адресации знакома нам и из повседневной жизни. Например, чтобы позвонить какому-либо лицу, номер телефона которого нам неизвестен, мы сначала обращаемся к телефонному справочнику (регистру) и, используя адрес, на- ходим соответствующего абонента (номер телефона). Такая косвенная адресация применяется в том случае, когда во вре- мя выполнения операций может измениться адрес. В данном примере, если абонент будет систематически переезжать с од- ного места на другое, номер его телефонного аппарата будет изменяться. Регистры обозначаются буквой г, причем в случае двухбай- тового регистра следует различать позиции старшего и млад- шего байтов. Эти байты указываются с помощью букв rh (старший байт) и rl (младший байт). В дальнейшем также по- надобится указывать более подробно позицию какого-либо би- та в регистре. Для этой цели применяется цифровой индекс, который располагается после обозначения регистра, например Н<, что соответствует пятому биту, начиная с младшего бита Н-регистра. Мы говорим «пятый», потому что нумерация начи- нается с Но. Команды, операнды и данные представляются в микроЭВМ в двоичном коде с помощью нулей и единиц. С таким кодом работать очень неудобно из-за слишком длинной записи и свя- занной с ним большой вероятности совершить ошибку. По этой причине были разработаны специальные способы представле- ния информации, которые обладают определенным сходством с представлением в десятичной системе счисления и обеспечи- вают максимальную надежность. Мы имеем в виду восьмерич- ную и шестнадцатеричную системы счисления. Числа обеих систем счисления являются степенями двойки (2П) и поэтому удобны в применениях. При использовании восьмеричной системы счисления каж- дое слово, начиная с младших битов слова, разбивается на группы по три бита в каждой, которые соответствуют опреде- ленной восьмеричной цифре. Для слов данных и адреса длиной в один байт получаются две группы по три бита и одна труп-
по Глава 3 па в два бита. Для представления байта в шестнадцатеричной системе четыре бита объединяются в одну группу, которая со- ответствует одной шестнадцатеричной цифре. Один байт пред- ставляется двумя шестнадцатеричными цифрами. На рис. 3.4 приведены двоичные эквиваленты десятичных, восьмеричных и шестнадцатеричных цифр. Десятичные Восьмое - ричные Шеслшад- ца/перичные Двоичные 1 1 1 1 2 2 2 10 3 3 3 11 4 4 4 1ОО 5 5 .5 101 6 6 6 110 7 7 7 111 8 10 8 1ООО 9 11 9 1001 10 12 А 1010 11 13 В 1011 12 14 С 1100 13 15 D 1101 14 16 Е 1110 15 17 F 1111 Рис. 3.4. Десятичные, восьмеричные и шестнадцатеричные цифры и эквива- лентные им двоичные величины. Как показано на рис. 3.5, от восьмеричной и шестнадцате- ричной форм представления цифровых величин можно легко перейти к двоичной форме любого байта. Очевидно, что при составлении программы можно выбрать одну из двух указан- ных форм представления адреса. В случае восьмеричной адре- сации после цифры 7 происходит перенос, т. е. после адреса 7 следует адрес 10, а после адреса 77 — адрес 100 и т. д. При использовании шестнадцатеричного представления адреса по- сле F следует 10, а после FF следует 100. Мы рекомендуем потренироваться в записи таких адресов для нескольких тек- стов программ, так как в противном случае будут часто по- являться ошибки, связанные с переносом после 9 и аналогич- ных чисел в десятичной системе. На рис. 3.6 приведены списки адресов, из которых видно, как осуществляется адресация в том случае, когда требуется указать несколько тысяч адресов в восьмеричном и шестнад- цатеричном кодах. 10*0в в восьмеричной системе счисления равно десятичному числу 64ю, а 10008 равно 8X8X8 = 512ю. Как следует из таблицы, десятичным 512 байт соответствуют весьмеричные 1000 байт. 1024 слова (1К) соответствуют восьмеричным 20008 слов.
Восьмеричное^ представление 1 1 1 0 1 1 1 1 5 7 К_ 1 3 1 А Шестнадцатеричное представление 2 бит Збшп I I I 3 бит | I •j Е I I I I >1< I F I I I I 4 бит ! । 4 бит * i Ьосъм. Двоичн. 0 ООО 1 0 0 1 2 0 1 0 ' 3 0 | / 7 f* • 4 |/ oof- 5 7 0 7 Б / 1 0 . 7 \1 1 Байт(двоичный) (а) Двоичное представление Шести О Двоичн. О Восьмеричное представление (6) Двоичное представление 2 3 7 5 6 D7 (в) Шестнадцатеричное представление О О ~0 О О О Г£ Рис. 3.5. а — байт (8 бит), представленный тремя восьмеричными цатеричными цифрами; б — пример перевода одного байта цифрами и двумя шестнад- г-— —------ -----в восьмеричный набор цифр; в — пример перевода одного байта в шестнадцатеричный набор цифр.
СППЗУ 1 IK8 2708 СППЗУ 2 IK8 2708 СППЗУ 3 /К8 2708 ЗУПВ1 IK8 2x2114 СППЗУ 4 IK8 2708 СППЗУ5 IK8 2708 СППЗУ 6 !К8 2708 ЗУПВ/ПЗУ- имитатор 1К8 2x2114 256 байт ООО | ООО 004 | ООО 010 | ООО 014 | ООО 020 | ООО 024 | ООО 030 | ООО 034 | ООО 040 | ООО 044 | ООО 256 байт 001 | ООО 005 | ООО 011 | ООО 015 | ООО 021 | ООО 025 | ООО 031 | ООО 035 | ООО 041 | ООО 045 | ООО 256 байт 002 | ООО 006 | ООО 012 | ООО 016 | ООО 022 | ООО 026 | ООО 032 | ООО 036 I 000 042 | ООО 046 | ООО 256 байт 003 | ООО 007 | ООО 013 | ООО 017 [ ООО 023 | ООО 027 | ООО 033 | ООО 037 | ООО 043 | ООО 047 | ООО Восьмеричное представление (а) пх 16384 пх2048 пх256 пх64 пхв пх1 п I о 0 п 000 п 000 п 0 0 п 0 0 0 п 000 Глава 3 Рис. 3.6. Примеры распределения адресов ЗУ для микроЭВМ с МП 8085А, рассмотренной в гл. 4. а — адресация в восьмеричном коде; б — адресация в шестнадцатеричном коде.
СППЗУ 1 IK8 2708 СППЗУ 2 !К8 2708 СППЗУ 3 /К8 2708 ЗУПВ 1 !К8 2x2114 СППЗУ 4 !К8 2708 СППЗУ 5 /К8 2708 СППЗУ 6 IK8 2708 ЗУПВ 2 1К8 2708 256 байт 00 | 00 04 | 00 08 00 ОС | 00 10 | 00 00 18 | 00 1С | 00 20 | 00 24 | 00 256 байт 01 I 00 05 | 00 09 00 0D | 00 11 I 00 75 00 19 | 00 1D | 00 21 | 00 25 | 00 256 байт 02 | 00 06 | 00 ОА 00 ОЕ | 00 12 | 00 16 00 1А | 00 1Е | 00 22 | 00 26 | 00 256 байт 03 | 00 07 | 00 ОВ 00 OF | 00 13 | 00 00 1В | 00 1F | 00 23 | 00 27 | 00 Шестнадцатеричное представление (б) пх4096 п х 256 пх 16 пх 1 0 0 0 0 0000 0 0 0 0 0000 Набор команд микроЭВМ_______________________113
114 Глава 3 Ячейки ЗУ (восьмеричные) Метка Символ исходного кода команды Объектный код команды, восьмеричный Описание* операций 011 3 цифры 0 3 0 ^LHLD 0 5 2 Загрузить начальный адрес для пересылки программы в hl 1 ! BEGIN. \ 1 5 G 2 0 1 4 \ I 1 'Мнемоника \ 1 Заполненные 1 ( аадрес)1 ячейки ЗУ 3 0 4 4 SIGNAL POINT MVl, А 0 7 6 Команда в А 5 0 2 6 I I Метка I / 2 1 JMP 3 0 3 3 'signal point 0 4 4 4 0 1 / Рис. 3.7. Распределение полей бланка программы при использовании вось- меричного кода. ЗУ на 4 К соответствует 10000s слов в восьмеричной системе счисления. Величины, указанные на рис. 3.6, относятся к вось- меричной и шестнадцатеричной формам представления адресов ЗУ для микроЭВМ с МП 8085А. В нижней части таблиц по- казаны адресные переключатели с множителями, на которые следует умножать показания переключателей для того, чтобы получать десятичные значения адреса. На рис. 3.7 представлена страница программы, разделенная на колонки для размещения требуемых данных. Адрес указы- вает ячейку ЗУ, в которой будет находиться данная команда. В зависимости от конкретного типа каждая команда имеет длину 1, 2 или 3 байт. Колонка с меткой используется для символического обозна- чения адреса. Необходимость в использовании метки иллюст- рирует следующий пример. Допустим, что метка задает начальный адрес подпрограм- мы SIGNAL POINT, которая выполняется в циклическом ре- жиме и определяет длительность точечных сигналов в коде Морзе. Можно обозначить этот начальный адрес в колонке ме- ток с помощью метки SIGNAL POINT. При дальнейшей раз- работке программы такое обозначение обеспечит ряд удобств. Так, например, можно написать в тексте программы команду
Набор команд микроЭВМ 115 перехода или ветвления, которая вернет программу в началь- ный адрес, в очень простой форме, помещая метку в адресную часть этой команды, т. е. JMP — SIGNAL POINT. Позднее, после того как программа приобретет законченную форму, меткам присваиваются абсолютные значения адресов. Для SIGNAL POINT это означает, что во всех случаях, когда мет- ка появляется в программе в качестве адреса, символический адрес можно заменить адресом ячейки ЗУ, значение которого присвоено метке. Особенно удобными становятся действия с использованием меток в программе, написанной на языке ассемблера. Для под- готовки программы к ассемблированию достаточно только пе- речислить следующие друг за другом команды, используя со- ответствующие семантические сокращения (мнемонику). ЭВМ переводит эту мнемонику в необходимый двоичный код, а так- же обеспечивает формирование соответствующих адресов с уче- том длины конкретных команд — 1, 2 и 3 байт. Очевидно, что, программируя с привлечением мнемоники, можно обойтись без указания конкретных значений адресов в командах переходов и ветвлений, а вместо этого использовать только метки. При этом необходимо не забывать о том, что абсолютные адреса становятся известны лишь после ассембли- рования в ЭВМ. В начале ассемблирования указывается толь- ко та ячейка ЗУ, в которую помещается код первой команды» После этого адресация следующих команд происходит уже ав- томатически. При использовании меток ассемблер автоматически следит за тем, какая ячейка ЗУ соответствует данной метке адреса и помещает номер этой ячейки в те ячейки ЗУ, где по ходу вы- полнения программы появляется эта метка. Метки можно при- сваивать также адресам с обрабатываемыми данными и рабо- чим участкам ЗУ, что позволяет довольно просто вводить их в исходную программу. Метки облегчают перемещение программы в другой участок ЗУ. При этом после перехода к ассемблированию достаточно задать новый начальный адрес и затем считать с перфоленты программу заново. Перфолента содержит копию текста про- граммы, введенного ранее вручную с помощью клавиатуры. Ин- формацию, находящуюся на перфоленте, телетайп печатает на бланке. После колонки с метками следует колонка для указа- ния мнемоники, которая заполняется обозначениями для соот- ветствующих команд в виде символических имен. Последую- щие три колонки зарезервированы для восьмеричной записи байта команды, и, наконец, последняя колонка предназначена для более подробного описания сущности выполняемой опера- ции (комментарии).
416 Глава 3 3.4. Флажковые биты МП имеет несколько флажковых оитов (признаков усло- вий), которые хранятся в триггерах и изменяются в зависимо- сти от результата выполнения определенных операций. Эти би- ты представляют собой контрольные переменные, которые мо- гут понадобиться для воздействия на последующие команды, такие, как команды перехода и ветвления. Для адекватного выполнения следующей операции иногда требуются данные, которые обеспечивает предыдущая операция. Например, при выполнении последующей операции сложения следует учиты- вать перенос. Большинство МП имеет несколько контрольных переменных, которые используются после выполнения опреде- ленных команд и опрашиваются при выполнении ряда других команд, в результате чего изменяется последовательность вы- полнения команд в программе в целом. У МП 8085А пять флажковых битов, а именно флажковые биты переноса, вспомогательного переноса, знака, нуля и чет- ности. Флажковый бит переноса устанавливается в состояние 1, ес- ли произошло переполнение АЛУ, т. е. в случае результата, превышающего 28 (1 байт) или меньшего 0. Эти ситуации воз- никают при сложении в тот момент, когда должен произойти перенос в позицию старшего бита. В ходе операции сравнения в МП 8085А выполняется по крайней мере хотя бы одно вычитание. Если при этом возни- кает перенос, то число, находящееся в регистре, считается меньше другого числа, например взятого из другого регистра. В случае вспомогательного переноса (полупереноса) соответ- ствующий флажковый бит равен 1, если возникает перенос из четвертого разряда в пятый разряд в данном байте. Такой Z S р СУ АС <- Флажковые биты ADD- команды. 1 1 1 7 1 SUB-команды 1 • 7 1 7 1 1 NCR-команды 1 / 7 0 1 DECR-команды 1 7 7 О 7 DAD 0 О О 1 0 Изменение AND-команды 1 7 1 1 1 флажкового OR-команды 1 1 1 1 7 бита указано с помощьк 7 XOR-команды 1 1 1 1 7 С МР-команды 1 1 1 1 7 Команды, циклического сдвига 0 О 0 1 0 CMC/STC 0 0 О 7 О POP-PSW 1 1 7 7 1 Z-нуль; S-знак; Р~четность; СУ-перенос; АС-вспомогательный перенос Рис. 3.8. Изменение флажковых битов при выполнении различных команд.
Набор команд микроЭВМ 117 флажковый бит используется при преобразовании двоичных чи- сел в BCD-код (2 цифры в одном байте) с помощью команды DAA. Флажковый бит знака устанавливается в состояние 1 в том случае, когда старший бит результата также становится равным 1. Флажковый бит нуля является контрольной перемен- ной, которая показывает, что результат обработки данных в АЛУ равен 0. Наконец, флажковый бит четности сообщает результат про- верки на четность байта, который покидает АЛУ. Если число единиц в результате, полученном в АЛУ, является четным, то бит четности становится равным 1. При нечетном числе единиц бит четности устанавливается равным нулю. Флажковые биты оказывают влияние на ход выполнения некоторых команд, таких, как команды перехода и ветвления. На рис. 3.8 показано, какие команды влияют на значения контрольных переменных. 3.5. Команды пересылки Как уже отмечалось выше, набор команд каждого МП можно разбить на несколько основных групп. Одной из них яв- ляется группа команд пересылки (передачи), с помощью ко- торых осуществляется пересылка данных между регистрами, а также между регистрами и ЗУ (рис. 3.9). Эти команды MOV в случае пересылки данных между регистрами имеют длину в один байт. В пределах однобайтовой команды можно ука- зать адреса регистров с помощью 2X3 бит, т. е. трех битов для передающих регистров (источников) и трех битов для при- нимающих регистров (приемников). При передаче данных в ЗУ для адресации элементов ЗУ требуются два дополнительных байта. Эти адреса выбираются из двойного регистра HL, куда перед этим необходимо записать нужные адреса. Это требова- ние должно выполняться при передаче данных в обоих направ- лениях. Возможны также пересылки из регистров в стек с помощью однобайтовых команд PUSH и POP; при этом адреса обраще- ния определяют содержимое регистра-указателя стека. К этим командам мы еще вернемся в следующих разделах. Таблица, приведенная на рис. 3.9, б, содержит все команды MOV МП 8085А. Следует отметить, что все регистры, а именно А, В, С, D, Е, Н и L, являются 8-разрядными. Регистры В и С, D и Е, Н и L могут соединяться последовательно, образуя двухбайтовые регистры. Команды пересылки, приведенные в таблице, относятся к однобайтовым передачам данных, кото- рые происходят между регистрами и ЗУ.
118 Глава 3 Команды MOV не изменяют содержимое регистра флажко- вых битов. Особую группу образуют команды пересылки дан- ных между аккумулятором и ЗУ (рис. 3.10). Эти команды обо- значаются семантически как STAX гр и LDAX гр. По команде STAX В происходит передача из А в М, при этом адрес ячейки в М помещается в регистр ВС. В случае команды STAX D про- исходит такая же передача, только соответствующий адрес по- мещается в двойной регистр DE. Для спецификации адреса ре- гистры В и D формируют из соответствующей информации стар- ший адресный байт. Команда STAX гр не влияет на флажковые биты. MOV г„гг (r,)^(r2) (а) Команды пересылки (MOV) |о| / |z?|z?|uD| s I s I s I DDD -регистр-приемник данных SSS - регистр-источник данных Флажковые биты не изменяются MOV г, М (r)^((H)(D) | о | / |д |д |д | / | /1 о | DDD - регистр-приемник данных М-ЗУ, адрес в HL Флажковые биты не изменяются MOV М, г ((Н, 1))<-г I °l '1Ф1Ф1Ф1 SSS~ регистр-источник данных М-ЗУ, адрес в НL Флажковые биты не изменяются DDD или SS Регистр(Z) 7/7 * А ООО •* -В 001 С 010 -*• D 011 — £ 100 -* И 101 + D
Набор команд микроЭВМ 119 Для передачи из ЗУ в аккумулятор применяется команда LDAXrp, для которой адрес также предварительно помещает- ся, например, в регистр ВС или DE. При выполнении команд STAX гр и LDAXrp используется косвенная адресация, так как опрашиваются вспомогательные регистры относительно того, где находятся данные или из ка- кой ячейки ЗУ необходимо выбрать данные. К командам с косвенной адресацией относятся STA (Store А — запомнить содержимое A), LDA (LoadА — загрузить A), SHLD (Sto- re HL — запомнить содержимое регистров Н и L) и LHLD (Load HL — загрузить регистры Н и L). Как следует из рис. 3.11 и 3.12, эти команды записывают данные в ячейку ЗУ или считывают их из ячейки ЗУ, адрес которой указан в двух байтах, следующих за командой. (б) Команды пересылки Мнемоника Шестнад- цатерич- ный кои Восьме- ричн.код Операция Мнемоника Шестнад- цатирич- ный код Восьме- ричн.код Операция MOV А, А 7F 177 (A) i MOV C, A 4F 117 (A) V MOV А, В 78. 170 (Bfl mov с, в 110 (В) 1 MOV А, С 79 171 (CH MOV c, c 49 111 (C)f MOV A, D 7A 172 (D}\^a MOV C, D 4A 112 MOV А, Е 7B 173 (EH mov c, e 4B 113 (EH MOV А, Н 7С 174 (H)\ MOV C, H 4C 114 (H)\ MOV A, L 7D 175 (L) 1 MOV C, L 4D 115 (L/ 1 MOV А, М 7Е 176 (Mil MOV C, M 4E 116 (M)f MOV В, А 47 107 (A) \ MOVE, A 5F 137 (A) \ MOV В, В 40 100 (B) 1 MOV Er В 58 130 (B) I MOV В, С 41 101 (C}f MOV E, C 59 131 (C)f MOV В, D 42 102 MOV E, D 5A 132 MOV В, Е 43 103 (EH B MOV Ef E 5B 133 (E){ MOV В, Н 44 104 (H)\ MOV Er H 5C 134 (H}\ MOV Bf L 45 105 (L) I MOV Et L 5D 135 (L7 I MOV В, М 46 106 (Mil MOV E, M 5E 136 (M)f MOV D, А 57 127 (A) \ MOV L, A 6F 157 (A)\ MOV D, В 50 120 (Bi 1 MOV L, В 68 150 (Bl 1 MOV D, С 51 121 (O f MOV L, C 69 151 (CH MOV D, D 52 122 (O)HD MOV L, D 6A 152 MOV D, E 53 123 (E) ( MOV L, E 6B 153 (EH MOV D, H 54 124 (H)\ MOV L, H 6C 154 (H)\ MOV D, L 55 125 (L) 1 MOV L, L 6D 155 (L) I MOV D, M 56 126 (Mil MOV L, M 6E 156 (MH MOV H, A 67 147 (A) \ MOV M, A 77 167 (A) \ MOV H, В 60 140 (B) 1 MOV M, В 70 160 (B) I MOV H, c 61 141 (of MOV M, C 77 161 (C)f MOV H, D 62 142 MOV M, D 72 162 (D)\-^M MOV H, E 63 143 (EH H MOV M, E 73 163 (E) ( MOV H, H '64 144 (H)\ MOV M, H 74 164 (H)\ MOV H, L 65 145 (Li 1 MOV M, L 75 165 (L) f MOV H, M 66 146 (Mil Рис. 3.9. Команды MOV (команды пересылки). а — типы пересылок; б — список команд пересылки.
120 Глава 3 J.DAX и STAX LDAX гр (загрузить аккумулятор используя косвенную адресацию ) I I ° к I Р I Z I ° I И Я LDAXrp> Флажковые биты не изменяются* STAX гр (запомнить содержимое аккумулятора, использ)^ косвенную адресацию) |р|о|/?|р|о|о|;|о~| STAX гр RP Двойной регистр 00 ВС 01 DE Флажковые биты не изменяются Рис. 3.10. Команды LDAX и STAX. В случае команд STA и LDA происходит передача одного байта данных, в случае команд SHLD и LHLD — передача двух байтов данных. Адрес указывается в команде, и МП автоматически выбирает данные из ячейки со следующим адре- сом в ЗУ, где хранятся данные, или в оперативном ЗУ. Оба байта пересылаются в регистры Н и L, при этом регистр L выбирает байт адреса, указанный в команде, а регистр Н — байт этого адреса +1 (см. рис. 3.12). Двумя интересными командами пересылки являются коман- ды обмена XCHG и XTHL (рис. 3.13 и 3.14). По команде XCHG происходит обмен содержимого двойного регистра HL с содержимым двойного регистра DE. По команде XTHL верх- няя пара ячеек стека обменивается данными с двойным ре- гистром HL. При этом регистр L обменивается данными с вер- шиной стека, адрес которой идентифицирует указатель стека, а регистр Н обменивается данными со стеком по адресу на одну позицию выше, чем идентифицировал указатель стека .(SP+1). Команда SPHL загружает содержимое двойного регистра HL в стек, т. е. в двухбайтовый адресный регистр МП.
L°A и STA LDA адрес (загрузить аккумулятор, используя прямую адресацию) (Д )^((байтЗ)(байт 2)) STA адрес (запомнить содержимое аккумулятора, используя прямую адресацию) ((оайтЗ) (байт 2 ))<-А о|о|/|/|/|о|/|о| LDA Младший байт адреса Байт 2 Старший байт адреса БайтЗ О I О I / I 7 I О I О I / I О Младший байт адреса Старший байт адреса STA Байт 2 БайтЗ Восьмеричное : 072 Шестнадцатеричное: ЗА Восьмеричное: 062 Шестнадцатеричное' 32 Фла?кковые биты не изменяются Флажковые биты не изменяются Рис. 3.11. Команды LDA и STA.
LHLD и SHLD О|о|/|о|/|р|/|р Младший байт адреса Старший байт адреса LHLD Байт2 Байт 5 0|0|/|0|о|0|/|о Младший байт адреса Старший байт адреса SHLD Байт2 Байт 3 Восьмеричное: 052 Шестнадцатеричное :2А Восьмеричное: 042 Шестнадцатеричное: 22 Флажковые биты не изменяются Флажковые биты не изменяются МП автоматически увеличивает адрес на- МП автоматически увеличивает адрес на +7 Рис. 3.12. Команды LHLD и SHLD.
XCHG и SPHL Обмен данными XCHG (обменять содержимое двойных регистров DE и HL) (H)~(D) (L)^(E) XCHG Восьмеричное: 353 Шестнадцатеричное: ЕВ Флажковые биты не изменяются Данные Н-(старший байт) L (младший байт) SPHL (передать содержимое HL в SP) ($P)-(H)(L) 1 1 1 / 1 0 о 7 SPHL Восьмеричное :371 Шестнадцатеричное: F9 Флажковые биты не изменяются SP -указатель стека Рис. 3.13. Команды XCHG и SPHL.
XTHL XTHL (обменять содержимое вершины стека, и регистра HL) (L)"((SP)) (H)"((SP)+1) XTHL Восьмеричное: 343 Шестнадцатеричное: Е 3 Флажковые биты не изменяются SP-^ указатель стека Рис. 3.14. Команда XTHL. Заметьте, что в данном примере первый байт стека имеет адрес 100 и что, начиная с этого адреса, адреса следующих байтов уменьшаются. В действительности здесь идет речь об отрицательной вершине стека.
Набор команд микроЭВМ 125 PUSH Th - старший байт rL ••младший байт Рис. 3.15. Команда PUSH гр (протолкнуть) ((SP)-V^-rh ((SP)-2)*-rl (SP)*-(SP)~2 I 7 I 7 I я I pl ° I 7 I ° I 7 ] PUSHrp Флажковые биты не изменяются HP Двойной регистр 00 вс 01 DE 10 HL SP не использовать! Мнемоника Шестнадцато- Восьмерым.- ричныйкод ныйкод' PUSH В С5 305 PUSH D D5 325 PUSH Н Е5 345 PUSH гр. Эти два байта необходимы для адресации стека, который на- ходится в оперативном ЗУ. Указатель стека загружается с по- мощью команды LXI SP, за которой следует спецификация адре- са (два байта). Эта операция должна выполняться в начале каждой программы. Прежде чем приступать к выполнению про- граммы, необходимо установить, где в ЗУ находится началь- ный адрес стека. Выше уже упоминались команды PUSH и POP, которые пересылают данные из регистров в оперативное ЗУ без явного указания адреса. Хранение данных происходит в той части ЗУ, которая отведена под стек (рис. 3.15 и 3.16). По команде PUSH гр данные из соответствующего регистра пересылаются в стек, а с помощью команды POP гр считываются данные из стека и пересылаются в обратном направлении. Указатель стека идентифицирует в МП вершину стека. Применяемый стек работает по принципу, согласно которому величина, записанная последней, извлекается первой. Это обстоятельство обычно учи-
126 Глава 3 rh-старший байт rl - младший байт POP гр (вытолкнуть) (ri)*-((SP)) (rh)*-((SP)+1) (SP)*-(SP) + 2 I?I'1д1р|о|°1о1'I poprp Флажковые биты не изме- няются RP Двойной регистр 00 вс 01 DE 10 HL SP не использовать 1 Мнемоника Шест надцате- Восьмерич ричный код ныи код POP В С1 301 POP D D1 321 POP Н El 341 Рис. 3.16. Команда POP гр. тывается некоторым специальным образом. Первый адрес в стеке указывается в начале программы с помощью указателя стека и загружается по команде LXI SP. К элементу данных, который находится в стеке по более старшему значению адреса, можно обратиться только после выполнения нескольких команд POP или модификации указа- теля стека по команде SPHL. Команда PUSH В пересылает данные из двойного регистра ВС в стек, а именно данные из регистра В в ячейку, адрес которой находится на одну позицию ниже той, которую перво- начально идентифицировал указатель стека, а данные из ре- гистра С — по адресу, находящемуся на две позиции ниже той, которую идентифицировал указатель стека. То же самое проис- ходит и в случае команд PUSH D и PUSH Н, за исключением того, что здесь в пересылках участвуют регистры DE и HL. Команда PUSH PSW (PSW — Processor Status Word —
Набор команд микроЭВМ 127 слово состояния процессора) передает в стек последователь- ность данных, такие, как флажковые биты и содержимое ак- кумулятора А. В SP-2 поступает байт с флажковыми битами состояния, а в SP-1 — байт с данными из аккумулятора А. Флажковые биты расположены в байте так, как показано на рис. 3.17. Из этого рисунка также видно, как выглядит ин- формация, хранящаяся в стеке. push psw PUSH PSW (протолкнуть слово состояния процессора) ((SP)-1)^A ((SP)-2)^(D7.,.D0) (SP)^(SP)-2 | / | 7 | 7 | / | 0 | / | О |Т] PUSH PSW Вдсьмеричное: 36S • Шестнадцатеричное: F5 Флажковые биты не изменяются Стековое ЗУ (стек) 1 байт Аккумулятор D7 D6 D5 D4 D3 D2 DI DO |z | о |дс| о |p | z |c7|- Слово состояния из регистра состояния 1008 77 з 768 0 SP-1 SP-2 SPj -SP после операции 0 -SPdo операции SP - указатель стека Рис. 3.17. Команда PUSH PSW. Команда POP выталкивает из стека данные. При этом ука- затель стека не уменьшается на 1, как в случае команды PUSH, а, наоборот, увеличивается на 1, что ясно видно из рис. 3.16. Команда POP В выталкивает из стека сначала данные, предназначенные для засылки в регистр С, а затем данные для регистра В. Указатель стека обеспечивает правильный адрес для пересылки данных из стека. Как выполняется команда POP PSW, показано на рис. 3.18.
128 Глава 3 POP PSW POP PSW (вытолкнуть слово состояния процессора) <D7...DO)-((SP)) A~((SP)+1) (SP)^(SP) + 2 Флажковые биты изменяются ] / I / I / I ? I 0 I 0 I 0 I POP PSW Восьмеричное: 361 Шестнадцатеричное: Fl Стековое ЗУ (стек) 1 байт SP Аккумулятор D7 D6 D5 D4 D3 D2 DI DO |s |z | О |4C| О |p I z |cr]« 100s 778 768 758 SP+Z SP+l 0 (SP Регистр состояния /Слово 'co сто/-/, //HM/you^ccp^a/ (sp) -SP после операции 0 - SP до операции SP - указатель стека Рис. 3.18. Команда POP PSW. Ни одна из названных выше команд не изменяет значения флажковых битов. Команды PUSH PSW и POP PSW применяются в случае переходов к подпрограммам для того, чтобы сохранить слово состояния в момент ветвления. После возврата в основную программу слово состояния снова извлекается из стека и про- исходит загрузка соответствующих триггеров состояния в МП. 3.6. Арифметические, логические команды и команды сравнения МП 8085А, как и другие 8-разрядные МП, предусматрива- ют выполнение только арифметических операций сложения и вычитания. Кроме этих операций набор команд МП 8085А обеспечивает выполнение логических операций и операции сравнения. В случае команд суммирования (ADD) можно вы-
Набор команд микроЭВМ 129 делить команды, которые либо учитывают, либо не учитывают значения флажкового бита переноса. Результат выполнения этих команд обычно влияет на значения флажковых битов, на- пример флажкового бита переноса, который при появлении переноса устанавливается в состояние 1. Следует отметить, что команды суммирования могут отно- ситься к нескольким регистрам. Из двух однобайтовых слагае- мых одно постоянно находится в аккумуляторе А. Это число обычно вводится в А по команде пересылки. Другое число мо- жет находиться либо в одном из регистров, либо в одной из ячеек ЗУ (рис. 3.19). При выполнении команды ADC (ADD with CARRY — сум- мирование с переносом) учет значения флажкового бита пе- реноса позволяет суммировать последовательно несколько бай- тов для получения суммы длиной в несколько байтов. Если при прибавлении одного байта возникает перенос, то при следу- ющем сложении этот перенос будет автоматически учтен и об- работан. При сложении чисел длиной более одного байта они разбиваются на несколько байтов и затем отдельные байты, начиная с младших, суммируются. На каждом шаге сложения учитывается флажковый бит переноса CY, так что после по- следнего шага появляется «правильное» значение суммы, ко- торое затем размещается в нескольких байтах. Эту ситуацию поясняет пример сложения тетрад (4-разрядных групп): С Б-тетрада МБ-тетрада (А)=- (A) + (r) + (CY) <- 203 ю 173ю - 376ю Алгоритм такого сложения выглядит следующим образом: (CY)^-O (AHL) (A*)^(A) + (E) + (CY) (L)^-(A*) (A)^-(H) (A*)4-(A) + (D) + (CY) (H)-(A*)
Команды арифметических, операций ADD г; ADCr; SUB г; SBB г; Данные Результат JNRr; DCRrJNXrp; DCXrp; — А (1 байт) — ANA r; XRA r; ORA r; CMP r; Устанавливаются флажковые биты Z,S,P, г Данные (1 байт) АДУ CYuAC команд INCREMENT и DECREMENTt когда не изменяется флажковый бит CY Рис. 3.19. Операции в АЛУ. а — наглядное представление команд; б — команды ADD; в — команды ADC; г —- комаж* ды DAD; д — команды SUB; е —команды SBB и SBI; ж— команды ANA ж ANI; з—* команды ORA и ORI; а —команды XRA и XRI.
Сложение Мнемоника Шестнадцате- ричный код Восьмеричный код Операция ADD А 87 207 (А) := (А) + (А) ADD В 80 200 (А) ; = (А) + (В) ADD С 81 201 (А) := (А) + (С) ADD D 82 202 (А) : = (A) + (D) ADD Е 83 203 (А) : = (А) + (Е) ADD Н 84 204 (А): = (А) + (Н) ADD L 85 205 (А) = (A) + (L) ADD M 86 206 (А) — (А) + (М) AD! С6 306 (А): = (А)+(байт2) (А) = содержимое А; устанавливаются флажковые биты: Z’S’P'CY, АС (ф Сложение (с учетом состояния переноса) Мнемоника Шестнадца- теричный код Восьмеричный код Операция ADC А 8F 217 (А).= (А) + (А) +состояние переноса ADC В 88 210 (А) : = (А) + (В) -^-состояние переноса ADC С 89 211 (А) := (А) + (С) +состояние переноса ADCD 8А 212 (А): = (А) + (D) -^-состояние переноса ADC Е 8В 213 (А) := (А) + (Е) -^состояние переноса ADC Н 8С 214 (А) :- (А) + (Н) -^состояние переноса ADCL 8D 215 (А): = (А) + (L) ^состояние переноса ADCM 8Е 216 (А) := (А) + (М) -^состояние переноса АС! СЕ 316 (А): = (А) +(6айт 2) + Переноса.6 Устанавливаются флажковые биты: Z,S,P,CYfAC (в) Сумма в hl Мнемоника Шестнадца- теричный код Восьмеричный код Операция DAD В 09 011 (HL):= (HL) + (BC) DAD D 19 031 (HL)— (HL)-^(DE) DAD Н 29 051 (HL):= (HL)-^(HL) DAD SP 39 071 (HL):= (HL)-^(SP) (HL) - содержимое HL; устанавливается флажковый бит CY (3) Вычитание Мнемоника Шестнадца- теричный код Восьмеричный код Операция SUB A 97 227 (А) := (А)-(А) SUB в 90 220 (А) := (А)-(В) SUB c 91 221 (А) := (A)-(C) SUB D 92 222 (А) := (A)-(D) SUB E 93 223 (А) (A)-(E) SUB H 94 224 (А) := (A)-(H) SUB L 95 225 (А) = (A)-(L) SUB M 96 226 (А) := (А)-(М) SU! D6 326 (А) = (А) -(байт2) (А) = содержимое А ; устанавливаются флажковые биты; Z,S,P,CY,AC (д)
Вычитание (с учетом состояния переноса) Мнемоника Шестнадца- теричный код Восьмеричный код Операция SBB А 9F 237 (А) : = (A) -(A)- состояние переноса SBB в 98 230 (А) : = (A)-(B)- состояние переноса SBB с 99 231 (А) . = (A) -(C)- состояние переноса SBB D 9А 232 (А) : = (A)- (D) - состояние переноса SBB Е 9В 233 (А): = (A)-(E)- состояние переноса SBB н 9С 234 (А). = (А)- (Н) - состояние переноса SBB L 9D 235 (А) : = (A)-(L)- состояние переноса SBB м 9Е 236 (А) : = (А) - (М) -состояние переноса SBI DE 336 (А) : = /zj о/ состояние (А) (байт 2) переноса Устанавливаются флажковые биты: Z,S,P,CY,AC (в) Операция И Мнемоника Шестнадца- теричный код Восьмеричный код Операция ANA А А7 247 (А): = (А)к(А) ANA В АО 240 (А): = (А)ь(В) ANA С А1 241 (А): = (А)/\(С) ANA D А2 242 (А) := (А)к(О) ANA Е АЗ 243 (А): = (А)/\(Е) ANA Н А4 244 (А) = (АМН) ANA L А5 245 (А) = (A)f\(L) ANA M А6 246 (А) = (АЖ(М) AN! Е6 346 (А) = (А)л(байт 2) (А) ^содержимое А ; л = И ; устанавливаются флажковые биты: Z,S,P>CY,AC (Ж) Операция ИЛИ Мнемоника Шестнадца- теричный код Восьмеричный код Операция OR А А В7 267 (А):=^ (AN(A) ORA В во 260 (А):= (AN(B) ORA С В1 261 (А): = (AN(C) ORA D В2 262 (А) . = (AN(D) ORA Е 83 263 (А) . = (AN(E) ORA Н В4 264 (А):= (АМН) ORA L В5 265 (А):= (AN(L) ORA М В6 266 (А). = (АММ) OR! F6 366 (А):= (АМбайт2) (А) = содержимое А ; v = ИЛИ ; устанавливаются флажковые 6иты:Х,$,Р,СУ,АС Операция ИСКЛЮЧАЮЩЕЕ ИЛИ Мнемоника Шестнадца- теричный код Восьмеричный код Операция XRA А AF 257 (А) = (А)® (А) XRA В А8 250 (А):= (А)® (В) XRAC А9 251 (А) — (А)® (С) XRA D АА 252 (А)(А)®(0) XRA Е АВ 253 (А):= (А)®(Е) XRA Н АС 254 (А):= (А)®(Н) XRA L AD 255 (A) — (A)®(L) XRA М АЕ 256 (А):^ (А)®(М) XR1 ЕЕ 356 (А): = (А)®(байт 2) (А) = содержимое А ; ©= ИСКЛЮЧАЮЩЕЕ ИЛИ ; устанавливаются флажковые биты: г,8}Р,СУ„АС (U)
Набор команд микроЭВМ 133 Перед началом операции сложения по команде XRA необхо- димо установить в нулевое состояние CY. Затем L загружается, в А, после чего суммируется содержимое А, Е и CY. Сумма А* пересылается в регистр L. После этого содержимое Н загру- жается в L и суммируется содержимое A, D и CY. Сумма А старших тетрад пересылается в регистр Н. На этом суммиро- вание двух чисел длиной по две тетрады заканчивается. Все это применимо и к суммированию байтов. Приведенный выше пример десятичного сложения подтверждает, что соответству- ющее двоичное сложение выполнено корректно. При выполнении команд вычитания наблюдаются некоторые отличия от описанных выше примеров. Известны команды вы- читания, при выполнении которых либо пользуются, либо не пользуются «займом». Если требуется произвести заем из по- зиции старшего бита, то это обстоятельство отмечается при- своением значения, равного 1, флажковому биту переноса. Этот перенос учитывается при выполнении следующей коман- ды SB (вычитание). Такое вычитание, выполненное с тетрада- ми, выглядит следующим образом: СБ -тетрада Шаг 2 (SBB2) МБ-тетрада Шаг 1 (SBB1) Н «- D «- Н-А*«~ 1110 1010 ----X ч 0001 „Заем” 1110 1011-L 1101-Е -----х 1110-A*-L - 2031О - 173ю ЗОю е (aTwaT^OWCY) Алгоритм этого вычитания имеет ту же структуру, что и алго- ритм сложения чисел двойной длины. В случае логических операций, которые может выполнять МП 8085А, одним из источников данных является аккумуля- тор, а другим — регистр данных или ячейка ЗУ в зависимости от типа команды данной группы. В частности, команда ANA позволяет определить логиче- скую сумму всех битов двух чисел без учета переноса. Коман- да ORA реализует функцию ИЛИ для битов двух чисел, а команда XRA — функцию ИСКЛЮЧАЮЩЕЕ-ИЛИ для каж- дых двух битов. Логические команды особенно эффективны при
134 Глава 3 использовании специальных приемов в ходе обработки данных. Так, например, по команде ANA из байта данных можно уда- лить определенное число битов. Это связано с тем, что если при реализации функции И одна из входных переменных рав- на 0, то на выходе также появится 0. С помощью этой коман- ды можно убрать определенные биты данного числа, вводя ну- ли в соответствующие разряды другого числа. В результате фактически выполняется маскирование единиц в указанных би- товых разрядах (рис. 3.20). Рис. 3.20. Маскирование битов с помощью И-команды (ANA г). Функция ИЛИ присваивает определенным битам значе- ние 1. Эта операция применяется в приборах и регуляторах, когда с помощью некоторого бита, входящего в состав байта команды, требуется обеспечить сигнал, например, для управ- ления положением клапана горелки. При выполнении команд сравнения содержимое аккумуля- тора А сравнивается с содержимым определенного регистра. В действительности в ходе операции сравнения происходит вы- читание, и если в результате получается 0, то флажковый бит нуля переходит в состояние 1. Если данная величина оказыва- ется больше, чем содержимое аккумулятора А, то в состоя- ние 1 устанавливается флажковый бит переноса CY (рис. 3.21). Таким образом, эти операции позволяют определить, равно ли содержимое А содержимому регистра г или М-й ячейки ЗУ или же меньше (больше). Функция сравнения соответствует функции принятия реше- ния, с помощью которой можно выяснить, удовлетворяет ли какой-либо результат определенному условию. На основе этого решения в программе выполняется ветвление с помощью команд условных переходов, которые реагируют на значения
Набор команд микроЭВМ 135 флажковых битов, определенные с помощью команды сравне- ния. Следует отметить, что при выполнении операции сравне- ния содержимое А не изменяется. Функция ИСКЛЮЧАЮ- ЩЕЕ-ИЛИ позволяет определить равенство двух чисел, однако содержимое аккумулятора А теряется, так как в него зано- СМРг (сравнить с содержимым регистра) (А)-(г) r S SS А 1 1 / В ООО С 001 D 01 О £ 01 1 И 100 L 101 | У | О | / | / I / I S I S I S~| СМР г Флажковый бит Z-1, если (А) = (г) Флажковый бит переноса CY=1> если (А) < (г) Изменяются флажковые биты Z,S,P,CY, АС СМР М (сравнить с содержимым памяти) (А)-((Н, L)) I / I О | 7 [ Z I / I / I / I О~] СМРМ Флажковый бит Z=1, если (A) = ((H,L)) Флажковый бит переноса CY=1, если (А)<((н, L)) Изменяются флажковые биты Z, G,P,CY,AG CPI (сравнить с непосредственным операндом) (А)-(байт 2) /| >1 Ф! Ф! '|о Байт 2 СР! Флажковый бит 2=1, если (А)=(байт 2) Флажковый бит переноса CY=1, если (А) < (байт 2) Изменяются флажковые биты Z,S,P,CY,AC (а) Рис. 3.21. Команды сравнения СМР и CPI. а — наглядное представление команд; б — команды СМР и CPI.
136 Глава 3 Сравнить Ас г, М или байтом 2 Мнемоника Шестнадца- теричный код Восьмеричный код СМ РА BF 277 СМР В В8 270 CM PC В9 271 CMP D ВА 272 CMP Е ВВ 273 СМР Н ВС 274 CMP L BD 275 СМР М BE 276 СР! FE 376 Флажковый бит Z=1, если (А) = (г; Флажковый бит С¥=1,если (А) <(г) Аккумулятор А остается без изменений (б) Рис. 3.21 (продолжение). сится результат выполнения операции ИСКЛЮЧАЮЩЕЕ- ИЛИ. При этом флажковый бит1* нуля указывает, чему равно содержимое А — 0 или 1. 3.7. Команды сдвига Во всех МП применяются команды сдвига, которые произ- водят сдвиг битов в байте либо на один разряд влево, либо на один разряд вправо, как показано на рис. 3.22. Существуют две группы операций сдвига, а именно группа операций, сдви- гающих биты через разряд флажкового бита переноса, значе- ние которого может при этом изменяться, и группа операций, которые выполняются без участия флажкового бита переноса. При сдвиге влево с помощью группы операций сдвига, проте- кающих без участия флажкового бита переноса, старший бит после сдвига из байта вводится снова в разряд младшего би- та этого же байта. В действительности здесь происходит вра- щение битов влево, т. е. циклический сдвиг. При сдвиге вправо младший бит выдвигается из байта и затем вводится в стар- ший разряд этого же байта (вращение направо). При выполнении операций сдвига с участием флажкового бита переноса он становится девятым битом, так что при сдви- ге вправо младший бит, выдвигаемый из байта, будет заменен флажковым битом переноса. При выполнении операции сдвига влево старший бит сдвигается в разряд флажкового бита пе- D Флажковый бит нуля равен 1 в том случае, когда результат опера- ции содержит нули во всех разрядах; последнее означает, что операнды поразрядно совпадают. — Прим. ред.
Аккумулятор А (а) Рис. 3.22. Механизм циклического сдвига при выполнении операции сдвига (сдвиг влево). а —механизм циклического сдвига; б — команды сдвига.
138 Глава 3 реноса, значение которого затирается. При этом младший бит заменяет флажковый бит переноса. Операции сдвига применяются при выполнении различных сложных операций, например быстрое умножение на 10, кото- рое необходимо при преобразовании двоичного представления числа в десятичное. Операция сдвига осуществляется следую- щим образом: производятся два последовательных сдвига влево, т. е. осуществляется умножение на 4, затем к полученному ре- зультату добавляется множитель (умножение на 5), и полу- ченный промежуточный результат вновь сдвигается на один разряд влево, т. е. производится умножение на 10. 3.8. Команды приращений (инкремент и декремент) Эти команды либо увеличивают, либо уменьшают содер- жимое одного или двойного регистра на 1 (рис. 3.23 и 3.24). Результаты выполнения этих команд влияют на значения флажковых битов. Кроме того, эти команды используются для управления счетом точно так же, как в двоичных счетчиках при комбинационной логике. По команде INC (инкремент) можно увеличивать опреде- ленное число на единицу каждый раз, когда в программе вы- полняется какой-либо цикл. Если затем требуется остановить какую-либо подпрограмму после 50-го шага, то это можно сде- лать с помощью индекса, хранящегося в определенном регист- ре с начальным значением, равным 0. Этот индекс увеличива- ется после каждого выполнения (шага) подпрограммы на 1 и сравнивается с 50. Сравнение производится по команде СМР, которая сравнивает текущий индекс с числом 50. Результат сравнения определяет значение флажкового бита нуля, который инициирует условный переход из данного программного цикла. 3.9. Команды прямого ввода данных (команды с непосредственной адресацией) Операнд этих команд содержит данные, которые необходи- мо обработать. В случае команды LXI операнд состоит из двух байтов, а в случае команды MVI — из одного (рис. 3.25). Команды LXI предназначены для загрузки в двойной регистр двухбайтового числа, команды MVI—для загрузки в один ре- гистр однобайтового числа. Команда LXI SP загружает указатель стека. Эта команда обычно используется в начале программы, так как до начала выполнения программы указателю стека необходимо сооб- щить, какая именно часть ЗУ выделена под стек. Данной командой указывается первый адрес стека. Если не поместить
(a) INR г (инкремент) (r) +-(r) + 1 Изменяются флажковые биты Z,S,P, АС [ О | О | Р | О | Р | / | о [~0~| DCR г (регистр декремента) (г)~-(г)-1 Изменяются флажковые биты Z,S,P, АС |о|о|р|р|р|/|о| 7 1NP М (запоминание инкремента) ((Н, L))*~((H, L)) + 1 Изменяются флажковые биты Z,S,R,AC О I О I Г I / I О [ / I Р~[~О~ DCR М (декремент М) ((Н, L))4(H ,L))~1 Изменяются флажковые биты 2,S,P,AC Увеличение на / содержимого регистра (d) о о| / | /1 о | /1о 17 Г D D D А В G D Е Н Д / / J ООО 0 0 1 0 1 0 О f 1 / 0 0 1 0 1 Мнемоника Шестнадцате- ричный код Восьмеричный код Операция JNR А ЗС 074 (А) (А)+1 /NR В 04 004 (В):~ (в) + 1 JNR С ос 014 (с) : = (с)+1 1NR D 14 024 (о) (D)J-I 1NR Е 1G 034 (Е):~ (е)+1 1NR Н 24 044 (Н) : = (н)±1 INR L 2G 054 (L) := (L)+f INR М 34 064 (М) : = (М) + 1 Устанавливаются флажковые биты z,S,P,AG Увеличение на 1 содержимого регистра (в) Мнемоника Шестандцате- ричный код Восьмеричный код Операция DGR А 3D 075 (А) ;= (А)-1 DGR В 05 005 (В) : (В) - 1 DCR С OD 015 (С) : = (С} - 1 DCR D 15 025 (В) : = (В)-1 DCR Е 1D 035 (£):= (Е)-1 OCR Н 25 045 (Н) : = (Н)-1 OCR L 2D 055 (L):= (L)-l DCR М 35 065 (М) : = (М)-1 Устанавливаются флажковые биты Z,SrP}AG Рис. 3.23. Команды инкрементирования и декрементирования. а — наглядное представление команд; б — команды инкрементирования; в — команды де- крементирования.
140 Глава 3 INK гр (инкремент двойного регистра) (rh )(rl+- (rh) (г l)+1 О О Я ° __________I__L IN* rP Флажковые биты не изменяются OCX гр (декремент двойного регистра) (rh)(rl~-(rh)(rl)-1 [о О R Р 1 DCX гр Флажковые биты не изменяются ЯР 00 01 10 п Двойной регистр ВС DE BL SP ЯР 00 01 10 Двойной регистр ВС DE HL 11 SP / О Увеличение на 1 содержимого двойного регистра (6) Мнемоника Шестнадца- теричный код Восьмерич- ный код Операция JNX В ОЗ 003 (ВС): = (ВС)+1 1NXD 13 023 (DE):-(DE)+1 1NXH 23 043 (HL):= (HL)+1 1NXSP 33 063 (SP)(SP)+1 (ВС)-содержимое регистра ВС; SP-указатель стека; флажковые биты не устанавливаются Уменьшение на 1 содержимого двойного регистра (в) Мнемоника Шестнадцате- ричный код Восьмерич- ный код Операция DCX В OB 013 (ВС): = (ВС) -1 DCX D IB 033 (DE):=(DE)-I DCXH 2B 053 (HL): = (HL) - 1 DCX SP 3B 073 (SP): = (SP) - f (ВС) - содержимое регистра ВС; SP-указатель стека; флажковые биты не устанавливаются Рис. 3.24. Команды INX гр и DCX гр. а — наглядное представление команд; б — команды INX; в — команды DCX. команду LXI SP в начале программы, то указатель стека нач- нет работать с нулевого или даже отрицательного адреса, что приведет к ошибке в выполнении программы. В командах LXI и MVI в поле операндов находится кон- станта в виде фиксированного числа, которая при выполнении программных циклов определяет, сколько раз должен выпол- няться данный цикл. При описании команд INC и DCR приво- дился пример, в котором программный цикл выполнялся 50 раз. Число 50 можно поместить в регистр с помощью команды с непосредственной адресацией еще до начала выпол- нения цикла, чтобы затем при выполнении соответствующей
Пересылка данных из байтов 2 и 3 в R,M или RP Двойной регистр RP Пересылка данных из байта 2 в R и М (6) ВС DE 00 01 Мнемоника/ данные Шестнадца- теричный код Восьмеричный код Операция HL ю MVI А, данные ЗЕ 076 (А) := байт 2 SP 11 MVI В, данные Об 006 (В) ; = байт 2 MVI С, данные ОЕ 016 (С) : = байт 2 MVI D, данные 16 026 (D) := байт 2 MV! Е, данные 1Е 036 (Е) : = байт 2 MVI Н, данные 26 046 (Н): = байт 2 MVI L, данные 2Е 056 (L ) байт 2 MVI М, данные 36 066 (М): = байт 2 (А)-содержимое А- флажковые биты не изменяются г D D D Пересылка данных из байтов 2 и 3 в RP (в) А В 1 1 1 ООО Мнемоника/ данные Шестнадцате- ричный код Восьмеричный код Операция С 00 1 LX1 В, данные 16 01 001 (ВС) -.-байты Зи 2 D 010 LX! D, донные 16 11 031 (DE) : кбайты 3 и 2 Е 01 1 LXIH, данные 16 21 041 (HL): - байты Зи2 И 100 LXI SP, данные 16 31 061 (SP):-байты Зи2 L 10 1 (ВС)-содержимое ВС; флажковые биты не изменяются Рис. 3.25. Команды непосредственной пересылки MOV. а — наглядное представление команд; б — команды MVI; в — команды LXI.
142 Глава 3 подпрограммы на каждом прогоне цикла уменьшать это число (50) на единицу до тех пор, пока в результате не получится 0. После этого совершается переход из цикла и продолжается вы- полнение основной программы. В случае двухбайтовых операн- дов необходимо помнить, что байт, расположенный сразу после кода команды, является младшим, а следующий байт — стар- шим. Такая структура сохраняется для всех команд, в кото- рых используется двухбайтовое представление данных. Однако это правило выполняется не для всех типов МП. В некоторых из них принят другой порядок расположения байтов. ЗЛО. Команды перехода и ветвления Команды перехода и ветвления приводят к таким измене- ниям в ходе выполнения программы, в результате которых прекращается выполнение одних ветвей программы и реализу- ются другие ветви программы (промежуточные подпрограм- мы). Эти изменения позволяют либо организовывать програм- мные циклы, которые за счет многократного повторения выпол- няют определенную операцию (обратный переход), либо ис- ключать некоторую часть основной программы (прямой пере- ход), либо переходить к подпрограмме, которая должна вы- полнить какую-либо определенную операцию, после чего бу- дет совершен возврат в основную программу. Для осуществления прямых и обратных переходов исполь- зуются команды как условного, так и безусловного перехода, а при вызове подпрограмм применяются команды CALL и RETURN, которые также могут быть как условными, так и без- условными. Под условной подразумевается такая операция, в данном случае операция ветвления, которая будет выполнена, если контрольная переменная, например флажковый бит, при- мет определенное значение. Программное ветвление встречается и в нашей повседнев- ной жизни. В качестве примера можно указать на программу проведения досуга, которая содержит подпрограмму перекапы- вания садового участка. В основной программе «досуг» име- ется ветвление «перекапывание садового участка», которое выполняется условно. Как известно, перекапывание садового участка, должно быть выполнено, во-первых, когда в этом есть необходимость, а во- вторых, при благоприятной погоде. В подпрограмме «перека- пывание садового участка» имеется ряд циклов, которые вы- полняются за счет многократных повторений. В качестве при- мера можно назвать операцию, когда нужно воткнуть лопату в землю и отбросить ее. Эта операция повторяется до тех пор, пока не будет достигнута граница отведенного под обработку
Набор команд микроЭВМ 143 участка. После этого совершается условный переход (условный, так как фиксируется граница участка) в исходное положение и вскапывание повторяется. Операция «перекапывание» соот- ветствует программе с одним циклом, однако каждый проход до границы участка образует еще один цикл. Подпрограмма «перекапывание садового участка» заканчивается тогда, когда будет установлено, что вся площадь садового участка действи- тельно перекопана. Команды перехода МП включают также безусловные пе- реходы, которые выполняются в момент появления соответст- вующей команды, и условные переходы, выполнение которых зависит от значения определенного флажкового бита. В част- ности, известны переходы, выполнение которых зависит от на- личия переноса, нулевого, отрицательного или положительного результата, четности и т. д. Команды перехода не изменяют значений флажковых битов. На рис. 3.26—3.28 приведены команды перехода в том виде, который они имеют в наборе команд МП 8085А. Значения флажковых битов определяются результатом вы- полнения предшествующих операций. Так, например, перед командой перехода может быть выполнена команда сравнения, которая фиксирует равенство двух чисел. В случае равенства триггер флажкового бита нуля устанавливается в состояние 1. На основе результата операции сравнения принимается реше- ние о выполнении или невыполнении перехода или ветвления. С контрольными переменными, которые появляются в процессе выполнения программы, мы уже познакомились ранее при описании автоматической стиральной машины. В этом примере контрольными переменными были ТЕМР80 и NDH, т. е. ин- формация на уровне флажковых битов, которую обеспечивала схема управления автоматом, если вода нагревалась до уровня 80 °C или же в барабане достигался требуемый уровень воды соответственно. На основе этих данных в программе стирки выполнялся (или не выполнялся) следующий шаг. Флажковые биты в МП также являются контрольными переменными, ко- торые многократно опрашиваются в ходе выполнения про- граммы, и, после того как опросы этих переменных дают ут- вердительный ответ (Да), обычно происходит требуемый пе- реход. Команды CALL и RETURN являются командами перехода к подпрограммам и возврата из них (рис. 3.27 и 3.28). Следу- ет отметить, что в команде RETURN отсутствует указание ад- реса в качестве операнда. Этот адрес задает команда CALL, а команда RETURN только обеспечивает возврат (обратный переход) именно по этому адресу. Адрес возврата (2 байт) временно хранится в стеке. Идентификацию ячейки ЗУ, в ко-
Условие А7...А0 А15...А8 1 1 С С с 0 1 0 Младший байт адреса Старший байт адреса JMP адрес п Восьмеричный код: 303 Шестнадцатеричный код: СЗ Флажковые биты не изменяются Переход не связан с каким-либо условием Старший Младший бит РСН Байт PCL Байт Счетчик команд МП Команда А7...А0 А15...А8 1 / 0 0 0 0 1 1 Младший байт адреса Старший байт адреса Адрес условного перехода п Условный переход: биты ССС определяют условие, при котором выполняется переход (см. таблицу) Флажковые биты не изменяются Старший РСН Байт PCL Байт Счетчик команд МП Младший Условие ССС NZ - результат i=O(Z = 0) ООО Z - результат -0 (Z=1) 0 0 1 NC-нет переноса (CY=O) 0 1 0 С -есть перенос (CY=1) 0 1 1 РО -результат нечет н.(Р=0) 1 0 о РЕ - результат четный (Р=1) 7 0 / Р - результат положит.(5=0) 1 1 0 М -результат отрицат.(5-1) 1 1 1 (6) (°) Мнемоника/адрес Шестнадцатерич - ный код Восьмеричный JMPn’> СЗ 303 JCn” флажковый бит СУ=1 DA 332 JNCnV флажковый бит СУ=О D2 322 JZ п2> флажковый бит Z=I СА 312 JNZnV срлажковый бит Z=0 С2 302 JM п& флажковый бит S=13) FA 372 JPnz) флажковый бит S=03^ F2 362 JPE п2) флажковый бит Р=1 ЕА 352 JPO П2> флажковый бит Р=0 Е2 342 Безусловный; 2) условный, зависящий от флажкового бита; S-sign = MSB; MSB = O: S = 0; MSB = 1: S = 1 (MSB-старший разряд) Рис. 3.26. Команды перехода (условного и безусловного). а — наглядное представление команд; б — команды перехода.
Рис. 3.27. Команды CALL (условные и безус- ловные). наглядное представление команд; б — команды CALL. Стек в ЗУ 100 9 / байт 778 SP — Безусловная команда CALL SP-1 SP-2 Команда А7...А0 О О 768 758 73s Этап 1 15... АВ Счетчик команд МП А7... АО (О) А15...А8 ((SP)-1)- ((SP)-2)- (SP) РС CALL адрес (CALL) ССALL (условие) адрес (условный переход) -(РСН) -(PCL) - (SP) -2 (байтЗ)(6айт2) Условная команда CALL Команда Младший байт адреса Старший байт адреса 1 1 С С с 1 О О Младший байт адреса Старший байт адреса Кодирование ССС проводится согласно рис. 3.26 Флажковые биты не изменяются Команда CALL (6) Мнемоника/адрес Шестнадцатеричный код Восьмеричный код CALL nJ) CD 315 CNZ п2) срлажковый бит 2=0 С4 304 CZ п2) флажковый бит Z=1 СС 314 GNC п2' флажковый бит СУ=О D4 324 СС п2> флажковый бит СУ= / DG 334 СРО п 2> флажковый бит Р=О Е4 344 СРЕ п2> флажковый бит Р=1 ЕС 354 СР п2> флажковый бит 8=0 F4 364 СМ п2) флажковый бит S = 1 PC 374 V Безусловный; 2> условный, зависящий от флажкового бита
Стековое ЗУ (стек) Флажковые биты не изменяются (а) RET (возврат) CRET (условие) (условный возврат) (PCL)^-----((SP)) (PCH)^------((SP) +1) (SP) -------((SP) + 2) Обратный переход (возврат) (6) Мнемоника/адрес Шестнадцатеричный код Восьмеричный код RET 1>3> С9 311 RC 2)3) флажковый бит CY^I D8 330 RNC 2>3> флажковый бит CY=O DO 320 RZZ>3> флажковый бит Z=1 С8 310 rnz2>3> флажковый бит 2=0 со 300 rm2)3) флажковый бит S^I F8 370 rp2)3) флажковый бит S=0 F0 360 RPE 2)3) флажковый бит Р=1 Е8 350 RPO2)3} срлажковый бит Р=0 ЕО 340 1) Безусловный; условный; 3) этим переходам должна предшествовать команда типа CALL Рис. 3.28. Команды RET (команды возврата). а — наглядное представление команд; б — команды возврата.
Набор команд микроЭВМ 147 торой находится адрес возврата, обеспечивает указатель сте- ка, т. е. определенный регистр МП. Следствием такой автоматической регистрации адреса воз- врата является то обстоятельство, что после команды CALL всегда должна следовать команда RETURN, и эти возвраты нельзя обеспечить с помощью обычной команды перехода, по- тому что при этом правильная работа указателя стека будет нарушена1). С другой стороны, в такой ситуации вполне воз- можно применить команду POP, хотя при этом и будет поте- рян адрес возврата. Однако последнее обстоятельство значения не имеет, так как при возврате произойдет нормальный пере- ход с правильной адресацией. Команда POP обеспечивает та- кое же приращение содержимого указателя стека, как и в слу- чае команды RETURN. В результате управление указателем стека этой командой перехода не приведет к нарушению нор- мального режима работы. При появлении команды CALL адрес, который зафиксиро- ван в счетчике команд, увеличится на единицу и затем будет в два приема передан в стек, причем сначала старший байт, а затем младший (рис. 3.27). После передачи счетчик команд считывает из команды CALL операнд, т. е. новый адрес, после чего и происходит требуемый переход. По команде RETURN сначала выбирается младший байт адреса возврата, а затем старший (рис. 3.28). Адресная информация пересылается пря- мо в счетчик команд. Особой командой перехода является PCHL, которая загру- жает в счетчик команд (PC) содержимое двойного регистра HL. При этом содержимое регистра L передается в младший байт счетчика команд, а содержимое регистра Н — в старший байт. Эта команда особенно удобна для выполнения такого пе- рехода, при котором результат операции указывает, в какую подпрограмму или в какой цикл должен произойти данный пе- реход. Адрес перехода при этом может быть подготовлен так- же и арифметическим способом и помещен в HL, после чего команда PCHL осуществляет соответствующий переход. Рассмотренные команды перехода находят широкое приме- нение в ряде основных процедур перехода и ветвления, струк- турные схемы которых приведены на рис. 3.29. В схеме, представленной на рис. 3.29, а, происходит опрос результата предыдущей операции, в соответствии с которым 1> Команда CALL заносит в стек адрес следующей команды — адрес возврата, а команда RETURN извлекает этот адрес из стека и заносит его в счетчик команд. Поэтому при организации возврата с помощью обычной команды в стеке окажется не извлеченный из него адрес возврата, что приведет к нарушению предусмотренной программой работы стека. — Прим, ред.
148 Глава 3 Рис. 3.29. Структуры с ветвлениями и циклами. либо программа продолжается, либо производится ветвление. Практический пример: при чтении данных с кассетного магни- тофона в общем случае выполняется одна проверка ошибок за- писи. Очевидно, что при этом требуется обеспечить сообщение об ошибке с указанием адреса. Обнаружение ошибки вызыва- ет ветвление, которое позволяет сообщить о данной ошибке или решить, надо ли продолжать после этого выполнение пер- воначальной программы. Здесь можно воспользоваться услов- ной командой CALL с RET в качестве команды возврата. Структурная схема, показанная на рис. 3.29,6, иллюстриру- ет передачу управления. Программа может продолжаться по одной из двух возможных ветвей. Приведем практический при- мер. В случае поставки товаров во Францию в накладных тре- буется указывать франки, а при поставке в Англию — фунты стерлингов. В результате появляются два варианта расчета, т. е. две ветви программы, которые при дальнейшем выполне- нии программы снова объединятся в несколько измененном ви-
Набор команд микроЭВМ 149 де, когда будет производиться печать величины денежной сум- мы. В случае большого числа ветвей блок-схема выглядит так, как показано на рис. 3.29, в. На рис. 3.29, г показана структурная схема так называемого цикла. Здесь на основе опроса происходит обратный переход. Примером подобного цикла является вычитание одного числа из другого до тех пор, пока результат вычитания не станет равным нулю или не произойдет изменение его знака. Такая операция выполняется при делении одного числа на другое. Наконец, может понадобиться переход в определенную подпрограмму, как показано на рис. 3.29, д. При этом выполне- ние программы прерывается, так как необходимо сначала об- работать в этой подпрограмме какие-либо переменные вели- чины или промежуточные данные. Затем следует обратный пе- реход и выполнение основной программы продолжается. Данная подпрограмма может быть частью другой подпро- граммы, которая в свою очередь может являться подразделом основной программы. Аналогично обстоит дело и с циклами. В подобной ситуации говорят о вложенных программах или подпрограммах. На рис. 3.30 приведен пример такой ситуации. В левой части рисунка показана основная программа, из ко- торой необходимо осуществить переход для выполнения не- которого специального режима обработки данных. Программа совершает переход в подпрограмму, которая обращается к второй подпрограмме. Во второй подпрограмме имеется внут- ренний цикл, например предназначенный для повторяющейся процедуры обработки данных (CJMP). В свою очередь вторая подпрограмма вызывает третью подпрограмму (CCALL). В по- следней подпрограмме выполнение программы может прервать- ся, если будут выполнены соответствующие условия (переход из CJMP в RET). Следует отметить, что переход из CJMP мо- жет произойти в предыдущую подпрограмму косвенным путем через RET в конце третьей подпрограммы. Если допускается прямой переход во вторую подпрограмму, в результате нару- шается правильная работа указателя стека. Мы еще вернем- ся к этой ситуации при разборе примеров других программ. Вторая подпрограмма находится внутри второго цикла с условным оператором CRET. При ответе «истина» происходит возврат в основную программу, а при ответе «ложь» — пере- ход во вторую подпрограмму. В данном примере по команде JMP происходят как прямые, так и обратные переходы. При использовании команды CALL осуществляется переход из одной части программы в подпро- грамму, а затем возврат в основную программу. По этой при- чине команды CALL часто называют командами перехода к подпрограммам.
I I I I 1 I (a) I i 1 Рис. 3.30. Вложенные циклы, a —программа; бструктурная схема.
Набор команд микроЭВМ 151 3.11. Инициирование прерывания В предыдущих разделах отмечалось, что в ходе последова- тельного выполнения программы работа микроЭВМ может быть прервана с помощью внешних сигналов от периферийных схем и аппаратуры, которым требуется установить связь с МП. При этом происходит запрос на прерывание, который МП дол- жен «услышать» после того, как будет закончена текущая команда. Этот режим осуществляется с помощью команды EI (Enable Interrupt — разрешение прерывания). МП можно сде- лать «глухим» относительно прерываний с помощью команды DI (Disable Interrupt — запрещение прерывания). МП должен быть невосприимчивым к запросам на прерывание, если пре- рывание является в данный момент нежелательным, например в ходе выполнения подпрограммы, при прерывании которой может быть потеряна важная информация. При инициировании прерывания дается запрос на прерыва- ние (INTR), который МП может в данный момент либо при- нять, либо проигнорировать. Если этот запрос принят, то МП сообщает об этом сигналом INTA (Interrupt Acknowledge — подтверждение прерывания), и одновременно на шину данных поступает информация о том, какое именно внешнее устройст- во выдало запрос на прерывание. При этом, если по отдель- ным сигнальным линиям, связанным с различными внешними устройствами, которые могут вызывать прерывание, потребует- ся передать кодированное сообщение на шину данных, понадо- бится внешний шифратор, преобразующий соответствующий сигнал в двоичную форму (рис. 3.31). Сигнал INTA запускает шифратор, который формирует двоичный код, поступающий на шину данных. Для кодирования запроса на прерывание можно использовать, например, приори- тетный шифратор типа 74LS148. Как только становится известно, от какого именно перифе- рийного устройства поступил запрос на прерывание, МП со- вершает переход в определенный начальный адрес, по кото- рому вызывается программа обслуживания данного устройст- ва. В МП 8085А таким образом выполняется восемь различных запросов на прерывание. Для этих запросов предназначены команды RST, имеющие восьмеричную форму Зп7, где и — ука- затель адреса, который относится к определенному внешнему устройству. При появлении команды RST содержимое счетчика команд пересылается в стек, после чего происходит переход по адресу, равному восьмикратной величине адреса периферий- ного устройства, выдавшего запрос на прерывание. Если код, посланный на шину данных, равен нулю, то пере- ход происходит в нулевую ячейку ЗУ, что совпадает с установ-
152 Глава 3 ППЗУ Стек Рис. 3.31. Выполнение запроса на прерывание. кой в нуль, т. е. начальным адресом в начале выполнения про- граммы. При двоичном коде на шине данных, равном 1, проис- ходит переход по адресу 8, при коде, равном 2, — по адресу 16 и т. д. Чаще всего сначала осуществляется переход в указан- ные ячейки ЗУ, а затем в определенную программу обслужива- ния (рис. 3.32). Кроме входа для сигнала прерывания INTR, МП 8085А име- ет ряд отдельных входов для запросов на прерывание. Если один из этих входов активизируется, то МП сразу гке опреде- ляет, какое именно внешнее устройство привело к появлению запроса на прерывание. Для этих входов на стр. 153 приведены параметры адресов рестарта, куда происходит переход программы после подтверж- дения запроса на прерывание. Входы запросов на прерывание могут маскироваться. В ре- зультате разрешение определенного запроса на прерывание происходит только тогда, когда соответствующий вход не мас- кируется и перед этим в IE-триггер поступает команда IE.
Набор команд микроЭВМ 153 RST п (рестарт) ((SPM)^(PCH) ((SP)~2)^-(PCL) (SP)^—(SP)-2 (PC) ---8*NNN | / | / |л/|л/|л/| / | J | f|RST n Флажковые биты не изменяются________ Адреса рестарта п шесгпнадцат. восъмерич. о 'о о^о о'' 'о о оо о о' 1 0008 000010 2 0 0 10 000020 3 0018 000030 ,4 0 0 2 0 0 0 00 4 0 5 0 0 2 8 000050 6 0030 000060 7 "° 08 8' 0 0 ° 7 ° , ____________________А—. ____________ .... Сметчик команд после рестарта 15 14 15 12 11 10 9 8 7 6 5 4 3 2 1 0 j о |о | о | о |о |о |о | о |о |о |/v |/у|л/|о |о |О | © -SP после операции п (а) Jsp]-SP до операции (6) Команды RST Мнемоника Шестнадцате- ричный КОО Восьмерич- ный код Шестнадцатерич- ный код Восьмерц ныи код ч- Счетчик команд RSTO С7 307 0000 — 000000 -а*. PC RST 1 CF 3/7 0008 -* 000010 PC RST 2 D7 327 0010 -* 000020 PC RST3 DF 337 0018 -> 000030 PC RST4 Е7 347 0020 000040 PC RST5 EF 357 0028 — 000050 Т*. PC RST6 F7 367 0030 000060 —fc. PC RST7 FF 377 0038 000070 PC Рис. 3.32. Команды RSTn. а — наглядное представление команд; б — команды RST. Установку триггеров в состояние маскирования прерывания осуществляет команда SIM (Set Interrupt Mask — установить маску прерывания) (рис. 3.33). SIM относится к однобайтовым Входные линии Восьмеричный адрес Шестнадцатеричный адрес TRAP 0448 24le RST5,5 0548 2Цв RST6,5 0648 ^416 RST7,5 0748 3Cie
154 Глава 3 командам и пересылает содержимое аккумулятора в регистр управления прерыванием, который находится в МП. Управляю- щие данные необходимо описать в формате, показанном на рис. 3.33. С помощью трех младших битов можно считать со- держимое регистра маски прерывания, однако только в том случае, когда четвертый бит (разрешение на установку ма- ски) равен 1. Таким образом, входы сигналов прерывания можно сделать либо «слышащими», либо «глухими». Этот ре- жим не распространяется на входную линию TRAP, где за- прос получает разрешение немедленно в любое время. Команда SIM 0 0 1 1 0 0 О 0 Содержимое аккумулятора, введенное ранее 7 6 5 4 3 2 1 0 SOD SOE X R7,5 MSE M7,5 Мб,5 М5,5 ------- Маска RST 5,5 ----------- Маска RST 6,5 ----------- Маска RST 7,5 ___________Разрешение на уста- новку маски ----------- RESET RST 7,5 ----------- Не определен ___________Разрешение последова- тельного вывода данных ----------Последовательный ___________вывод данных Тег reset Маска RST 5,5 Маска RST 6,5 Маска RST 7,5 если бит 0 = 1 если бит 1=1 если бит 2=1 если бит 0=0 если бит 1=0 если бит 2=0 Установка маски (бит маски =1) означает блокиро- вание соответствующего прерываемого входа Рис. 3.33. Команда SIM. Информацию, полезную для применения в системе преры- вания, можно считать с помощью команды RIM (Read Inter- rupt Mask — считать маску прерывания) (рис. 3.34). Биты, на- чинающиеся с буквы I, указывают, обрабатывается ли в дан- ный момент прерывание или же происходит ожидание этой обработки. Команда RIM часто применяется для сохранения состояния регистра маски прерывания после появления сигнала
Набор команд микроЭВМ 155 TRAP!). Эту команду следует подавать сразу после появления соответствующего прерывания. Одной этой команды вполне до- статочно для того, чтобы «спасти» указанное выше состояние. (7) Команда RIM (О) 0 0 1 0 0 0 0 0 Содержимое аккумулятора А после выполнения команды RIM SIP 17,5 16,5 15,5 IE М7,5 Мб,5 М5,5 I--------Маски прерывании ---------Флажковый бит прерывания ---------Удержание прерываний Последовательный ввод данных Адреса рестарта Шестнадцатерич- ный код Восьмерич- ный код Trap RST 5,5 RST 6,5 RST 7,5 24 20 34 ЗС 044 054 064 074 Рис. 3.34. Команда RIM. Входная линия RST7,5 отличается от других RST-линий тем, что срабатывает по фронту импульса, т. е. является динамиче- ским входом. Тот факт, что входная линия RST7,5 активизиро- вана, регистрируется и МП в надлежащий момент времени по- лучает информацию об этом событии. Маскирование никак не влияет на состояние триггеров. Приоритетный порядок удовлетворения запросов на преры- вание выглядит следующим образом: TRAP, RST7,5, RST6,5, RST5,5 и затем INTR. Проблема приоритетности возникает при наличии нескольких запросов на прерывание, которые об- разуют очередь. Как уже отмечалось выше, в случае сигнала TRAP прерывание выполняется немедленно независимо от со- стояния IE-триггера. о Прерывание TRAP представляет собой немаскируемое RESTART-npe- рывание, т. е. не маскируется и выполняется независимо от сигнала разре- шения прерывания EI. Оно имеет наивысший приоритет. — Прим, ред.
156 Глава 3 Команда SIM может также изменять состояние SOD-триг- гера1* (рис. 3.33). Выход этого триггера связан с внешними схемами. Через этот выход можно переслать последовательный набор битов или же использовать его в качестве управляю- щего выхода для каких-либо внешних устройств. Содержимое триггера не изменяется, если 6-й бит (SOE)* 2) равен 0. После сброса SOD-триггер устанавливается в нулевое состояние. Как мы уже видели выше, в случае команды RIM состоя- ние регистра прерывания считывается в аккумулятор А (рис. 3.34). Младшие три бита снова образуют маску прерыва- ния, которая действует в текущий момент времени. Четвертый бит (IE) является флажком разрешения прерывания, который указывает, подготовлена ли система прерывания в целом для обработки сигнала прерывания. Текущее состояние прерывания считывается из битов 4—6. Бит SID обеспечивает последова- тельный вывод данных через внешний SID-вывод корпуса DIP. С помощью этого вывода и соответствующей программы мож- но осуществить выборку последовательного набора битов, ко- торые поступают через SID-вывод. Сразу же после поступления запроса на прерывание МП может на некоторое время задержать обработку этого запроса для того, чтобы обработать ранее поступившие прерывания с помощью команды DI в начале исполнения данной сервисной подпрограммы. Это означает, что если ранее был послан запрос с высоким приоритетом, то новый запрос будет проигнориро- ван. Некоторое улучшение в эту несколько идеализированную ситуацию вносит возможность маскирования входов прерыва- ния с помощью команды SIM. Во время принятия решения можно разрешить сервисной подпрограмме сделать систему прерывания «слушающей» и блокировать нежелательные пре- рывания, маскируя соответствующие входы запросов на преры- вание. Если на каком-либо входе во время обработки текущего запроса появляется запрос с более высоким приоритетом, то обработка текущего запроса прерывается и начинается обра- ботка запроса с более высоким приоритетом. Затем основная программа продолжает выполнение прерванной подпрограммы. Пример: во время обработки запроса на прерывание, по- ступившего от магнитофона, поступил запрос на прерывание дискового ЗУ. Этот запрос должен быть удовлетворен немед- ленно. С помощью маскирования соответствующий вход пре- рывания, который был занят во время обработки текущей сер- висной подпрограммы (запроса от магнитофона), освобожда- ется для приема нового запроса. В данном примере с дисковым SOD — Seriel Output Data — выход последовательного набора данных^ 2) SOE — Sod Enable — разрешение для SOD-триггера.
Набор команд микроЭВМ 157 ЗУ периферийное устройство с более высоким приоритетом по- лучает вполне реальное преимущество перед устройством с бо- лее низким приоритетом. Во время обработки сервисная подпрограмма может сама запросить разрешение на контакт с дисковым ЗУ. ЗУ запра- шивается относительно передачи данных, и затем в программе осуществляется переход к выполнению запрашиваемой опера- ции. Вполне возможно, что придется ждать до тех пор, пока не будет получен доступ к данным, хранящимся на диске. Об- работка сервисной подпрограммой продолжается после тогог. как система прерывания начинает «слышать» соответствующее дисковое ЗУ. В подобной ситуации часто бывает необходимо опрашивать текущее состояние регистра прерывания с по- мощью команды RIM, чтобы затем запомнить это состояние в ЗУ. В дальнейшем можно снова загрузить регистр прерыва- ния с помощью команды SIM и замаскировать все входы сиг- нала прерывания, за исключением того, который должен обес- печить данные с дискового ЗУ для обработки текущей сервис- ной подпрограммой. Наложение прерываний возникает доволь- но часто, особенно в случае систем, с которыми связаны мно- гочисленные периферийные устройства или схемы. В гл. 6 мы еще вернемся к теме прерывания при рассмотрении процессов записи и чтения данных на ленту кассетного магнитофона. При записи данных на ленту тот байт, который пересыла- ется МП на шину данных, преобразуется в последовательный набор битов с помощью выходной схемы УСАПП. Этот набор битов затем модулируется в ЧМн-блоке и записывается на лен- ту. Во время преобразования параллельного набора битов в последовательный МП находится в режиме ожидания. После того как преобразование закончено и МП готов пе- редать новый байт данных, нужно сообщить об этом с по- мощью запроса на прерывание. МП выходит из ждущего ре- жима и подготавливает следующий байт для записи на ленту. Режим прерывания применяется также и при чтении дан- ных с ленты. После демодуляции считываемых данных полу- ченный последовательный набор битов преобразуется в парал- лельный. По завершении преобразования нужно сообщить об* этом в МП с помощью запроса на прерывание, после чего МП- считывает соответствующий байт данных. 3.12. Команды ввода и вывода Эти команды осуществляют обмен данными между внеш- ними схемами МП. Как команды ввода, так и команды выво- да сопровождаются операндом длиной в один байт, с помощью»
158 Глава 3 которого можно указать 28 = 256 различных портов ввода-выво- да информации (рис. 3.35). Команда ввода обычно пересылает байт, поступающий из порта ввода, в аккумулятор А и затем из аккумулятора А в определенный приемник. До поступления команды вывода передаваемые данные необходимо загрузить в регистр А. Ввод и вывод данных по шине данных IN-порт ввода (ввод данных) (А)<-(данные) /|/|о|/|/|р|Т[7 Адрес Восьмеричное: 333 Шестнадцатеричное: DB Флажковые биты не изменяются IN .п=0-256 (1 байт) Рис. 3.35. Команды ввода и вывода / I / I О I / I О I О I / I / Адрес Восьмеричное: 323 Шестнадцатеричное: D3 Флажковые биты не изменяются ОиТ-лорт вывода (вывод данных) (А)-* (данные) OUT (1/О-команды). По команде ввода МП обеспечивает сигнал Ю/Read, с по- мощью которого получают разрешение тристабильные выходы буферного регистра ввода, в результате чего вводимый байт попадает на шину данных. При выводе данных с помощью еигнала Ю/Write нужно начать тактирование 8-разрядного ре- гистра на D-триггер, в результате чего этот регистр произве- дет считывание байта, переданного МП на шину данных. Ввод и вывод осуществляются также за счет выборки из ЗУ, после которой обращение к другим ЗУ уже не произво- дится. При этом не имеет никакого значения, производится ли обращение к ячейке ЗУ с однобайтовым словом или же выби- рается однобайтовый регистр на триггерах. ЗУ обычно имеет внутреннюю схему выборки адресов, которая доступна также « при использовании регистров. Как правило, такая схема вы-
Набор команд микроЭВМ 159 борки адресов применяется как дополнительная. Так как объ- ем ЗУ в МП невелик, можно выбирать регистр ввода или вы- вода с помощью какого-либо специального бита, например старшего бита адреса ЗУ. Команды ввода и вывода не влияют на значения флажковых битов. 3.13. Команда останова Эта команда (HLT) может остановить МП, не изменяя содержимого регистров или ЗУ (рис. 3.36). Если МП находит- Специальные команды Двоичный Восьмерич- ный Шестнадца- теричный EI —разрешение прерывания 11111011 373 FB DI — запрещение прерывания 11110011 363 F3 HLT — конец 01110110 166 76 NOP — пустая команда 00000000 000 00 RIM — считать маску прерывания 00100000 040 20 SIM —установить маску прерыва- ния 00110000 060 30 DAA — выполнить десятичную кор- рекцию содержимого акку- мулятора 00100111 047 27 Рис. 3.36. Специальные команды. ся в HLT-режиме, то выйти из него он может только по коман- де сброса в нуль или прерывания (RST). Команду HLT можно использовать для того, чтобы перевести МП в режим ожидания прерывания, на которое послан запрос. При последовательной пересылке данных, например из некоторой линии связи, в за- данном интервале времени обычно генерируется один байт. В подобной ситуации можно держать МП в режиме ожидания по команде HLT до тех пор, пока не будет подготовлен очеред- ной байт данных. Затем происходит инициирование пересылки этого байта с помощью запроса не прерывание. 3.14. Изменение значения флажкового бита переноса При арифметической обработке данных может возникнуть необходимость в изменении значения флажкового бита пере- носа. Это изменение осуществляют две команды: CMC (Comp*
160 Глава 3 lement Carry — инвертировать перенос) и STC (Set Carry — установить признак переноса) (рис. 3.37). Эти команды не влияют на другие флажковые биты. Инвертирование и установка переноса су J: 0^~ 1 1^—0 Перенос СМС (инвертировать содержи- мое разряда переноса) (СУ)-(СУ) | 0 | О | 7 | 7 | 7 | 7 | 7 | 7 I СМС Восьмеричное: 077 Шестнадцатеричное: 3F Изменяется флажковый бит : CY Другие флажковые биты не изменяются STC (установить в состояние 1 бит переноса) (CY)-l I О I О | 7 | 7 | О | 7 | 7 | 7~| STC Восьмеричное: 067 Шестнадцатеричное: 37 Изменяется флажковый бит: CY Другие флажковые биты не изменяются Рис. 3.37. Команды СМС (инвертировать перенос) и STC (установить приз- нак переноса). 3.15. Команда СМА (Complement Accumulator — инвертировать содержимое аккумулятора) После выполнения этой команды происходит инверсия би- тов в соответствующем регистре, т. е. все нули заменяются еди- ницами, а единицы — нулями (рис. 3.38). В ходе такой опера- ции значения флажковых битов не изменяются. 3.16. Команда DAA (Decimal Adjust Accumulator — десятичная коррекция содержимого аккумулятора) Иногда при обработке данных вместо двоичных чисел тре- буется использовать их двоично-десятичное представление BCD, т. е. двоичные числа, находящиеся в каком-либо регист- ре, необходимо преобразовать в BCD-код. Эту операцию можно осуществить с помощью команды DAA. При выполнении этой команды каждый байт делится на две части. Искомая BCD- величина получается за счет непосредственной пересылки дво- ичного кода из младшего полубайта, если его значение не пре- вышает 9 и если АС-триггер не сброшен в нуль.
Набор команд микроЭВМ 161 Инвертировать содержимое аккумулятора А А СМ А (инвертировать содер - жимое_ аккумулятора) (А)*-(А) Пример А 1 0 / 1 0 0 1 0 Дополнение А 0 / 0 0 1 J 0 1 I 67 167 I 7 I ° I 7 I 7 I 7 ГП СМА Восьмеричное: 057 Шестнадцатеричное: 2F Флажковые биты не изменяются Рис. 3.38. Команда СМА (инвертировать содержимое аккумулятора). Если эти условия не выполняются (величина соответствую- щего числа превышает 9 или флажковый бит АС сброшен в нуль), то к двоичному числу добавляется цифра 6. Перенос, который может при этом возникнуть, добавляется к старшему полубайту. Этот полубайт обрабатывается аналогичным об- разом, только при этом проверяется состояние флажкового би- та CY. На рис. 3.39 показано место АС и CY-битов в наборе битов при выполнении команды DAA. Команда DAA может изменять все флажковые биты. Пример: XRA А Сбросить перенос MVI А, 05 Загрузить 05i6 в А ACI05 (А) (А) +0516+ (CY) DAA Десятичная коррекция STAX D Результат в BCD-коде переслать в ячейку ЗУ по адресу, указанному в регистре DE В этом примере после сложения по команде ACI произво- дится десятичная коррекция (DAA), в результате которой двоичный результат преобразуется в А в две десятичные циф- ры, закодированные в двоичном коде. Затем эти цифры пере- сылаются в ячейку ЗУ, адрес которой находится в двойном ре- гистре DE. 3.17. Команда NOP Команда NOP — пустая команда, при выполнении которой никакие операции не производятся (рис. 3.36). Набор следую- щих друг за другом команд NOP можно использовать для
162_____________________________Глава 3_____________________________ Установка флажкового бита АС DAA (десятичная коррекция содержимого аккумулятора) I О I О I / I О I О I / I ; I DAA Восьмеричное: 047 Шестнадцатеричное; 27 Все флажковые биты изменяются Флажковые биты (старшая) (младшая) Рис. 3.39. Команда DAA (десятичная коррекция содержимого аккумулятора). обеспечения определенного времени задержки. В результате получается импульс программатора определенной длительно- сти, который можно применять, например, для заполнения яче- ек СППЗУ. Кроме того, команду NOP можно использовать для заполнения пропусков в программе, которые возникают из-за применения лишних команд. Команда NOP не изменяет со- держимого ни регистров, ни флажковых битов. 3.18. Команды EI и DI (разрешение прерывания и запрещение прерывания) Эти команды используются для того, чтобы разрешить (EI) или запретить (DI) прерывание МП при появлении зап- роса на прерывание (см. рис. 3.36). Команды EI и DI изменя- ют содержимое триггера разрешения прерывания в МП. Эти команды не влияют на значения флажковых битов. 3.19. Относительная адресация ячеек ЗУ В некоторых типах МП кроме прямой и косвенной адреса- ции, как это имеет место в случае МП 8085А, может использо- ваться также индексная адресация. При этом в индексный ре- гистр записывается базовый адрес, суммирование которого с относительным адресом (смещением) в команде дает требуе- мый абсолютный адрес. Индексный регистр имеет длину, рав- ную двум байтам. Преимущество этого метода адресации заключается в том, что в случае набора из нескольких последовательных команд, часть которых запрашивает обращение к ЗУ, для указания ад- ресов достаточно всего два байта. В соответствующей команде первый байт указывает операцию, а второй байт — число, кото- рое связано с базовым адресОхМ и позволяет выбирать требуе-
Набор команд микроЭВМ 163 мый адрес. Так как в большинстве МП под относительный ад- рес отводится только один байт, то динамический диапазон адресов при таком методе адресации находится в ЗУ между начальным адресохм и начальным адресом+255. Поскольку при использовании метода индексной адресации берутся два байта вместо трех, то в соответствующей части программы получается заметный выигрыш в быстродействии при одновременном уменьшении объема ЗУ. По этому методу можно также работать, применяя вместо индексного регистра счетчик команд. Тогда достаточно запрограммировать во втором байте число, которое прибавляется к содержимому счетчика команд или вычитается из него. При этом формиру- ется исполнительный адрес. Поскольку второй байт относитель- ного адреса состоит из 8 бит, то весь диапазон адресов нахо- дится здесь между +127 и —127. Старший бит при этом явля- ется знаковым. Подобная адресация обычно называется отно- сительной. Число, которое нужно прибавить к базовому адресу {базе) или вычесть из него, называется смещением. Вместо до- полнительного смещения во второй байт можно помещать младший байт выбираемого адреса. В этом случае базовый адрес будет задаваться старшим байтом, умноженным на 28, а диапазон адресов будет находиться между базовым адресом и базовым адресом +255. Рассмотренные выше команды допускают использование двухбайтового базового адреса, за счет чего полный адресный диапазон расширяется на восемь дополнительных битов. При обращении к ЗУ сначала следует выбрать и поместить в допол- нительный регистр эти два первые байта; при этом требуемый адрес будет представлен в диапазоне между базой и базой +255. Такой метод представления адреса, называемый сегмен- тацией, применяется в новых МП. В рамках индексного представления возможна как прямая, так и косвенная адресация. При прямой адресации начальный адрес, увеличенный или умноженный на относительный адрес, указывает сразу же номер ячейки ЗУ, к которой производит- ся обращение. При косвенной адресации начальный адрес, уве- личенный или умноженный на относительный адрес, указыва- ет ячейку ЗУ, в которой находится адрес требуемых данных. Кроме того, допускается косвенное задание относительного адреса. При этом адрес ячейки ЗУ, в которой записан относи- тельный адрес, необходимо считывать до того, как будет сфор- мирован абсолютный адрес, равный базовому, к которому при- бавляется или из которого вычитается относительный адрес. Различные варианты индексной адресации позволяют произво- дить разнобразные манипуляции с обрабатываемыми данными. Что касается сегментации, то для ее пояснения можно при-
164 Глава 3 вести пример, когда школьник вычисляет т сумм на странице под номером п. Базовый адрес соответствует номеру страницы, который задал преподаватель, тогда как суммы представляют собой смещения, например, между 1 и 100, т. е. числа, которые встречаются на каждой странице. В данном примере все сум- мы, естественно, поместились бы на странице очень больших размеров порядка нескольких метров. Однако такая страница не уместилась бы на парте, поэтому и определяются суммы на страницах намного меньшего размера. При обработке данных на ЭВМ возникают примерно такие же проблемы. Для выборки адресов ЗУ в МП имеется ограни- ченное число выводов. Это число в свою очередь ограничива- ет число ячеек ЗУ, которое доступно для МП. Если разделить ЗУ на страницы или секторы, то выборку можно осуществлять в два приема (аналогично определению номера страницы и но- мера суммы из приведенного выше примера). Сначала с помощью первой команды указывается соответ- ствующий номер участка ЗУ, который помещается во внешний регистр; относительные адреса указывают последующие коман- ды, которые должны быть двухбайтовыми. Очевидно, что если в ходе выполнения программы происходит переход из данного участка ЗУ в другой, то при этом необходимо корректировать соответствующий базовый адрес, т. е. старшие биты адресации. Некоторые МП имеют в своем наборе команды, с помощью которых после обращения к адресу и считывания данных об этом адресе его относительная часть (смещение) автоматиче- ски увеличивается или уменьшается на 1. Результат такой опе- рации называется автоинкрементом или автодекрементом со- ответственно. Этот способ особенно удобен, когда обрабатыва- ется одинаковым образом набор чисел из какого-либо файла данных. В конце этой главы приведен полный набор команд МП 8085А в двоичном коде. В последней колонке указано вре- мя выполнения команды, выраженное числом тактов. Длитель- ность одного такта при использовании кристалла кварца с частотой 6 МГц составляет 0,333 мкс. Это максимально допу- стимая частота. Минимальная частота равна 1 МГц, что соот- ветствует длительности тактового цикла 2 мкс. 3.20. Простые примеры программ В предыдущих разделах были рассмотрены команды МП 8085А и некоторые их применения. Несомненно, было бы полезно также обсудить несколько простых программ для того, чтобы научиться создавать слож-
Набор команд микроЭВМ 165 ные логические функции с по- мощью набора элементарных команд. Здесь будут рассмотрены две программы: программа пересыл- ки данных и программа заполне- ния ячеек ЗУ единицами. Про- грамма пересылки может пона- добиться в том случае, когда требуется, например, перенести набор команд из одного участка ЗУ в другой. Объем передавае- мых данных определяется на- чальным и конечным адресами, записанными в определенных ячейках оперативного ЗУ (ЗУПВ). Сначала поясним работу этой программы с помощью блок-схе- мы. После этого рассмотрим не- сколько подробнее отдельные операции и обсудим, какие команды необходимо использо- вать для решения данной задачи и почему. Из рис. 3.40 видно, что начальные адреса пересылае- мого участка ЗУ (х) и участка, куда необходимо переслать дан- ные (у), передаются в две дру- гие ячейки ЗУПВ. Это делается для того, чтобы можно было производить затем с содержи- мым этих адресов различные опе- рации (например, увеличивать их на 1). Далее адрес х загру- жается в регистр HL и выбира- ется первый байт из «старого» участка ЗУ. Здесь производится косвенная адресация, так как для определения адреса ячейки, из которой необходимо произве- сти выборку данных, считывается содержимое регистра HL. Ес- Рис. 3.40. Структурная схема програм- мы пересылки.
166 Глава 3 ли соответствующий байт уже введен в аккумулятор А, то в HL пересылается адрес у, т. е. первый адрес «нового» участ- ка ЗУ. После этого записывается содержимое А (первый байт из «старого» участка ЗУ) в первый адрес «нового» участка ЗУ. В результате происходит пересылка первого байта данных. Содержимое регистра HL, в котором еще находится адрес у, затем увеличивается на 1 и записывается снова в ЗУПВ. Ад- рес х после этой операции увеличится на 1 и также перепи- сывается в ЗУПВ; при этом проверяется, не достигнут ли ко- нечный адрес. Этот вопрос задается дважды: один раз для младшего байта (L) адреса и один раз для старшего байта (Н) адреса. Только в том случае, когда оба байта HL и конеч- ного адреса оказываются одинаковыми (два ответа Да), пере- сылка считается завершенной. До тех пор пока содержимое регистра HL не достигнет двоичной величины конечного адреса, в программе происходят обратные переходы и повторяется соответствующая подпро- грамма пересылки, причем каждый раз из «старого» участка ЗУ в «новый» передается один байт. При каждом повторении подпрограммы оба адреса увеличиваются на 1. Если проанали- зировать теперь более подробно программу, приведенную в табл. 3.1, то по адресу 014 100s обнаружим команду перехода (JMP), которая передает управление программе пересылки, первая команда которой находится по адресу ОН 0008. Как известно, МП 8085А начинает работу со сброса в нуль по адресу ООО 0008. Так как после этого рестарта планируется начать выполнение нескольких программ, то в ячейку с адре- сом ООО 0008 помещается команда JMP, которая передает уп- равление по адресу 014 1008. После этого адреса в дальнейшем нужно выполнить еще один переход в начальный адрес выпол- няемой программы, так и как адрес ЗУ 014 1008 является адре- сом ячейки ЗУПВ, в которую записывается требуемый переход (JMP). В системе, для которой составлена данная программа, адрес 000 0008 определяет ячейку СППЗУ, что и объясняет происхождение двойного перехода. Переход в ЗУПВ осуществ- ляется прямо по адресу 100, так как адреса с 77 до 0 заре- зервированы для хранения стековых адресов. Подобная после- довательность операций является необязательной и обусловле- на распределением адресного пространства между СППЗУ и ЗУПВ. В ЗУПВ можно изменять содержимое адресов, в СППЗУ — нет. Ячейки с адресами 014 1508—014 1618 используются для хра- нения пересылаемых данных, а несколько ячеек из указанно- го диапазона образуют оперативное ЗУ переменного объема, т. е. используются для обеспечения адресации переменной дли- ны.
Набор команд микроЭВМ. 167 Таблица 3.1. Программа: пересылка данных (с загрузкой начальных условий) Адрес ЗУ Метка Исходный код Объектный Код Описание операции/ком- ментарий восьм. шести. S л о О са шести 014 100 18 40 JMP 303 сз 101 41 000 00 Переход в начало про- граммы! 102 42 он 09 014 150 151 18 68 69 XXX XXX XX XX Ввести начальный адрес программы! 152 153 6А 6В XXX XXX XX XX Ввести конечный адрес программы! 154 155 6С 6D XXX XXX XX XX Ввести начальный адрес того участка ЗУ, где необходимо взять про- грамму! 156 6Е XXX XX Адрес оперативного ЗУ 157 6F XXX XX 160 70 XXX XX Адрес оперативного ЗУ 161 71 XXX XX 011 ООО 12 00 LHLD 052 2А Загрузить начальный ад- рес пересылаемой про- граммы в HL 1 150 68 2 014 ОС 3 4 SHLD 042 156 22 6Е Переписать в оператив- ное ЗУ 5 014 ОС 6 LHLD 052 2А Загрузить начальный ад- рес нового файла в HL 7 154 6С 011 010 12 08 014 ОС 1 2 SHLD 042 160 22 70 Переписать в оператив- ное ЗУ 3 014 ОС
168 Глава 3 Продолжение Адрес ЗУ Метка Исходный код Объектный код Описание операции/ком- ментарий восьм. шести. л S X о 3 011 4 005 6 7 LOOP LHLD MOV А, М 052 156 014 17b 2А 6Е ОС 7Е Загрузить начальный ад- рес нового файла в HL Переслать содержимое адреса в А он 020 1 2 3 4 5 6 7 012 10 LHLD MOV М, А INX Н SHLD 052 160 014 167 043 042 160 014 2А 70 ОС 77 23 22 70 ОС Загрузить начальный ад- рес нового участка ЗУ Переписать содержимое А в оперативное ЗУ Адрес нового участка ЗУ Увеличить содержимое HL на 1 Переписать увеличен- ный адрес в оператив- ное ЗУ 011 030 1 2 3 4 5 6 12 18 LHLD INX Н SHLD 052 156 014 043 042 156 014 2А 6Е ОС 23 22 6Е ОС Загрузить начальный ад- рес пересылаемой про- граммы в HL Увеличить содержимое HL на 1 Переписать увеличенный адрес в оперативное ЗУ
Набор команд микроЭВМ 169 Продолжение Адрес ЗУ Метка Иходный код Объектный код Описание операции/ком- ментарий восьм. шести. восьм. шести. 011 011 7 040 1 2 3 4 5 6 7 050 1 2 3 4 5 6 7 12 12 20 28 LDA СМР L JNZ LDA СМР Н JNZ HALT 072 152 014 275 302 017 011 072 153 014 274 302 017 ОН 166 ЗА 6А ОС 6D С2 0F 09 ЗА 6В ОС 6С С2 0F 09 75 Загрузить конечный ад- рес в А (младший байт) Сравнить содержимое А с содержимым L Если A^L, переход по метке LOOP Загрузить конечный ад- рес в А (старший байт) Сравнить содержимое А с содержимым Н Если А^Н, переход по метке LOOP Конец Указанные адреса входят в состав операндов команд, приведен- ных в программе. Программа выполняется, начиная с адреса 011 000s. Снача- ла осуществляются выборка начального адреса в регистр HL и последующая его запись в оперативное ЗУ переменной дли- ны. То же самое производится и с начальным адресом «нового» участка ЗУ, куда планируется переместить пересылаемую про- грамму. Адреса в оперативном ЗУ переменной длины изменя- ются при каждом прохождении цикла, что и определяет назва- ние этого ЗУ.
170 Глава 3 Выборку и перезапись адреса можно выполнить по коман- дам LHLD и SHLD. Эти команды пересылают за один прием два байта. Настоящая пересылка начинается с адреса 011 0148, когда начальный адрес х («старый» участок ЗУ) снова загру- жается в регистр HL, и затем по команде MOV,AM содержи- мое этой ячейки ЗУ пересылается в регистр А. После этого в регистр HL загружается начальный адрес у (пункт назначе- ния) и снова выполняется пересылка, однако теперь уже по команде MOV,МА. Содержимое А (т. е. содержимое х) при этом переносится в первую ячейку участка ЗУ (адрес пунк- та назначения). В регистре HL находится также начальный адрес у, кото- рый увеличивается на 1 по команде INX,H (см. адрес 011 0248). Увеличенный адрес снова переписывается в оперативное ЗУ переменной длины. То же самое производится и с начальным адресом х, как это следует из команд, находящихся по адре- сам ОН 0308—ОН 0368. Теперь требуется выяснить, когда адрес хп станет равным конечному адресу xs. Для этого конечный адрес (младший байт) загружается в А и сравнивается с помощью команды СМР с содержимым L. Если эти байты оказываются неравны- ми, то разрешается условный переход JNZ (если флажок нуля сброшен); при этом происходит возврат назад по метке LOOP, расположенной по адресу 0110178. Если указанные вы- ше байты оказываются равными, то программа продолжается и проводится сравнение старших байтов хп и xs. Если дости- гается конечный адрес xs, то программа по команде JNZ (ад- рес 011 052) переходит по адресу ОН 0558, где находится команда HALT. Как видно из табл. 3.2, программа записи единиц почти идентична программе пересылки. В этой программе начальным адресом является 000 0008, а конечным адресом — 004 0008 (де- сятичное число 1024). Программа предназначена для заполне- ния единицами определенного участка ЗУ, содержимое которо- го затем передается в СППЗУ, причем единицами заполняются только те участки, которые не используются при программиро- вании. В следующей главе мы еще вернемся к причинам, обу- словливающим такой режим заполнения, при обсуждении про- граммного обеспечения для процедуры загрузки СППЗУ. Программа записи единиц отличается от предыдущей и ме- тодом загрузки данных. Здесь по адресу 011 1168 вместо дан- ных производится запись единиц. Единицы загружаются в ак- кумулятор А по команде MVI с операндом (байт 2) в виде 3778, что соответствует единицам во всех разрядах ячейки. Ко- нечный адрес xs равен 1024ю, так как запись единиц начина- ется с ячейки с адресом 000 0008. В рассмотренных программах
Набор команд микроЭВМ 171 Таблица 3.2. Программа: запись единиц (с загрузкой начальных условий) Адрес ЗУ Метка Исходный код Объектный код Описание операции/ком- ментарий восьм. шести. восьм. ас CD а 014 014 100 101 102 150 151 152 153 154 155 156 157 160 161 18 18 40 41 42 68 69 6А 6В 6С 6D 6Е 6F 70 71 JMP 303 100 он 000 000 000 002 XXX XXX XXX XXX XXX XXX СЗ 40 09 00 00 00 04 XX XX XX XX XX XX Переход в начало про- граммы! Ввести начальный адрес (ввести 000 0008= = 00 001б) I Ввести конечный адрес (ввести число адрес- ных ячеек, заполняе- мых единицами) (1024=004 0008= = 04 001б)! Начальный адрес участ- ка ЗУ, который необ- ходимо заполнить еди- ницами! Адрес оперативного ЗУ Адрес оперативного ЗУ ОН 100 1 2 3 4 5 6 7 НО 12 12 40 48 LHLD SHLD LHLD 052 150 014 042 156 014 052 154 014 2А 68 ОС 22 6Е ОС 2А 6С ОС Загрузить начальный ад- рес участка ЗУ (за- полняемого единица- ми) в регистр HL Переписать в оператив- ное ЗУ Загрузить начальный ад- рес участка ЗУ (за- полняемого единица- ми) в регистр HL
172 Глава 3 Продолжение Адрес ЗУ Метка Исходный код Объектный код Описание операции/ком- ментарий восьм. шести. восьм. шести. 1 SHLD 042 22 Переписать в оператив- ное ЗУ 2 160 70 3 014 ОС 4 NOP 000 00 NOP (пусгая команда) 5 NOP 000 00 NOP (пустая команда) 6 LOOP MVI A 076 ЗЕ Загрузить единицы в А 7 377 FF 120 12 50 LHLD 052 2Н Загрузить первый адрес, который необходимо заполнить единицами 1 160 70 2 014 ОС 3 MOV M, A 167 77 ' Переписать содержимое А (единицы) в первый адрес 4 INX H 043 23 Увеличить содержимое HL на 1 5 SHLD 042 22 Переписать увеличенный адрес в оперативное ЗУ 6 160 70 7 014 ОС 011 130 12 58 LHLD 052 2А Загрузить начальный ад- рес ( = 000 0008= = 00 001$) в HL 1 156 6Е 2 014 ОС 3 INX H 043 23 Увеличить содержимое HL на 1 4 SHLD 042 22 Переписать увеличенный адрес в оперативное ЗУ 5 156 6Е 6 014 ОС
Набор команд микроЭВМ. 173 Продолжение Адрес ЗУ Метка Исходный код Объектный код Описание операции/ком- ментарий восьм. шести. восьм. шести. 011 140 7 12 60 LDA 072 152 ЗА 6А Загрузить конечный ад- рес (=числу адресных ячеек в А, заполняе- мых единицами (младший байт)) 1 014 ОС 2 СМР L 275 BD Сравнить содержимое А с содержимым L 3 4 JNZ 302 116 С2 4Е Если A^L, переход по метке LOOP 5 ! ОН 09 6 , 7 LDA 072 153 ЗА 6В Загрузить конечный ад- рес в А (старший байт) 011 150 12 68 014 ОС 1 ’ СМР н 274 6С Сравнить содержимое А с содержимым Н 2 3 JNZ 302 116 2С 4Е Если А=#Н, переход по метке LOOP 4 ОН 09 5 HALT 166 76 Конец 6 7 регистры и стек используются неоптимальным образом, т. е. для данного случая можно написать более эффективную и про- стую программу. 3.21. Некоторые общие аспекты ввода и вывода информации Предотвращение копирования программного обеспечения МП Приведенные выше примеры программ пересылки данных являются весьма простыми по сравнению с теми сложными
174 Глава 3 программами, которые применяются для обработки данных на современных ЭВМ. Как уже неоднократно отмечалось, сложные логические функции создаются и реализуются на основе набора элемен- тарных функций. Конкретно это сводится к тому, что с по- мощью программы, команды которой написаны на языке ас- семблера, по определенному алгоритму создаются требуемые бо- лее мощные логические функции. При переходе к более сложным функциям удобнее исполь- зовать язык более высокого уровня. Следует указывать ЭВМ то, что она должна сделать, не слишком вдаваясь в детали задания. Одно указание более сложной функции должно быть достаточным для того, чтобы ЭВМ выполнила набор следую- щих друг за другом команд, написанных на языке ассемблера. При этом более сложные функции обозначаются с помощью операторов. Одним из таких операторов является, например, PRINT X. После считывания этого оператора система выполня- ет операцию вывода на печать, в результате которой перемен- ная X будет напечатана на бумаге. Другим примером является оператор IF Х< A THEN GO ТО 100. Это оператор перехода или ветвления, который продолжает выполнение программы с переходом в строку 100, если X меньше А; в противном случае программа переходит в строку, следующую после той, на кото- рой находится данный оператор. Оператор вводится в систему в виде строки понятного тек- ста, содержащего буквы и цифры, а не в виде битовой инфор- мации или мнемоники. Ввод текста возможен в том случае, когда система (ЭВМ) связана с терминалом, который снабжен клавиатурой. ЭВМ имеет в своем распоряжении программу ввода информации в виде программы, с помощью которой каж- дое нажатие клавиши приводит к генерации одного байта в ASCII-коде; этот байт вводится в ЭВМ. Сформированный при нажатии клавиши символ хранится в буфере текста, который является частью оперативного ЗУ (ЗУПВ). ЭВМ обрабатывает символы, помещенные в буфер текста, в обычном режиме. При выполнении арифметических операций сначала требуется преобразовать данные из ASCII-кода в дво- ичный код. С этой целью применяется специальная подпро- грамма. При выдаче данных на принтер система наряду с командой, инициирующей печать, обеспечивает представление соответствующих символов в ASCII-коде. Под буферы текста выделяются значительные объемы ЗУПВ, особенно при обработке административно-управленче- ских данных. В программах типа «оформление накладных» та- кие данные, как имя и адрес клиента, описание поставляемых товаров, их цены и т. п., печатаются без какой-либо предвари-
Набор команд микроЭВМ 175 тельной цифровой обработки. Под эти данные в системе вы- деляется ЗУПВ. Если число клиентов и ассортимент товаров оказываются значительными — а это часто имеет место на практике, — то хранение этих параметров в буфере текста по- требует слишком много места в ЗУПВ и система становится слишком дорогостоящей. По этой причине при обработке боль- ших объемов информации применяется другой метод. Архивное ЗУ в виде диска или магнитной ленты заполняет- ся данными из буфера текста, после чего ЭВМ выполняет не- обходимую обработку этих данных. В случае накладных мож- но обрабатывать таким образом, например, данные по 50 кли- ентам. По окончании обработки этого пакета данных система запрашивает следующий пакет, записанный также на диске или ленте. Таким образом, шаг за шагом обрабатывается весь массив данных; при этом с помощью относительно небольшого ЗУПВ можно переработать очень большой объем текстовой и цифровой информации. В следующей главе рассмотрен отладочный комплекс с МП 8085А. Этот комплекс снабжен дополнительным пультом ручного управления. Если ввести в систему устройство ввода- вывода информации в виде терминала, то ее управление мож- но осуществлять непосредственно с этого терминала. ЭВМ име- ет программу, которая считывает и интерпретирует сигналы на- жатия на клавиши, преобразуя их в символьную информацию. В результате нажатия клавиши CR (клавиши перевода в начало новой строки) могут вводиться любые команды ЭВМ. Таким же образом можно вводить строки символов, которые временно хранятся в буфере текста для дальнейшей обра- ботки. Буфер текста может, например, содержать строки про- граммы, написанной на языке ассемблера с сопровождающими комментариями. Такой программой может быть программа пе- ресылки данных или программа заполнения единицами ЗУ, которые обсуждались в этой главе. С помощью процедуры ас- семблирования текстовые строки переводятся в машинные коды с байтами, состоящими из нулей и единиц. Однако буфер текста может включать также данные, предназначенные для того, чтобы указывать или расширять файлы данных, записан- ные на диске или ленте. В последнем случае мы говорим о мо- дификации соответствующих файлов. Переписывание данных из буфера текста в дисковое или ленточное ЗУ производит программа, которая называется про- граммой управления файлами или программой (системой) уп- равления базами данных (ПУБД). Все эти программы, выполняющие специальные операции, состоят из наборов элементарных команд, которые уже рас- сматривались ранее в настоящей главе. Эти команды распо-
176 Глава 3 лагаются в таком порядке, который реализует требуемую слож- ную функцию, такую, как управление базами данных или ас- семблирование. Отдельные стандартные программы, которые как минимум обеспечивают управление ЭВМ с помощью терминала и ввод- вывод данных, постоянно используются и обычно хранятся в ПЗУ, которое является частью программного ЗУ ЭВМ. Эти стандартные программы, проявляющие разный уровень «ин- теллекта», обычно обозначаются общим термином «монитор». Монитор, который выполняет управленческие и контрольные функции, может быть достаточно «интеллектуальным», чтобы обеспечить диалог между пользователем и ЭВМ: при этом ЭВМ может давать ценные указания относительно качества управления. Такая интерактивная связь упрощает управление в том смысле, что для общения с системой не требуется специальных знаний. Система опрашивает, что и от чьего имени требуется сделать, после чего оператор (пользователь), используя кла- виатуру терминала, вводит свои ответы. Далее система выдает на экран дисплея набор команд, названия которых наглядно показывают, как необходимо действовать для того, чтобы вы- полнить программу вычислений. Интеллектуальный монитор может также ставить диагнозы, если в ходе выполнения про2 граммы возникли ошибки или если элементы периферийной аппаратуры работают в ненормальном режиме. Диагностиче- ская программа, которая начинает автоматически работать в случае появления ошибки, выдает на экран указания, которые содержат описания совершенной ошибки и возможных спосо- бов ее коррекции. В случае неверного ввода данных может по- явиться указание заменить какую-либо перфокарту (строку текста). При появлении ошибок в работе основного ЗУ диа- гностическая программа может указать, какой именно диско- вод или магнитофон следует заменить. Очевидно, что исполь- зование диагностической программы требует меньше времени, чем режим работы с поиском ошибок самим пользователем. Сервисный вызов, т. е. вызов техника по обслуживанию, кото- рый никогда не появляется сразу, следует производить только в самом крайнем случае. Здесь работа монитора и других вспомогательных программ подробно не рассматривается. Монитор вместе с диалоговой программой и интерактивными функциями обычно подробно описывается в соответствующем руководстве, которое содер- жит информацию о работе таких программ, состоящих из не- скольких тысяч команд. Монитор, а также программа для обработки текстов (ре- дактор), программы для трансляции с одного языка на другой
Набор команд микроЭВМ 177 (компиляторы), программы ассемблирования и т. д. являются элементами «программного обеспечения»; их можно сравнить с такими специальными элементами аппаратурного обеспече- ния, как клавиатура, контроллеры для гибких дисков, память прямого доступа и видеодисплеи, состоящие из тысяч тран- зисторов, размещенных на одном кристалле. Пользователь или схемотехник может и не знать, как соответствующая функ- ция реализуется на кристалле. Этот кристалл находится в на- шем распоряжении, его свойства известны и на этой основе осуществляется его применение. Например, автомобиль также приобретается для того, чтобы на нем ездить, но при этом по- требителя мало интересует, как реализованы система зажига- ния и управления и т. д. Вместе с ЭВМ, которая оборудована всеми аппаратурными средствами для эффективного применения, обычно поставляет- ся и необходимое программное обеспечение, хранящееся в ПЗУ, на диске или на ленте. Функционирование ЭВМ в том виде, как оно описано в проспекте фирмы-изготовителя, реа- лизуется в результате взаимодействия аппаратурного обеспе- чения с программным обеспечением. Программное обеспечение часто определяется термином «операционная система» (ОС) (см. гл. 1). В дополнение к ОС фирма-изготовитель предостав- ляет также большой набор специальных программ, предназна- ченных для самых различных применений. Эти программы мож- но приобрести и отдельно от ЭВМ. Специальные программы существуют, например, для оформления накладных и выпол- нения дебиторских, кредиторских, снабженческих и других операций. Соответствующие программы можно скопировать на диск или ленту. Однако такой способ «приобретения» программного обеспечения обычно квалифицируется как незаконный и фир- мы-изготовители принимают специальные меры для борьбы с этим видом хищений. В частности, программе присваивается в ОС определенный серийный индекс. В ходе выполнения про- грамм этот индекс обрабатывается с помощью специальной, достаточно хитроумной процедуры, причем нахождение ключа к декодированию индекса является неразрешимой задачей. Ин- декс кодируется в определенном элементе аппаратурного обес- печения, после чего программа выдает его только в кодирован- ной форме. Если хранящийся в ЭВМ индекс и индекс, полу- ченный из программы, не совпадают, то выполнение программы прекращается. В сфере применений, где затраты человеческого труда и стоимость машинного времени не играют существенной роли, на- ходятся достаточно подготовленные люди, которые берутся деко- дировать кодовый ключ, видя в этом свой шанс похитить у
.178 Глава 3 >Набор команд МП 8085А Мнемоника Описание Код команды Число машин- d7 d6 d6 d4 d3 d2 Di Do НЫХ 1 dKTOB ПЕРЕСЫЛКА, ЗАГРУЗ- КА, ЗАПИСЬ MOV rl, r2 Переслать содержимое из регистра в регистр 0 1 D D D S S S 4 MOV M. г Переслать содержимое из регистра в память 0 1 1 1 0 S S S 7 MOV г. М Переслать содержимое памяти в регистр 0 1 D D D 1 1 0 7 MVI г Переслать в регистр не- посредственный опе- ранд 0 0 D D D 1 1 0 7 MVI м Переслать в память не- посредственный опе- ранд 0 0 1 1 0 1 1 0 10 LXI В Загрузить непосредст- венный операнд в двойной регистр ВС 0 0 0 0 0 0 0 1 10 LXI D Загрузить непосредст- венный операнд в двойной регистр DE 0 0 0 1 0 0 0 1 10 LXI H Загрузить непосредст- венный операнд в двойной регистр HL 0 0 1 0 0 0 0 1 10 LXI SP Загрузить непосредст- венный операнд в указатель стека 0 0 1 1 0 0 0 1 10 STAX В Косвенно записать в па- мять содержимое ак- кумулятора 0 0 0 0 0 0 1 0 7 STAX D Косвенно записать в па- мять содержимое ак- кумулятора 0 0 0 1 0 0 1 0 7 lLDAX В Косвенно загрузить ак- кумулятор 0 0 0 0 1 0 1 0 7 LDAX D Косвенно загрузить ак- кумулятор 0 0 0 1 1 0 1 0 7 STA Непосредственно запи- сать в память содер- жимое аккумулятора 0 0 1 1 0 0 1 0 13 LDA Непосредственно загру- зить аккумулятор 0 0 1 1 1 0 1 0 13
Набор команд микроЭВМ. 179 Продолжение Код команды Мнемоника Описание Число машин- 07 D6 D5 D< D3 D2 Di Do 1 1 Ud SHLD Непосредственно запи- сать в память содер- жимое двойного реги- стра HL 0 0 1 0 0 0 1 0 16 LHLD Непосредственно загру- зить содержимое па- мяти в двойной ре- гистр HL 0 0 1 0 1 0 1 0 16 XCHG Обменять содержимое двойных регистров DE, HL ОПЕРАЦИЯ СО СТЕ- КОМ 1 1 1 0 1 0 1 1 4 PUSH В Протолкнуть в стек со- держимое двойного ре- гистра ВС 1 1 0 0 0 1 0 1 12 PUSH D Протолкнуть в стек со- держимое двойного ре- гистра DE 1 1 0 1 0 1 0 1 12 PUSH H Протолкнуть в стек со- держимое двойного ре- гистра HL 1 1 1 0 0 1 0 1 12 PUSH PSW Протолкнуть в стек со- держимое аккумулято- ра и флажковые биты 1 1 1 1 0 1 0 1 12 POP в Вытолкнуть из стека со- держимое двойного ре- гистра ВС 1 1 0 0 0 0 0 1 10 POP D Вытолкнуть из стека со- держимое двойного ре- гистра DE 1 1 0 1 0 0 0 1 ш POP H Вытолкнуть из стека со- держимое двойного ре- гистра HL 1 1 1 0 0 0 0 1 10 POP PSW Вытолкнуть из стека со- держимое аккумулято- ра и флажковые биты 1 1 1 1 0 0 0 1 10. XTHL Обменять содержимое вершины стека и двой- ного регистра HL 1 1 1 0 0 0 1 1 16 SPHL Переслать содержимое двойного регистра HL в указатель стека 1 1 1 1 1 0 0 1 6
180 Глава 3 Продолжение Мнемоника Описание Код команды Число машин- ных тактов D7 De d5 d4 D3 D2 Dr Do ПЕРЕХОДЫ JMP Безусловный переход 1 1 0 0 0 0 11 10 JC Переход, если флажок переноса установлен 1 1 0 1 10 10 7/10 JNC Переход, если флажок переноса не установ- лен 1 1 0 1 0 0 10 7/10 JZ «Переход, если флажок нулевого результата установлен 1 1 0 0 10 10 7/10 JNZ Переход, если флажок нулевого результата не установлен 1 1 0 0 0 0 10 7/10 JP Переход, если флажок знака положительный 1 1 1 1 0 0 10 7/10 JM Переход, если флажок знака отрицательный 1 1 1 1 10 10 7/10 JPE Переход, если флажок четности установлен 1 1 1 0 1010 7/10 JPC Переход, если флажок четности сброшен 1 1 1 0 0010 7/10 PCHL Переслать содержимое двойного регистра HL в счетчик команд ВЫЗОВ 1 1 1 0 1001 6 CALL Безусловный переход к подпрограмме 1 1 0 0 1101 18 €C Переход к подпрограм- ме, если флажок пере- носа установлен 1 1 0 1 110 0 9/18 CNC Переход к подпрограм- ме, если флажок пере- носа не установлен 1 1 0 1 0 10 0 9/18 €Z Переход к подпрограм- ме, если флажок ну- левого результата установлен 1 1 0 0 110 0 9/18 <CNZ Переход к подцрограм- ме, если флажок нуле- вого результата не .установлен 1 1 0 0 0 10 0 9/18
Набор команд микроЭВМ. 181 Мнемоника Описание о7 De Код команды Do D4 D3 D2 Продолжение Di Do Число машин- ных тактов СР Переход к подпрограм- ме, если флажок зна- ка положительный 1 1 110 1 0 0 9/18 см Переход к подпрограм- ме, если флажок зна- ка отрицательный 1 1 1111 0 0 9/18 СРЕ Переход к подпрограм- ме, если флажок чет- ности установлен 1 1 10 11 0 0 9/18 СРО Переход к подпрограм- ме, если флажок чет- ности сброшен ВОЗВРАТ 1 1 10 0 1 0 0 9/18 RET Возврат 1 1 0 0 10 0 1 10 RC Возврат, если флажок переноса установлен 1 1 0 110 0 0 6/12 RNC Возврат, если флажок переноса не установ- лен 1 1 0 10 0 0 0 6/12 RZ Возврат, если флажок нулевого результата установлен 1 1 0010 0 0 6/12 RNZ Возврат, если флажок нулевого результата не установлен 1 1 0 0 0 0 0 0 6/12 RP Возврат, если флажок знака положительный 1 1 110 0 0 0 6/12 RM Возврат, если флажок знака отрицательный 1 1 1110 0 0 6/12 RPE Возврат, если флажок четности установлен 1 1 1010 0 0 6/12 RPO Возврат, если флажок четности сброшен РЕСТАРТ 1 1 10 0 0 0 0 6/12 RST Рестарт, повторный за- пуск ВВОД-ВЫВОД 1 1 AAAI 1 1 12 IN Ввод данных 1 1 0 110 1 1 10 OUT Вывод данных 1 1 0 10 0 1 1 10
182 Глава 3 Мнемоника Описание Продолжение Код команды Число машин- D7 De D5 D4 D3 D2 Di Do ных тактов ИНКРЕМЕНТ И ДЕК- РЕМЕНТ INR г Увеличить содержимое регистра на 1 0 0 D D D 1 0 0 4 DCR г Уменьшить содержимое регистра на 1 0 0 D D D 1 0 1 4 INR М Увеличить содержимое ячейки ЗУ на 1 0 0 1 1 0 1 0 0 10 DCR М Уменьшить содержимое ячейки ЗУ на 1 0 0 1 1 0 1 0 1 10 INX В Увеличить содержимое двойного регистра ВС на 1 0 0 0 0 0 0 1 1 6 INX D Увеличить содержимое двойного регистра DE на 1 0 0 0 1 0 0 1 1 6 INX Н Увеличить содержимое двойного регистра HL на 1 0 0 1 0 0 0 1 1 6 INX SP Увеличить содержимое указателя стека на 1 0 0 1 1 0 0 1 1 6 DCX В Уменьшить содержимое двойного регистра ВС на 1 0 0 0 0 1 0 1 1 6 DCX D Уменьшить содержимое двойного регистра DE на 1 0 0 0 1 1 0 1 1 6 DCX Н Уменьшить содержимое двойного регистра HL на 1 0 0 1 0 1 0 1 1 6 DCX SP Уменьшить содержимое указателя стека на? 1 0 0 1 1 1 0 1 1 6 СЛОЖЕНИЕ ADD г Прибавить содержимое регистра к содержи- мому аккумулятора 1 0 0 0 0 S S S 4 ADC г Прибавить содержимое регистра к содержимо- му аккумулятора с переносом 1 0 0 0 1 S S S 4
Набор команд микроЭВМ 183 Продолжение Код команды Мнемоника Описание Число машин- d7 d6 d5 D4 D3 d2 Dj Do A dM Ud ADD Прибавить данные, хра- нящиеся в ЗУ, к со- держимому аккумуля- тора 1 0 0 0 0 1 1 0 7 ADC M Прибавить данные, хра- нящиеся в ЗУ, к со- держимому аккумуля- тора с переносом 1 0 0 0 1 1 1 0 7 ADI Прибавить непосредст- венный операнд к со- держимому аккумуля- тора 1 1 0 0 0 1 1 0 7 ACI Прибавить непосредст- венный операнд к со- держимому аккумуля- тора с переносом 1 1 0 0 1 1 1 0 7 DAD В Прибавить содержимое двойного регистра ВС к содержимому HL 0 0 0 0 1 0 0 1 10 DAD D Прибавить содержимое двойного регистра DE к содержимому HL 0 0 0 1 1 0 0 1 10 DAD H Прибавить содержимое двойного регистра HL к содержимому HL 0 0 1 0 1 0 0 1 10 DAD SP Прибавить содержимое двойного регистра HL к содержимому указа- теля стека 0 0 1 1 1 0 0 1 10 ВЫЧИТАНИЕ SUB r Вычесть содержимое ре- гистра из содержимого аккумулятора 1 0 0 1 0 S S S 4 SBB г Вычесть содержимое ре- гистра из содержимого аккумулятора с зае- мом 1 0 0 1 1 S S S 4 SUB M Вычесть данные, храня- щиеся в ЗУ, из содер- жимого аккумулятора 1 0 0 1 0 1 1 0 7
184 Глава 3 Мнемоника Описание d7 D6 Код команды Продолжение Число машин- D5 d4 Г>3 D2 Di Do НЫХ тактов SBB м Вычесть данные, храня- щиеся в ЗУ, из содер- жимого аккумулятора с заемом 1 0 0 1 1 1 1 0 7 SUI Вычесть непосредствен- ный операнд из со- держимого аккумуля- тора 1 1 0 1 0 1 1 0 7 SBI Вычесть непосредствен- ный операнд из со- держимого аккумуля- тора с заемом ЛОГИЧЕСКИЕ ОПЕ- РАЦИИ 1 1 0 1 1 1 1 0 7 ANA г Поразрядная операция И над содержимым регистра и аккумуля- тора 1 0 1 0 0 s s s 4 XRA г Поразрядная операция ИСКЛЮЧАЮЩЕЕ-ИЛИ над содержимым ре- гистра и аккумулятора 1 0 1 0 1 s s s 4 ORA г Поразрядная операция ИЛИ над содержимым регистра и аккумуля- тора 1 0 1 1 0 s s s 4 СМР г Сравнить содержимое регистра с содержи- мым аккумулятора 1 0 1 1 1 s s s 4 ANA М Поразрядная операция И над данными, хра- нящимися в ЗУ, и со- держимым аккумуля- тора 1 0 1 0 0 1 1 0 7 XRA М Поразрядная операция ИСКЛЮЧАЮЩЕЕ- ИЛИ над данными, хранящимися в ЗУ, и содержимым акку- мулятора 1 0 1 0 1 1 1 0 7 ORA М Поразрядная операция ИЛИ над данными, хранящимися в ЗУ, и содержимым акку- мулятора 1 0 1 1 0 1 1 0 7
Набор команд микроЭВМ 185 Продолжение Код команды Мнемоника Описание Число машин- D- De D5 D4 D3 D2 Di Do тактов CMP M Сравнить данные, хра- нящиеся в ЗУ, с со- 1 0 1 1 1 1 1 0 7 держимым аккумуля- тора AN I Поразрядная операция И над непосредствен- ным операндом и со- держимым аккумуля- тора 1 1 1 0 0 1 1 0 7 XRI Поразрядная операция ИСКЛЮЧАЮЩЕЕ- ИЛИ над непосредст- венным операндом и содержимым аккуму- лятора 1 1 1 0 1 1 1 0 7 ORI Поразрядная операция ИЛИ над непосредст- венным операндом и содержимым аккуму- лятора 1 1 1 1 0 1 1 0 7 CPI Сравнить непосредствен- ный операнд с содер- жимым аккумулятора ЦИКЛИЧЕСКИЕ СДВИ- ГИ 1 1 1 1 1 1 1 0 7 RLC Циклический сдвиг со- держимого аккумуля- тора влево 0 0 0 0 0 1 1 1 4 RRC Циклический сдвиг со- держимого аккумуля- тора вправо 0 0 0 0 1 1 1 1 4 RAL Циклический сдвиг со- держимого аккумуля- тора с использованием флажкового бита пе- реноса влево 0 0 0 1 0 1 1 1 4 RAR Циклический сдвиг со- держимого аккумуля- тора с использованием флажкового бита пе- реноса вправо 0 0 0 1 1 1 1 1 4
186 Глава 3 Продолжение Код команды Число машин» Мнемоника Описание D7 Dr D5 D4 D3 D2 Di Do ных тактов СПЕЦИАЛЬНЫЕ ОПЕ- РАЦИИ СМА Инвертировать содержи- 0 0 10 1111 4 мое аккумулятора STC Установить бит перено- 0 0 110 111 4 са СМС Инвертировать бит пере- 0 0 111111 4 носа DAA Десятичная коррекция 0 0 1 0 0 1 1 1 4 содержимого аккуму- лятора ОПЕРАЦИИ УПРАВ- ЛЕНИЯ EI Разрешение прерывания 111110 11 4 DI Запрещение прерывания 11110 0 11 4 NOP Пустая операция 00000000 4 HLT Конец 0 1110 110 5 НОВЫЕ КОМАНДЫ МП 8085А RIM Чтение маски прерыва- 00100000 4 НИЯ SIM Установить маску пре- 0 0 1 1 0 0 0 0 4 рывания Примечания: 1. DDD или SSS: В 000, С 001, D 010, Е011, Н 100, L 101, ЗУ ПО, А 111. 2. Две возможные длительности цикла команды. (6/12) указывают чис- ла тактов, зависящие от значений флажковых битов. фирмы-изготовителя целую библиотеку программ. При этом широко используется аппаратура, т. е. соответствующий «де- кодировщик» должен хорошо знать как аппаратурное, так и программное обеспечение. В связи с копированием программ необходимо также об- ратить внимание на существование большого числа языков и диалектов программирования. При наличии отклонений в языке программирования копирование программ теряет вся- кий смысл, особенно в тех случаях когда обмен программами производится между ЭВМ разных фирм-изготовителей.
Глава 4 СИСТЕМА ПРОЕКТИРОВАНИЯ НА БАЗЕ МИКРОПРОЦЕССОРА 4.1. Введение Постоянно возрастающая степень интеграции элементов позволяет разместить современную микроЭВМ на одном кри- сталле или на нескольких кристаллах в одном корпусе типа DIP (рис. 4.1). Обычно в таком корпусе находится не только МП, ио и ППЗУ, ЗУПВ и необходимые порты ввода-вывода. Рис. 4.1. МП 8X300 фирмы Philips-Signetics. Очевидно, что для взаимодействия с подобной системой нужны внешние управляющие схемы. В ходе проектирования аппаратурного и программного обеспечения обычно требуется испытывать последовательно отдельные части системы и про- граммы с целью проверки, все ли специальные функциональ- ные схемы и подпрограммы реализованы так, как указано в проектной документации. Необходимо иметь возможность оста- навливать микроЭВМ по определенному адресу в программе для проверки промежуточных результатов, например результа- тов численных расчетов и информации, связанной с управлени-
188 Глава 4 ем работой игрушечной железной дороги или с управлением хода определенного процесса. На стадии проектирования и разработки практически ни одна программа и ни одна схема работать безошибочно не мо- гут. После того как программа введена в микроЭВМ, нужно не только корректировать вручную отдельные команды, но и вно- сить определенные изменения в ее текст. В частности, если забыли записать какие-либо команды, то в процессе коррек- ции можно либо ввести дополнительные переходы, либо впи- сать в текст недостающие команды, а затем осуществить об- ратный переход в соответствующую точку программы. В дан- ном случае ветвление необходимо для того, чтобы ввести в текст программы некоторую группу новых команд. Очевидно, что для осуществления подобных режимов нужно обладать возможностью ручного управления микроЭВМ. Система, описываемая в данной главе, не является мини- мальной. Существует возможность дальнейшего расширения за счет дополнительных магистральных приемопередатчиков и се- лекторов. Ручное управление осуществляется с помощью пуль- та ручного управления (ПРУ), который может присоединяться к шинам данных, адресов и управления микроЭВМ. Этот пульт позволяет производить проверку программ. ЗУ включает несколько ППЗУ для хранения программ, а в качестве оперативного ЗУ переменной емкости применяется ЗУПВ на 1К8 бит. В рассматриваемой системе используются ППЗУ 2708, которые допускают замену одного ПЗУ на другое. Кроме того, в блоке ЗУ располагается ПЗУ/ЗУПВ-имита- тор, предназначенный для хранения программы, которая нахо- дится в стадии проектирования, или, говоря точнее, в стадии тестирования. ПЗУ/ЗУПВ-имитатор представляет собой в дей- ствительности ЗУПВ, в котором с помощью переключателя можно заблокировать запись информации, в результате чего в нормальном режиме МП сможет осуществлять обращение только на считывание информации из ЗУ. Если в программе обнаружена ошибка или принято решение о необходимости замены определенных команд, то последующие операции осу- ществляются с помощью ПРУ. Переключатель позволяет вре- менно разрешить запись в ЗУ или реализовать некоторые дру- гие режимы работы. По окончании этих операций переключа- тель снова возвращается в положение, допускающее только чтение. Лучшим вариантом такого переключателя является пе- реключатель, который обеспечивает режим записи в ЗУ, после чего автоматически возвращается в исходное состоя- ние. Как установлено на практике, режим работы, допускающий только чтение, является абсолютно необходимым для нормаль-
Система проектирования на базе микропроцессора 189 ного функционирования системы. В частности, если програм- ма содержит ошибки, то в подобных случаях программист прибегает к помощи команд перехода, которые обеспечи- вают выход из соответствующего участка программы. Если та- кой выход оказывается возможным, то трудно предсказать, что именно произойдет сразу после него. В частности, МП мо- жет найти ту команду записи, которая исказила правильный текст программы. После этого придется вводить данную про- грамму заново. Описываемая система имеет также специальные входы для приема сигналов прерывания, так что при инициировании пре- рывания МП может передать в периферийную схему дополни- тельные данные, например содержащие сообщение о том, по какому входу получен запрос на прерывание. Такие средства для реализации режима прерывания используются, например, в том случае, когда требуется переписать программы на ленту кассетного магнитофона. Кроме того, указанные входы исполь- зуются при расширении системы, в частности за счет включе- ния в ее состав видеодисплея. Ввод и вывод данных производятся через ПРУ в двоичной форме. Для осуществления адресации на панели управления смонтированы 16 тумблеров, а для ввода данных — 8 тумбле- ров. Считывание и индикация двоичной информации произво- дятся с помощью светодиодов; 16 светодиодов используются для индикации адреса и 8 — для считывания данных. В случае необходимости ПРУ можно расширить за счет добавления не- которых новых схем, которые позволят вводить с клавиатуры шестнадцатеричные данные и адреса и выводить их на экран дисплея. Система ввода данных в шестнадцатеричной форме уже обсуждалась в гл. 1 т. 3. Шестнадцатеричный дисплей с цифровыми индикаторами будет рассмотрен в конце этой главы. Вывод данных в двоичной форме, в том числе на дисплей, многие считают устаревшим, однако практика показывает, что при использовании микроЭВМ, например для управления игру- шечной железной дорогой, трудности анализа существенно возрастают, если информация о работе этой дороги имеет шестнадцатеричную форму. В этом случае, чтобы яснее пред- ставить процесс управления, шестнадцатеричные числа требу- ется преобразовывать в набор битов. Аналогичная ситуация возникает и при использовании микроЭВМ для управления каким-либо процессом, в ходе которого необходимо включать или выключать, например, клапан или кран. По-видимому, ПРУ является в этом смысле наиболее универсальным устрой- ством, так как его можно применять как с двоичными, так и с шестнадцатеричными данными.
И90 Глава 4 Для программирования СППЗУ используется описанный в этом справочнике программатор, который производит заполне- ние ячеек СППЗУ, например типа 2708. Программирование СППЗУ производится после того, как разработанная програм- ма пройдет испытания на ПЗУ/ЗУПВ-имитаторе. Для пере- сылки программы из ПЗУ/ЗУПВ-имитатора в СППЗУ приме- няется специальная дамп-процедура. За один сброс (дамп) эта процедура может переслать все содержимое СППЗУ типа 2708, т. е. 1К8 бит информации. Эта процедура специально разработана для пересылки программ из ПЗУ/ЗУПВ-имитатора в СППЗУ. Если требуется переслать программу из другой ча- сти ЗУ, то эту программу сначала нужно поместить в ПЗУ/ /ЗУПВ-имитатор. Это можно сделать с помощью простой про- граммы пересылки, для которой требуется указать только ис- точник и приемник данных. Работа с такой программой будет также рассмотрена при обсуждении программирования СППЗУ. Описываемая здесь система на базе МП 8085А и ПРУ яв- ляется довольно сложной, однако, после того как мы познако- мились с областью применения микроЭВМ, разобраться в ее функционировании будет теперь не очень трудно. С другой сто- роны, для большей наглядности полезно еще раз рассмот- реть с помощью блок-схемы, что именно происходит в таких системах и какие функции реализуют применяемые в них спе- циальные устройства. 4.2. МикроЭВМ с МП 8085А На рис. 4.2 приведена блок-схема системы, в состав кото- рой входят МП 8085А, ЗУ и дополнительные схемы для осу- ществления прерывания и ввода-вывода данных. На рисунке также показан ПРУ (справа от штриховой линии), который обеспечивает ручное управление при тестировании и вводе данных. Для связи с внешними схемами используются буферы и приемопередатчики, которые обеспечивают дополнительную развязку МП от этих схем и большую управляемость, в част- ности при управлении шинами данных и адресов, реализован- ными в виде длинных плоских кабелей. Развязка МП необ- ходима для того, чтобы система в целом не выходила из строя при возникновении во внешних схемах таких нежелательных явлений, как короткие замыкания и т. д. Обработка прерываний (рис. 4.3) предназначена для того, чтобы после поступления запроса на прерывание МП путем опроса внешних устройств выяснил, какое из них инициировало этот запрос. После подтверждения запроса на прерывание МП сигналом INTA на шину данных должен поступить номер за-
Рис. 4.2. МП 8085А, с ЗУ и дополнительными схемами для об работки сигналов прерывания и ввода-вывода.
192 Глава 4 Внешние устройства Рис. 4.3. Обработка сигналов прерывания (упрощенная схема). пришиваемого устройства и МП должен получить об этом со- ответствующее сообщение. Эта информация требуется для обеспечения перехода из программы в соответствующую под- программу обслуживания прерывания. Если, например, запрос на прерывание исходит от диско- вого ЗУ, то МП вызывает подпрограмму, работающую таким образом, чтобы данные, которые после подтверждения запроса прерывания поступают из дискового ЗУ по шине данных в тре- буемую секцию ЗУПВ, были записаны в форме, пригодной для дальнейшей обработки. Кроме того, по сигналу INTA, выдавае- мому МП, схема прерывания сообщает через дешифратор со- ответствующему внешнему устройству, что прерывание под- тверждено и что можно начинать пересылку данных. Такая ор- ганизация связи носит название «квитирование» (или «рукопо- жатие»). При вводе и выводе данных необходимо указать, какие уст- ройства, связанные с шиной данных, например регистры, долж- ны принять данные с шины данных или передать их на эту ши- ну и в какой именно момент времени (рис. 4.4). Эта инфор- мация содержится во втором байте команды ввода-вывода,
Система проектирования на базе микропроцессора 193 OUTS 4 (L) Рис. 4.4. Архитектура выхода МП (упрощенная схема). Один дешифратор типа 74LS42 выбирает восемь регистров (портов). который поступает на шину данных. Последующая дешифрация поступающей информации производится при появлении сигна- лов IOW(L) или IOR(L) (IOW дает указание «вывести дан- ные», a IOR— «ввести данные»). При выполнении этих дейст- вий шина данных соединяется с входами дешифратора, а команды чтения или записи подаются на D-вход дешифратора. Это можно сделать потому, что мы ограничились всего лишь восемью портами ввода-вывода. При подаче на D-вход дешиф- ратора сигнала высокого уровня деактивизируются все выходы О—7, что обеспечивает разрешение для дешифратора. Как уже отмечалось выше, сигналы чтения и записи IOR(L) и IOW(L) выдаются во время обработки второго байта коман- ды ввода-вывода. Как для ввода, так и для вывода этих дан- ных необходимо иметь в своем распоряжении набор дешифра- торов. Аналогичная дешифрация должна происходить и при выбо- ре ЗУ, в частности при выборе кристалла, а именно дешифра- ция информации с 10-го по 15-й бит адреса (рис. 4.5). С по- мощью дешифратора можно указать, какой кристалл с ЗУ на 1024 слова (по 8 бит в каждом) вызывается. Адресацию на
ЗУ Рис. 4.5. Выбор ЗУ ((упрощенная схема), а —выбор ЗУ; б — схема мультжплексирования шины адресов.
Система проектирования на базе микропроцессора 195 кристаллах в пределах адресов 0—1024 можно осуществить непосредственно через соответствующие адресные биты, связан- ные с адресными входами кристаллов ЗУ. Адресная информация МП 8085А пересылается в мульти- плексном режиме (см. разд. 2.11). Старшие биты адресов А8—А15 можно считывать непосредственно с DIP-выводов МП 8085А, а младшие биты — с шины данных. Адресная ин- формация появляется на шине данных в тот момент, когда вы- дается сигнал ALE(H) (Address Latch Enable — разрешение адресного режима) (см. рис. 4.5 и 4.6). Так как всегда необходимо иметь полный адрес, то млад- шие адресные биты должны храниться в регистре, использую- щем D-триггеры, т. е. в схеме типа 8212, которая представляет собой 8-разрядный регистр. Соответствующую адресную информацию можно передать в подходящий момент времени, подавая ALE на стробируемый вход. При активизации HOLD-входа МП заканчивает послед- нюю выполняемую команду и переходит в HOLD-режим. Как уже отмечалось ранее, в таком режиме МП отключается от шин данных, адресов и управления. В рассматриваемой систе- ме это используется для того, чтобы обеспечить запись в ЗУ и считывание из него с помощью пульта ручного управления, т. е. чтобы установить прямую связь между ПРУ и ЗУ. Сигнал IO(H)/M(L) в комбинации с сигналами RD(L) и WR(L) образует новые сигналы IOW(L), IOR(L), MEMW(L) и MEMR(L), которые затем поступают в схемы, управляющие вводом, выводом и ЗУ. 4.3. Запоминающее устройство Для хранения программы в данной системе используются несколько СППЗУ типа 2708, а ЗУПВ формируются из двух статических ЗУПВ типа 2114. Как уже отмечалось выше, си- стема включает ПЗУ/ЗУПВ-имитатор, также выполненный в виде двух статических ЗУПВ типа 2114. Вход WM(L) (Write Memory — записать в память) управляется переключателем, который блокирует запись из МП в ЗУПВ при проверке про- граммы, кроме тех случаев, когда этот режим записи требует- ся для исправления ошибок в программе или для замены про- граммы с помощью ПРУ. Как СППЗУ, так и ЗУПВ имеют С5(Е)-вход, с помощью которого производится выбор кристалла (см. рис. 4.5). Кроме того, ЗУПВ имеет вход управления WM(L), на который при записи подается напряжение низкого уровня (L-уровня), а при считывании — напряжение высокого уровня (Н-уровня). Нако- нец, все кристаллы ЗУ снабжены клеммами ввода адресов
Входные управляющие сигналы СП
Система проектирования на базе микропроцессора 197 АВО—АВ9 и вывода данных DB0—DB7 (см. также рис. 4.7). Если деактивизируется CS(L), т. е. сигнал CS(L) принимает высокий уровень, то соответствующий корпус DIP отсоединяет- ся от шины данных (DBn при этом отключаются). При записи в ЗУ и считывании из него с помощью ПРУ требуемые сигна- лы управления и выбора, такие, как WM(L), а также адрес- ная информация поступают из ПРУ. Имеется также сигнал XMW(L) (External Memory Write — запись во внешнюю па- мять), с помощью которого ПРУ управляет операциями чтения и записи. Данные и адреса пересылаются на соответствующие шины с помощью буферных регистров, работающих в HOLD-режиме и активизируемых ПРУ для записи информации. Связь МП с СППЗУ осуществляется через двухрядные вы- воды и поэтому возможна замена СППЗУ на ППЗУ других типов. В связи с использованием ПЗУ/ЗУПВ-имитатора рассмот- рим более подробно назначение CSext(L)-входа кристалла ЗУ. В данной системе программы записываются в разные блоки ЗУ, в качестве которых обычно используются ППЗУ или СППЗУ. Для тестирования и корректировки этих программ не- обходимо временно использовать адресацию ПЗУ/ЗУПВ-ими- татора, или, другими словами, имитатор должен имитировать адресами ЗУПВ адреса СППЗУ, где программа будет хранить- ся по окончании тестирования и корректировки. Процесс ад- ресации осуществляется наиболее простым способом с помощью CS(L)-клеммы СППЗУ, которая соединяется с CSext(L)-клем- мой ПЗУ/ЗУПВ-имитатора и селектором, включенным так, что- бы можно было реализовать указанное соединение. На практике 20-й вывод корпуса DIP СППЗУ 2708 часто соединяется с CSext(L)-входом, а затем с селектором. Иногда CS(L)-клеммы соединяются с промежуточными выводами, к которым затем присоединяется С5ех1(Ь)-вход. 4.4. Пульт ручного управления Пульт ручного управления должен обеспечить запись и считывание как адресов, так и данных, поэтому на его панели расположены 16 адресных тумблеров (два байта) и 8 тумбле- ров данных (один байт). Если тумблер находится в верхнем положении, то он обеспечивает установку в состояние 1, если в нижнем — то в состояние 0. Непосредственно над тумблерами находятся светодиоды, которые указывают числовые значения адресов ячеек и данных. Кроме того, на панели смонтирован четырехпозиционный пере- ключатель для выбора режимов RUN, STEP, READ и WRITE.

Система проектирования на базе микропроцессора 199 В режиме RUN МП получает разрешение на выполнение про- граммы со скоростью, которая определяется генератором синх- росигналов. В режиме STEP выполняется один шаг программы, заключенный между двумя последовательными обращениями к ЗУ. В режиме WAIT программа выполняется в пошаговом’ варианте, т. е. во время цикла выборки команды с помощью» светодиодов можно произвести считывание не только команды, но и результата операции с адресом, по которому этот резуль- тат записан в ЗУ или извлечен из ЗУ. Таким образом, имеется возможность записать в ЗУ или извлечь из него с последую- щей индикацией светодиодами не только команды, но и ре- зультаты их выполнения. В режиме READ, нажимая клавишу LOAD, можно вызвать считывание данных непосредственно из выбранных ячеек ЗУ, значения адресов которых устанавливаются на панели управ- ления с помощью адресных тумблеров. В режиме WRITE, используя клавишу LOAD, а затем кла- вишу STEP, можно записать в ЗУ данные, набранные с по- мощью тумблеров данных. При нажатии на клавишу STEP адрес автоматически увеличивается на 1. Это увеличение реа- лизуется двоичным счетчиком ПРУ, который используется в качестве адресного регистра. На панели управления имеются также клавишные переключатели для фиксации совпадений данных или адресов (двухпозиционные переключатели), с по- мощью которых можно остановить МП по определенному ад- ресу, набранному при помощи адресных тумблеров на панели управления. Подобные остановы в программе можно произве- сти и при определенных значениях данных, которые устанавли- ваются тумблерами данных. Если перевести клавишу совпаде- ния адресов в положение 1, то МП остановится в том случае, ког- да адрес в его счетчике команд станет равным двоичному ко- ду, набранному на панели управления с помощью адресных тумблеров. Совпадение данных происходит в том случае, когда при вы- воде данных на шине данных появляется код, совпадающий с тем, который установлен тумблерами данных. Кроме того, МП можно остановить и в том случае, когда необходимо уз- нать, какие данные записываются в определенные ячейки опе- ративного ЗУ. В этой ситуации адресные светодиодные инди- каторы указывают адреса данных в оперативном ЗУ, а инди- каторы данных — данные, находящиеся по этим адресам. Клавишный переключатель совпадения адресов позволяет остановить МП по одному из адресов, установленных адрес- ными тумблерами. Переключатель совпадения данных обеспе- чивает то же самое для данных, установленных тумблерами данных.
200 Глава 4 Процедура останова МП за счет совпадения адресов может быть использована при тестировании для останова процессора, чтобы затем можно было продолжить выполнение программы в пошаговом режиме. Тестирование программы обычно осуществляется в несколь- ко приемов. Та часть программы, которая была проверена ранее, не тестируется. При каждом рестарте эта часть програм- мы пересылается в ЗУ, например, с помощью переключателя совпадения адресов. При проверке программных циклов даже второе повторение цикла обычно неинформативно, не говоря уже о третьем, четвертом и т. д. Для контроля правильности выполнения цикла следует проверять значения переменных. МП останавливается в тот момент, когда вычисленные пере- менные пересылаются в ЗУ и значения этих переменных счи- тываются с помощью светодиодных индикаторов. 4.5. Специальные схемы микроЭВМ На рис. 4.6 приведены подробная схема МП с буферами адресов и данных, а также некоторые схемы, предназначенные для формирования управляющих сигналов. Из этого рисунка видно, что биты адреса AL8—AL15 можно передавать прямо в МП, а биты AL0—AL7 — используя шину данных. Передача этих адресных битов в 8-разрядный регистр D-типа 8212 про- изводится сигналом ALE. Сигнал ALE подается при этом на стробируемый вход регистра. При выполнении команды HOLD буферные выходе ИС 8212 отключаются, так как, работая в этом режиме, МП освобождает шины данных, адресов и уп- равления для других применений, т. е. переводит их в нейт- ральный («отсоединенный») режим. По этой причине на адрес- ные буферы типа 74LS244 (в правом верхнем углу схемы) од- новременно поступает команда HLD. Указанные буферы отсо- единяются также и в том случае, когда на выводы 1 и 19 ИС 74LS244 подается напряжение L-уровня (см. рис. 4.6). В HOLD-режиме буферы данных (приемопередатчики) мо- гут воспринимать внешние данные; однако это обстоятельст- во не приводит ни к каким последствиям, потому что участок шины данных между выходами буферов и МП находится в отсоединенном состоянии. Комбинации управляющих сигналов IO(H)/M(L), RD(L) и WR(L) используются в левом нижнем углу схемы (рис. 4.6) для получения сигналов IOR(L), IOW(L), MEMR(L) и MEMW(L). Как будет показано ниже, такие комбинированные сигналы применяются для управления ЗУ и портами ввода-вы- вода.
Система проектирования на базе микропроцессора 201 Управляющие сигналы RDYIN(H), RESIN (L) и HOLD(L) на входе МП обеспечиваются ПРУ. Сигнал RDYIN переводит МП в WAIT-режим. При пошаговом выполнении программы такой режим необходим для того, чтобы останавливать МП каждый раз, когда возникает связь между МП и ЗУ. Это позволяет считывать со светодиодов соответствующие команды и данные* с шины данных. Сигнал RESIN (L) обеспечивает рестарт МП после нулевого адреса. Сигнал на этом входе появляется по- сле нажатия клавиши RESET (Сброс) на панели управления- ПРУ (см. рис. 4.24). HOLD-вход необходим при использовании ПРУ для чтения: содержимого ЗУ и записи в него, а также для того чтобы от- соединять шины данных, адресов и управления от МП. На рис. 4.7 приведена подробная схема ЗУ. Шина данных, этой схемы связана со всеми кристаллами ЗУ, а шина адре- сов— с адресными линиями ABUS0—ABUS9. После дешифрации биты ABUS 10—ABUS 15 обеспечивают* различные сигналы выбора кристалла (CSn(L)). Выборка ячейки в ЗУ объемом 1024 слова осуществляется адресными битами ABUS0—ABUS9. По этой причине их можно переда- вать на все кристаллы ЗУ. Как уже отмечалось выше, выбор* кристалла ЗУ производится сигналом CSn(L), который дорми- руется в результате дешифрации адресных битов ABUS 10— ABUS15. Команда записи в различные ЗУПВ производится сигналом WM(L). Когда сигнал WM(L) имеет низкий уровень, все- ЗУПВ переходят в режим записи. Когда сигнал WM(L) прини- мает высокий уровень, информация считывается по выбранно- му адресу, если при этом по крайней мере активизирован со- ответствующий сигнал CS. Сигналы выбора кристалла пода- ются на одну из линий CSO(L)—CS7(L), показанных на рис. 4.7 справа. ЗУПВ в нижней части схемы является на самом деле ЗУПВ/’ /ПЗУ-имитатором, который в нормальном режиме работы до- пускает лишь считывание. Только с помощью переключателя,, показанного на схеме слева внизу, можно произвести запись в- этот участок ЗУ, что бывает необходимо при внесении измене- ний в текст программы. Специальная схема формирования сигналов выбора кри- сталла ЗУ приведена на рис. 4.8. Здесь адресные сигналы ABUS 10—ABUS 12 дешифруются с помощью дешифратора ти- па 74LS42 и преобразуются в сигналы выбора кристалла* CS0(L)—CS7(L); отдельные дешифраторы выбираются с по- мощью дешифрованных сигналов, поступивших из адресных, линий ABUS 13—ABUS 15. D-вход (12-й вывод корпуса DIP) используется в качестве разрешающего входа, так как если на
202 Глава 4 Рис. 4.8. Обработка сигналов управления ЗУ (выбор кристалла). такой вход поступает активный сигнал высокого уровня, то ни один из выходов соответствующего дешифратора не аквизи- руется. Следует отметить, что в случае активного D-входа ак- тивизируются 8-й и 9-й выходы дешифратора, которые здесь, однако, не используются. Как видно из схемы, показанной на рис. 4.8, указанная воз- можность используется также для выбора кристалла с по- мощью управляющих сигналов MEMR(L), HLDA(L),
Система проектирования на базе микропроцессора 203 MEMW(L) и XMW(L). Если на D-вход (12-й вывод корпуса типа DIP) поступает активный сигнал высокого уровня, то CS(L)-сигнал при этом не вырабатывается. Для обращения к ЗУ на указанный вход необходимо подать активный сигнал низкого уровня. Это осуществляется в том случае, когда акти- визируется один из сигналов MEMR(L), HLDA(L), MEMW(L) или XMW(L). Последний из них является командой записи,, которая вырабатывается ПРУ. Сигналы MEMR(L) и MEMW(L) поступают от МП. При активизации HLDA(L) про- исходит обращение к ЗУ для чтения или записи с помощью» ПРУ. CS(L)-сигналы подаются на входы отдельных кристаллов ЗУ, что обеспечивает разрешение на обращение к ним. На рис. 4.9 приведена подробная схема организации ввода данных в МП и вывода данных из МП. При выполнении команд ввода-вывода по шине адресов передается информация, относящаяся к режиму работы портов, которые должны при- нять или передать соответствующие данные. И здесь сигналы, поступающие через шину адресов, дешифруются аналогично CS (L)-сигналам. D-вход также используется в качестве разре- шающего входа, что позволяет выбирать различные дешифра- торы, указанные на рисунке справа. Каждое устройство ввода-вывода получает разрешение по- сле подачи сигнала IOR(L) или IOW(L) на D-вход дешифра- тора, который дешифрует старшие адресные биты (см. дешиф- ратор 74LS42 на рисунке слева). Данная схема применяется в системе дважды: при выборе портов ввода информации и при выборе портов вывода инфор- мации. При использовании выходных регистров данных OUTS- сигналы можно использовать в качестве синхросигналов для этих регистров, а в случае ввода данных (INS-сигналы) —для активизации выходных буферов регистров, которые соединены с шиной данных (для вывода из отклоненного состояния). На рис. 4.10 приведена подробная схема обработки сигна- лов прерывания. Слева на схеме находится шифратор, который активизируется при наличии запроса на каком-либо входе. Этот приоритетный шифратор преобразует запрос в двоичный код. Одновременно он вырабатывает активный сигнал высоко- го уровня, который отмечает прием запроса на прерывание. Этот сигнал может понадобиться для уведомления МП о по- ступлении соответствующего запроса на прерывание INTR(H). При поступлении запроса на прерывание МП заканчивает выполнение текущей команды и через сигнальную шину INTA(L) сообщает о том, что запрос на прерывание принят. Далее это сообщение должно быть передано в запрашивающее устройство через дешифратор, расположенный в нижней части
204 Глава 4 Байт адреса (2-й байт Команды ввода-вывода) Рис. 4.9. Обработка сигналов управления вводом-выводом. схемы. При этом двоичный код преобразуется в код, который активизирует одну из восьми выходных шин, связанных с со- ответствующим запрашивающим устройством. Одновременно INTA(L) поступает в качестве сигнала разрешения в буфер, связанный с шиной данных, в результате чего МП считывает соответствующее двоичное сообщение, т. е. номер запрашиваю- щего устройства. 4.6. Практическая реализация ПРУ Ниже подробно рассматриваются схемы, которые позво- ляют ПРУ с помощью адресных тумблеров и тумблеров дан- ных отсоединяться от шин адресов и данных в ситуациях, ког-
Система проектирования на базе микропроцессора 205 INTR(H) К периферийным устройствам Рис. 4.10. Обработка сигналов прерывания. да МП не находится в HOLD-режиме. Это делается с помощью однонаправленных буферов типа 74LS244 (рис. 4.11 и 4.12). Во всех режимах работы МП можно визуально наблюдать состоя- ние шин данных и адресов с помощью светодиодов, которые по- стоянно присоединены к указанным шинам через инверторы ти- па 74LS04. Как уже указывалось выше, адрес, установленный с по- мощью адресных тумблеров на панели управления, можно ис- пользовать для самых разных целей (см. рис. 4.11). В режиме совпадения адресов производится сравнение изме- няющихся текущих адресов, которые появляются на адресной шине, с адресом, установленным на панели управления с по- мощью адресных тумблеров. Пять компараторов типа 74LS85 выполняют это сравнение, активизируя сигнал ADID, когда ад- рес, появляющийся на шине адресов, совпадает с адресом, установленным соответствующими тумблерами.
Переключа- 0,15мкф AS 4(H) 12 13 15 Схемы проверки совпадения t^XSSSSS адресов (компараторы) 4 Y ;;в ,еЖ Т, ЬТг ]>вход<[ I 74LS85 I Ркомп.о J Выход 6D HEF4029B AS 8(H) AS12(H) HEF4029B T? I g T?, /о /4 fKOMn.Q 13 & |en св Сч./рег П DIV16 £2______ т, Съ А ]>Вход< [ 74LS85 рКОМП.р |Выход [ 1£ Р КОМП Q 12 | Выходу [ Т' f K-QMi <Ар АВИИЮГ41^ Переключатели адресов Напряжение питания + 5 В Каждая группа из трех ИС заземляется через керами- ческий конденсатор емкостью 0,15 мкФ 1 Вход I 74LS85 _ Р комп о 15 j Выход 1. Lll I 74LS85 I -— 12 Гл6тп.ч|11 __12 J Выход [ 2_ |5 [6 17 ADJD(H) \ASQ(H) 4 12 ~7? \ 3 ЧЮАР(Н) г \AS4(H) 5. 4 \ 13 \ з \LOAD(H) 1 \AS8(H) _5* 4 \ 12 \ 13 \ 3 \LOAP(H) К \AS 12(H) ? 4 12 13 8> |EN С6 Сч./рег. Hdivis г1 [fcizq SABO(H) HEF4O29B SAB8(H) & |en С6 сч /рег. nPivie г 6 SAB12(H) / 6D HEF4029B П / 14 / 2 / 19h /5 13 18 16 14 12 .8 74LS244 1—JZ /7 21 13 11 /2ABUS!_5(H>^ HLPA(L) 2_ 18 16 SPAC(H) 3ABUS8(H)y 5________/ \ 3 \ п \ 5 \ 9 13 \ 1_ \ 11 \ з \ 9_ 5_ \ 13 \ 5_ \ 11 ABUSI(H)- ABUSI4(H) Индикация адреса _______ с помощью ~ светодиодов ^\ABUSO Ь-\аВЦ515 560 HLPA(L) _______________________________________SPAC(H) _______________________________________ADID(H) Значения адреса на адресных переключателях и адресной шине совпадают Рис. 4.11. Обработка адресной информации пультом ручного управления, Шина адресов (вход/выход)
Система проектирования на базе микропроцессора 207 Рис. 4.12. Обработка данных пультом ручного управления. Влод-выьод шины данных, Информация с помощью адресных тумблеров передается на параллельные входы четырех последовательно соединенных 4-разрядных счетчиков/регистров типа HEF4029B. Сигналом LOAD можно пересылать адрес, установленный адресными тумблерами, в этот регистр. Сигнал SPAC, т. е. импульс с вы- хода ждущего мультивибратора, который появляется после то- го, как отпускается нажатая клавиша STEP-переключателя, приводит к увеличению на 1 содержимого адресного счетчика. Сигнал SPAC поступает на тактовый вход младшего двоичного 4-разрядного счетчика. Таким образом, с помощью адресных тумблеров можно установить счетчик в определенное началь- ное состояние, и затем увеличивать содержимое счетчика STEP-переключателем на 1 после каждого нового шага обра- ботки, выбирая ячейки ЗУ в режиме READ и WRITE через выходные буферы в 74LS244. Многое из того, что было сказано об адресных тумблерах, относится и к тумблерам данных (см. рис. 4.12). В отличие от схемы, показанной на рис. 4.11, здесь отсутствует двоичный
208 Глава 4 счетчик/регистр. Кроме того, так как здесь обрабатывается лишь один байт данных, то применяются только два компара- тора и один буфер типа 74LS244. Сигнал, который появляется при совпадении данных, обозначается через DAID. Этот сигнал временно хранится в D-триггере для того, чтобы в течение сле- дующего машинного цикла МП мог перейти в WAIT-режим. D-триггер сбрасывается в нуль при подаче сигнала STEP. Светодиодные индикаторы связаны с шиной данных инвер- тирующим буфером типа 74LS04. В режиме записи данные пе- редаются на шину данных, потому что буфер 74LS244 получа- ет разрешение только в режиме записи от ПРУ. Однонаправ- ленный буфер получает разрешение по сигналу XMW(L). Управляющая схема ПРУ выглядит несколько усложнен- ной, так как здесь используются самые разнообразные элемен- тарные схемы. Однако она по существу не содержит никаких сложных элементов с высокой степенью интеграции в одном корпусе типа DIP. Эта схема состоит из блока управления ре- жимом работы и STEP-блока, показанных на рис. 4.13 и 4.14. В первом блоке находится переключатель режимов (четырехпо- зиционный переключатель с фиксированными положениями). Когда переключатель режимов устанавливается в опреде- ленную позицию, триггеры, которые заблокированы в дан- ной позиции, сбрасываются в нуль, а тот триггер, с которого будет считываться информация, переводится в состояние 1. Таким образом, мы имеем здесь в сущности схему прерывания для последующего включения. Первое переключение никаких проблем не создает, так как в ходе выполнения первого обра- щения сначала производится считывание данных с триггеров и их сброс в нуль. Ситуация изменяется при переходе пере- ключателя выбора в другое состояние. Сигналы RMOD(L) и WMOD(L) активируются в режимах чтения и записи и обеспечивают сигнал HOLD(L), с помощью которого МП отсоединяет шины, когда какая-либо информация с помощью ПРУ записывается в ЗУ или считывается из нее. Как видно из приведенной схемы, сигнал RUN(L) генери- руется в том случае, когда МП не находится в режимах WRITE READ, STEP и не обрабатываются совпадения данных или ад- ресов. Работая в режиме совпадения, МП останавливается при возникновении совпадений данных или адресов, так как при этом на одном из входов соответствующего порта И-НЕ появ- ляется напряжение низкого уровня, а на выходе — напряжение высокого уровня, в результате чего RUN (L) деактивиру- ется. Клавишный переключатель RESET (сброс) обеспечивает сигнал RESIN(L), который производит рестарт МП. При
Система проектирования на базе микропроцессора 209 + 55 /0 кОм .HLDA(H) \J0 кОм ’/4 х HEF4011В 2t 1/2* HEF4012B ! STMOD(L) RUN (L)l 'Переклю- чатель / режимов/ °" STEP(L) READ(L) WMOD(H) 6 XMW(L) ’/3X741510 */4x HEF4011B WRITE(L) V2XHEF4012B 12 WMODE(L) 13 STEP(H) STEP(H) RMOP(L) Ю кОм + 5B HEF401IB HEF4049B 10 кОм HEF40I2B HEF4049B Сброс ( L) '/4XHEF4011B 10 кОм+5 В Р | Переключатель проверки ' п------ данных на совпадение 10 кОм + „о Н-----1— Переключатель проверки * —*---------------^адресов на совпадение ADID(H) Адреса совпали__________________ PAID (Н) Данные совпали__________________ HOLD(L) ’/3X74LS1O т(н> 12 МЩ) 74LS00 12 13 6 3 ’/6HEF4049B 12 RESIN (L) 10 RESET(H> HEF4011B Рис. 4.13. Обработка данных в режиме работы пульта ручного управления. этом из сигнала RESIN (L) за счет инверсии получается сигнал RESET (Н), который сбрасывает в нуль периферийные схемы, такие, как регистры ввода-вывода, связанные с шиной данных. Сигнал XMW(L) формируется только тогда, когда с помощью STEP-переключателя осуществляется переход в ре- жим WRITE. В схеме, приведенной на рис. 4.14, после STEP-переключа- теля находится триггер для подавления дребезга. При нажатии клавиши STEP-переключателя STEP-триггер переходит в со- стояние 1. При освобождении этой клавиши, т. е. при переходе триггера из состояния 1 в состояние 0, схема NE555 запускает ждущий мультивибратор, который выдает сигнал SPAC(H), необходимый для увеличения на 1 содержимого адресного ре- гистра. STEP-триггер вырабатывает также синхросигнал для D-триггера (D1), который выдает один сигнал READY. Эта ге-
210 Глава 4 Рис. 4.14. Пошаговая обработка данных пультом ручного управления. нерация происходит одновременно с 1—>0-переходом. Как уже отмечалось, с помощью сигнала READY(H) можно деактиви- зировать МП в течение периода Т2; при этом микроЭВМ пере- ходит в WAIT-режим. В результате выполнение программы останавливается и микроЭВМ ждет прихода следующего сиг- нала READY. Поскольку каждый раз создается только один сигнал READY, микроЭВМ может увеличить в выполняемой программе лишь один адрес. Сигнал READY нельзя хранить слишком долго, так как в противном случае микроЭВМ успеет выполнить несколько следующих команд. По этой причине сно- ва считывается содержимое D-триггера при возвращении пере- ключателя в исходное состояние и с помощью сигнала ALE триггер сбрасывается в нуль. После появления сигнала STEP обычно реализуется преды- дущий машинный цикл и затем начинается следующий. Так
Система проектирования на базе микропроцессора 211 как сигнал ALE сбрасывает D-триггер в нуль, то RDYIN в те- чение периода Т2 в следующем цикле будет деактивизирован и микроЭВМ снова перейдет в WAIT-режим. Таким образом осу- ществляется пошаговое выполнение программы. Выход Q(L) D-триггера связан с ИС 74LS00, т. е. с портом ИЛИ-HE для L-сигналов. Если Q(L) имеет низкий уровень, то RDYIN (Н) принимает высокий уровень и микроЭВМ полу- чает разрешение на выполнение операции. RDYIN также акти- визируется в том случае, когда активизирован сигнал RUN(L), т. е. если четырехпозиционный переключатель режимов переве- ден в положение RUN (см. рис. 4.24). С RDYIN-выходом при помощи двухвходовой схемы И-НЕ связан светодиодный индикатор, который сообщает, находится ли МП в WAIT-режиме. Сигнал HLDA(L) подается на второй вход этой схемы для того, чтобы исключить считывание D-триггера в HOLD-режиме. Принимаемый сигнал HLDA(H) инвертируется в HLDA(L) и высвечивается на HOLD-индика- торе, расположенном на панели пульта ручного управления. На рис. 4.15 приведена временная диаграмма, из которой видно, что именно происходит в STEP-режиме после нажатия клавиши STEP. Нажатие на эту клавишу приводит к считыва- нию D-триггера. Считывание производится при возвращении клавиши в исходное состояние. Этот триггер активизирует
212 Глава 4 RDYIN до тех пор, пока сигнал ALE не сбросит в нуль D-триггер и пока микроЭВМ после соответствующего цикла ЗУ не вернется в WAIT-режим, в котором она остается до сле- дующего нажатия кнопки STEP. На рис. 4.2 была приведена блок-схема, из которой видно, каким образом связаны между собой различные специальные схемы микроЭВМ и ПРУ. Шины адресов и данных представ- лены в этой схеме в виде широких полос. Это означает, что все выводы адресов и данных на корпусах DIP, которые имеют одинаковое мнемоническое обозначение, должны быть объеди- нены. Индивидуальные линии являются управляющими шина- ми, которые соединяют отдельные схемы. Подобные управляю- щие сигналы используются и в других специальных схемах, из которых состоит система с ПРУ. Связь с внешними схемами осуществляется через шину дан- ных под управлением сигналов выборки ввода и вывода или шины данных. О том, как можно соединить внешние схемы с микроЭВМ, можно познакомиться в следующей главе. На рис. 4.16—4.20 показана маркировка корпусов типа DIP для ряда схем, применяемых в микроЭВМ и ПРУ. 4.7. Системы питания микроЭВМ и ПРУ По аналогии с другими ТТЛ-схемами, для питания МП 8085А используется источник с выходным напряжением +5 В. С другой стороны, для питания СППЗУ, кроме напря- жения +5 В, требуются также напряжения +12 В и —5В. ЗУПВ/ПЗУ-имитатор имеет источник питания с дублирую- щей системой батарей, т. е. кроме сетевого выпрямителя в нем имеется источник, который обеспечивает требуемое напряжение при аварии в сети. Переключение должно происходить автома- тически, так как после аварии в сети информация, которая хра- нится в ЗУ, не должна быть потеряна. На рис. 4.21 приведена схема питания, состоящая из трех выпрямителей со сглаживающими фильтрами, после которых включены стабилизаторы в интегральном исполнении, обеспечи- вающие выходные напряжения +5 В, —5 В и +12 В. Такой источник можно использовать для питания МП с ЗУ и допол- нительными электронными схемами. Для питания ПРУ требует- ся только напряжение +5 В. Схема питания ПРУ приведена на рис. 4.22. Следует заметить, что напряжение питания должно быть раз- вязано через логическую землю с помощью керамических кон- денсаторов емкостью 0,15 мкФ, каждый из которых подключен к трем корпусам типа DIP.
Система проектирования на базе микропроцессора 213 XI с 1 40 □ + UB(+5B) Х2 □ 2 39 2] HOLD RESET OUT □ 3 38 □ HLDA SOD Е 4 37 □ CLK(OUT) SID Е 5 36 □ RESET IN TRAP □ 6 35 3 READY RST7.5 [2 7 34 □ 10/M RST6,5 EZ 8 33 □ S! RST5,5 E 9 32 □ RD INTR E 10 31 3 WR Inta E 11 8085A 30 □ ALE adoE 12 29 □ so ADI E 13 28 □ A15 AD2E 14 27 JAI4 AD3 E 15 26 □ A13 AD4 E 16 25 □ AI2 ADS E 17 24 □ All AD6 E 18 23 □ aio AD7E 19 22 □ A9 20 21 □ A8 Рис. 4.16. Маркировка выводов на корпусе МП 8085А. Чтобы избежать нежелательных паразитных связей по шине логической земли, рекомендуется изготавливать ее на печатной плате как можно более широкой (2—3 мм). Светодиоды всегда соединяются с шинами данных и адре- сов через инверторы типа 74LS04. Чтобы не перегружать источ- ник питания, между шиной источника питания и каждым свето- диодом включается резистор сопротивлением 560 Ом. В резуль- тате ток через каждый светодиод ограничивается уровнем 8 мА, который соответствует максимальному току, обеспечиваемому ТТЛШ-инвертором. При токе 8 мА яркость свечения светодиода достаточна для надежного считывания данных или адресов. Схема источника питания с дублирующей батареей приведе- на на рис. 4.23. Выпрямитель обеспечивает выходное напряже- ние 15 В, которое после стабилизатора на 5В подается на ЗУПВ/ПЗУ-имитатор. Напряжение питания обозначено на этой
2708 - 1к8-СППЗУ Земля 74LS04 (г) 74LS148 W (д) G = 0 : проводящий G = 7 : изолированный (вход отключен) 74LS 244
Система проектирования на базе микропроцессора 215 051(2/ 24 П ив MD □ 2 23 □ INT DI1 □ 3 22 □ DI8 D01L 4 21 □ 008 DI2 Е 5 20 □ DI7 002 Е 6 19 □ DO7 8212 013 Е 18 □ DI6 D03 □ 8 17 □ DO6 DI4 Е 9 16 □ DI5 004 Е Ю 15 □ DO5 STB Е 11 14 2] CLR ЗМЛЯ Е 12 13 □ DS2 Функциональная таблица ИС8212 STB (Н) МО (Н) DS1 (L) DS2(H) 0 0 0 Состояние 3 (отключенное) 1 0 0 Состояние 3 (отключенное) 0 1 0 Фиксация данных (память) 1 1 0 Фиксация данных (память) 0 0 1 Фиксация данных (память) 1 0 1 Вход данных 0 1 1 Вход данных 1 1 1 Вход данных DII-DlS-вход данных; DOI-DOB-выход данных; DS1(L) -DS2(H)-выбор устройства; MD (И)-режим; STB (Н)-строб; INT(^-прерывание (L-активный сигнал); CLR-очистка ({.-активный сигнал) (ж) Функциональная таблица 74LS243 Управляющие входы Состояние приемопередатчика GAB GBA А в 1 1 и г 0 1 • • 1 0 изолирован 0 0 ’ 1 1 и • Не разрешено; возникающие колебания могут запирать приемопередатчики 1-вход ; U-выход 74LS243 (3) Рис. 4.17. Выводы на корпусах СППЗУ 2708 и некоторых ИС серии 74LS, которые используются в МП. схеме через PERM5. Параллельно сетевому выпрямителю вклю- чены две батареи на 6В, которые через диод также связаны со стабилизатором. Если сетевое напряжение по какой-либо причине вдруг про- падет, то батарея автоматически заменит выпрямитель, так как после снижения входного напряжения стабилизатора ниже уров- ня 4-12 В диоды переходят в проводящий режим. Таким обра- зом, обеспечивается постоянное напряжение для ЗУПВ/ПЗУ- имитатора. При использовании этого источника питания бате- рею следует отключать от стабилизатора одновременно с выклю- чением сетевого напряжения.
А6 [Т й]ив А5 [Т 77] АТ А4 [Г 7б] А8 АЗ [4 /5] А9 АО [Г 2114 Й| 1/01 А1 [7 7з] 1/02 А2 [7 /2] 1/03 CS [7 77] 1/04 Земля ЦТ То] WE (а) 2П4-1к4 ЗУПВ (V 74 LSI О 74LS08 Н [У| И [ТБ] [У| [7] ив 19 18 17 03 02 16 2) HEF 4023В 11 12 01 02 13 14 Ш Ы Ш Ш ИШ 1ZT (е) Земля р7] [7з] [Ъ] [77] |го] |Т| Га] ив 18 17 04 03 16 15 2Э HEF 4011В И 12 01 02 13 14 Ш Ш Ш Н Ш Ы LZT Земля (Ж) Рис. 4.18. Выводы на корпусах ЗУПВ и ИС серии HEF, которые использу- ются в системах проектирования на базе МП.
+ ив Земля 74 LS 00 4 схемы И-НЕ с двумя входами (а) 74LS74A Две схемы D-триггера (6) 74LS85 4-разрядные компараторы (в) Рис. 4.19. Выводы на корпусах ИС 74LS00, 74LS74A и 74LS85.
218 Глава 4 Программируемые входы 11 4 J2 13 з PL РО PI Р2 РЗ —— Вверх (Н)1 вниз (L) ч ТС —CE(L) | 75 > Синхроимпульс ОО 01 02 03 7 Выход (б) 6 \11 14 2 (а) ув Вверх/вниз [is] [is] |й] [га] |к] [77| [io] [э~| Синхро- 02 Р2 Р1 01 Двоич/ импульс дес. Э HEF 4029B PL 03 РЗ РО СЁ 00 ТС U5S ш ш ш ш 5 ш ш И Земля (в) «В W И И М W R1 И 02 18 17 16 15 Э HEF4012B 01 II 12 13 14 Ш Ш Ш И1 L1J LLl Ш Земля (г) N-корпус Земля ]Т Выход [Т Сброс ПГ в нуль — NE555 Цив 7]Разрядка 7] Пороз 71 Управляющее — напряжение (д) Рис. 4.20. Выводы на корпусах ИС HEF4029B, HEF4012B и NE555. 4.8. Использование ПРУ Хотя в предыдущих разделах несколько раз подробно рас- сматривалось применение ПРУ, здесь, по-видимому, полезно еще раз проанализировать особенности использования этой схемы. Как известно, программу можно ввести вручную с помощью переключателя режимов, который переводится в положение WRITE, после чего с помощью адресных тумблеров задается начальный адрес и нажимается клавиша LOAD. В результате начальный адрес оказывается в адресном регистре или в двоич- ном счетчике ПРУ. Затем с помощью тумблеров данных можно
Система проектирования на базе микропроцессора 219 Монтировать на радиаторе для охлаждения размером Их 8 см вместе с MC7812GU 2 220 В 50 Гц Сетевой трансформатор BY164 BY164 15 В 0,5А 5000 мкФ Т" 15 В ^=*2500 мкФ ЗОВ 9В Д5А BY164 1000мкФ 15 В 7805 о+5В,1А ~7 BZW5,6 Диод для подавления выбросов (Philips) о 7812 Монтировать на радиаторе п для охлаждения (см.„+5В стад.) 2 7812 ---------о +12В, 0,ЗА BZW12 -о 3_ 2 7905 BZW5.6 7905 о-5 В, 0,1 А -L *6x5мкФ (танталовые конденсаторы) -о 3 Рис. 4.21. Схема питания МП. ввести требуемый байт «команда/операнд», после чего нажи- мается клавиша STEP и данные пересылаются в ячейку ЗУ с соответствующим адресом. Этот адрес должен находиться в ЗУПВ, так как нельзя производить запись в СППЗУ. В общем случае программным ЗУ является ЗУПВ/ПЗУ-имитатор, потому что он эмулирует функции ПЗУ при помощи ЗУПВ. После за- полнения ячейки ЗУ по первому адресу с использованием тумб- леров данных вводится вторая комбинация «команда/операнд» и после нажатия клавиши STEP в ЗУ пересылается второй байт. Адресные тумблеры не используются, так как счетчик ПРУ управляет адресом автоматически. Затем при помощи тумблеров данных вводится третий байт и снова нажимается клавиша STEP. Таким образом, можно продолжать ввод дан- ных до тех пор, пока не будет введена вся программа. Индика- торы адресов на светодиодах обеспечивают индикацию адресов на всех последовательных шагах. Для проверки наличия ошибок в вводимых байтах информа- ции по окончании ввода программы ПРУ переводится в режим чтения. При этом опять нажимается клавиша LOAD (положе- ние адресных тумблеров все еще соответствует «старому» на-
220 Глава 4 Монтировать на радиаторе для охлаждения размером 14^8 см (алюминий) 7805-ТОЗ — 3 Танталовый конденсатор 5мкФ ~5000мкФ 16 В Танталовый конденсатор 5 мкФ 2£ BZW 5,6 (диод для по- давления вы- бросов) Логическая земля Рис. 4.22. Схема питания пульта ручного управления (4-5В). чальному адресу) и на светодиодном индикаторе высвечивают- ся данные, хранящиеся в соответствующих ячейках ЗУ. Затем при нажатии клавиши STEP значение адреса увеличивается на 1. Таким образом можно проверить содержимое всех адрес- ных ячеек ЗУ. После того как программа введена в ЗУПВ/ПЗУ- имитатор, следует перевести переключатель записи в положение «чтение», чтобы в ЗУ нельзя было записать какую-либо другую информацию. Запись программы начинается с нулевой ячейки ЗУ после пе- ревода переключателя режимов в положение STEP и сброса в нуль. Если затем переключатель режимов перевести в поло- жение RUN, то микроЭВМ будет выполнять программу, начиная с нулевой ячейки ЗУ. Из нулевой ячейки обычно осуществляет- ся переход в оперативное ЗУ, откуда затем происходит обрат- ный переход в начало программы в ЗУПВ/ПЗУ-имитаторе, кото- рая затем тестируется. Переход может произойти и из ранее соз- данной программы. В такой ситуации переход получает адрес, отсчитываемый от начального адреса в СППЗУ, где эта про- грамма была записана ранее в окончательной форме. В ходе выполнения команды RUN можно остановить про- грамму при обращении к определенным ячейкам ЗУ, вводя тре- буемый адрес останова при помощи адресных тумблеров и одно- временно нажимая клавишу переключателя совпадения адресов. По достижении установленного адреса программа остановится. Такая же процедура применяется и при останове, вызванном определенной конфигурацией данных. При этом тумблеры дан- ных также устанавливают в определенные позиции, обеспечивая фиксированный набор битов. Одновременно активизируется и переключатель совпадения данных.
Монтировать на радиаторе для охлаждения размером 14*8 см 7805 Тан тало- ^вый кон- Танталовый конденсатор 5 мкФ BY126 7\денсатор э 5 мкФ 5000мкФ 16В г 1А ---о PERM 5 (см, ЗУ) BZW 5,& Рис. 4.23. Схема питания ПЗУ/ЗУПВ-имитатора. а — схема; б — аппаратурная реализация.
222 Глава 4 4-позиционный переключатель Переключатель или клавиша, например OLTEN типа 31-121 типа 31-261 (двухпозиционный) с линзовой головкой 31-904 О Светодиод CQY 24-А2 (Philips) Двухпозиционный тумблер (Honeywell, 8А10П) Рис. 4.24. Панель пульта ручного управления. Переключатели и световые диоды сгруппированы в соответствии с восьмеричной системой счисления. Рис. 4.25. Практическая реализация пульта ручного управления.
Рис. 4.26. Внутренний вид пульта ручного управления. Рис. 4.27. Система проектирования на базе МП.
+ 5В Вид снизу Рис. 4.28. Шестнадцатеричная индикация с помощью TIL311
Система проектирования на базе микропроцессора 225 В случае однокристальной микроЭВМ нельзя воздействовать непосредственно на счетчик команд, чтобы, например, снова на- чинать выполнение программы после останова ее в определенном месте. Для выполнения этой операции не хватает выводов на корпусе DIP. С другой стороны, эту операцию можно запро- граммировать, а именно ввести в оперативное ЗУ команду пере- хода и перейти по требуемому адресу программы. Затем по команде RESET микроЭВМ начнет работу с нулевой ячейки, перейдет в оперативное ЗУ, считает команду перехода и попадет в ячейку с требуемым начальным адресом. Рис. 4.24 дает представление о структуре панели ПРУ. На рис. 4.25—4.27 приведены фотографии системы, описанной в настоящей главе. Десятичная точка (слева) Десятичная точка (справа) (а) Рис. 4.29. Шестнадцатеричный индикатор на светодиодах (TIL311J. а— схема; б — индикация шестнадцатеричных цифр.
226 Глава 4 Список сигналов и значение сокращенных названий Сигжал Значение А(п) ABUS (и) Адресные линии микроЭВМ Шина адресов (шина — общее название сигналь- ADID AL(n) AS(n) CS(n) DAID DS(n) DBIN DBUS(n) DB(n) HOLD ных линий, в данном случае адресных) Идентичные адреса (совпадение адресов) Адресные линии (микроЭВМ) (п) Тумблер адреса (п) Выбор кристалла (емкость 1К8) Идентичные данные (совпадение данных) Тумблер данных (п) Шина данных IN Шина данных Шина данных (используется в ИС ЗУ) Захват (состояние, в котором микроЭВМ отсо- HLDA единяет шины управления, адресов и данных) Подтверждение захвата (сообщение о приеме INT INTA команды HOLD) Прерывание Подтверждение прерывания (сообщение о при- INTE INTR(n) INS(n) еме запроса на прерывание) Разрешение прерывания Запрос на прерывание (п) Выборка ввода (выборка внешней входной схе- IOR IOW CLOK LOAD MEMR MEMW OUTS(n) мы (п) для ввода данных) Считывание с входа-выхода (ввод данных) Запись на вход-выход (вывод данных) Синхросигнал Загрузить Считать из памяти (читать из ЗУ) Записать в память (записать в ЗУ) Выборка выхода (выборка внешней выходной PERM5 RESET RESIN RDYIN RMOD RUN SAB SPAC схемы (п) для вывода данных) Постоянное напряжение питания +5 В Сброс в нуль (старт микроЭВМ) Вход сброса Вход готовности Пульт ручного управления в режиме чтения Выполнить (микроЭВМ в действии) Выбрать адрес Сигнал продвижения счетчика адресов (для уве- STMOD TREK личения содержимого адресного счетчика) Шаговый режим (пошаговое выполнение команд) Фиксирующее сопротивление (сопротивление для постоянного поддержания Н-уровня на не- WAIT WE WM WMOD WR XMW скольких входах) Ожидание (микроЭВМ в режиме ожидания) Разрешение на запись Запись в память Пульт ручного управления в режиме записи Запись (команда записи) Запись в память с пульта ручного управления
Система проектирования на базе микропроцессора 227 Список используемых ИС с описанием функций Тип 8085А 8212 74LS00 74LS04 74LS08 74LS10 74LS243 2708 2114 74LS42 74LS148 74LS244 74LS85 HEF4029B HEF4011B HEF4012B HEF4023B 74LS74A NE555 Описание функций Микропроцессор (МП) 8-разрядный регистр на D-триггерах 4 схемы И-НЕ с двумя входами в каждой — ТТЛШ Шестнадцатеричный инвертор — ТТЛШ 4 схемы И с двумя входами в каждой — ТТЛШ 3 схемы И-НЕ с тремя входами в каждой — ТТЛШ 4 неинвертируемых приемопередатчика — ТТЛШ СППЗУ ЗУПВ на 1К4 бит Дешифратор кода BCD в двоичный — ТТЛШ Приоритетный шифратор, из 8 в 3 линии — ТТЛШ Восьмеричный тристабильный буфер — ТТЛШ 4-разрядный компаратор — ТТЛШ Синхронный счетчик, двоичный — КМОП 4 схемы И-НЕ с двумя входами в каждой — КМОП 2 схемы И-НЕ с четырьмя входами в каждой — КМОП 3 схемы И-НЕ с тремя входами в каждой — КМОП 2Э-триггера с запуском по фронту —ТТЛШ Ждущий мультивибратор 4.9. Шестнадцатеричный индикатор для ПРУ В дополнение к двоичным светодиодным индикаторам на панели ПРУ можно разместить и шестнадцатеричные индикато- ры. Схема подобного шестнадцатеричного индикатора приведе- на на рис. 4.28. Здесь применяется индикатор типа TIL311, со- стоящий из регистра, дешифратора и матрицы светодиодов 5X7 (рис. 4.29). Если на вход индикатора поступает набор из 4 бит, то на экране появляется его шестнадцатеричный эквивалент. Внешние резисторы, ограничивающие ток через светодиоды, здесь не нужны, так как схема снабжена внутренним источни- ком постоянного тока, предназначенным специально для пи- тания элементов светодиодной матрицы. Для обеспечения не- прерывного считывания с шин данных и адресов на стробируе- мый вход следует подать напряжение низкого уровня. В гл. 3 была подробно рассмотрена система ввода данных,, снабженная шестнадцатеричной клавиатурой. Выходы этой схе- мы можно подключить параллельно к тумблерам данных и ад- ресов, расположенным на панели ПРУ. В этом случае при вво- де данных с клавиатуры все тумблеры необходимо перевести в положение, фиксирующее нулевое состояние. 15*
Глава 5 СХЕМЫ ВВОДА И ВЫВОДА 5.1. Введение В предыдущей главе рассмотрена пересылка данных между различными функциональными блоками микроЭВМ. Было так- же показано, что с помощью команд ввода-вывода, передавае- мых по шине данных, можно устанавливать надежную связь с внешними схемами. Осуществление операций ввода и вывода информации является отдельной, достаточно сложной пробле- мой, тем более что с микроЭВМ поддерживают связь устройства самой разной природы. Каждое такое устройство требует осо- бого решения, которое должен обеспечить блок ввода-вывода микроЭВМ. Прежде чем перейти к более подробному анализу операций ввода и вывода данных в микроЭВМ, рассмотрим проблему их реализации в промышленности. В рамках соответствующего аналога будем исходить из того, что предприятие всегда отправ- ляет готовые изделия, а завозит сырье. На таком предприятии роль портов ввода-вывода выполняют отделы снабжения и сбы- та. Из производственного отдела (МП) готовые изделия пересы- лаются в отдел сбыта. По пути в этот отдел наблюдается «вет- вление», которое ведет на склад готовой продукции (ЗУ). Очевидно, что сразу же после отправки готовых изделий из производственного отдела у заводских ворот не появляется клиент, заказавший эти изделия. В отделе сбыта должен быть склад, в котором готовые к отправке изделия оставляются на временное хранение. Склад требуется и для хранения материа- лов, поступивших на предприятие извне. При отправке изделий необходимо указать, в какой части временного склада они будут храниться. Производственный от- дел должен постоянно запрашивать, какая часть этого склада свободна в данный момент времени, после чего изделия отправ- ляются именно туда. Кроме того, необходимо сообщить соответ- ствующему клиенту, что запрошенные им изделия готовы к от- правке. В момент отправки изделий служащий отдела сбыта от- мечает, что соответствующая часть временного склада освобо- дилась. Поставщик сырья сообщает о начале поставок в отдел снаб-
Схемы ввода и вывода 229 жения предприятия, затем привозит сырье, о чем служащий отдела снабжения делает соответствующую отметку. Производ- ственный отдел посылает запрос на эти данные и затем решает либо забрать сырье для последующей переработки в готовые из- делия, либо оставить его на временное хранение в отделе снаб- жения или отправить на большой склад (ЗУ). Подобная организация наблюдается и в микроЭВМ. С шиной данных связаны регистры, которые могут хранить не только данные, но и информацию следующего типа: место назначения, т. е. куда необходимо отправить данные, и сообщение в адрес потребителя о том, что данные поступили. МикроЭВМ может послать запрос о состоянии регистра (заполнен или нет?) и вы- полнить анализ соответствующей информации. Лицо, использующее информацию, может сообщить в соот- ветствующий порт о своем желании получить данные немедлен- но. Для этой цели оно использует запрос на прерывание. В об- щем случае при вводе данных первое «запоминание» происходит в одном из многих входных регистров. Опрашивая данные через специальный регистр (регистр состояния), микроЭВМ может узнать, какие именно данные поступили на вход, и принять реше- ние о прямой или косвенной пересылке этих данных. При пересылке информации о состоянии и управлении ре- гистрами, а также обрабатываемых данных через порты ввода и вывода необходимо использовать отдельную магистраль. Что- бы отличить управляющую информацию от других данных, пе- ресылаемых по шине данных, в дополнение к линиям связи, по которым передаются команды IOW и IOR, используется ряд дополнительных линий (адресных линий связи), которые ведут к портам ввода-вывода и указывают в какой именно регистр их необходимо направить. Прямая адресация позволяет указать регистр, куда должны пересылаться данные: в ячейку ЗУ или в управляющий регистр ввода-вывода. Из этой адресации микроЭВМ узнает, какие ре- гистры предназначены для хранения данных, а какие — для хра- нения управляющей информации и информации о состоянии. Внешнее устройство должно иметь информацию о том, какой регистр состояния и управления нужно опрашивать, какой ре- гистр данных свободен и может принять данные, а также можно ли переслать данные в этот регистр. На рис. 5.1 приведена блок-схема устройства ввода с регист- рами типа 74LS374. Каждый из регистров состоит из восьми D-триггеров с тристабильными выходными буферами. Эти триг- геры считывают информацию передним фронтом синхросигнале. В нормальном режиме регистры отсоединены от шины дан- ных. Однако, если необходимо установить связь, на тристабиль- ные выходные буферы подается разрешающий сигнал, в резулв-.
230 Глава 5 Рис. 5.1. Входные регистры (ИС 74LS374, восемь D-триггеров). тате чего выходы D-триггеров оказываются связанными с шиной данных. При этом регистр выбирается сигналом INSn(L), кото- рый вырабатывается микроЭВМ и содержит дешифрованную информацию из второго байта команды ввода. При загрузке какого-либо регистра внешнее устройство по- дает байт данных на входную D-шину, после чего с помощью синхроимпульса эти данные вводятся в выбранный регистр. При выводе данных сначала D-входы соединяются с шиной микроЭВМ, а затем выходные буферы — с выходной D-шиной (рис. 5.2). При загрузке регистра микроЭВМ подает данные на шину данных и активизирует вход синхросигналов с помощью сигна-
Схемы ввода и вывода 231 oursofL; Рис. 5.2. Выходные регистры (ИС 74LS374, восемь D-триггеров). ла OUTSn(L), после чего данные пересылаются в соответствую- щий регистр. Внешнее устройство может считывать информацию из регист- ра, активизируя тристабильный вход регистра, в результате чего соответствующая шина для вывода данных будет соединена с триггерами. Сигнал OUTSn(L) также представляет собой де- шифрованный второй байт команды вывода микроЭВМ. Как уже ранее отмечалось, регистры в портах ввода-вывода необходимы для временного хранения данных. Дело заключает- ся в том, что при выводе микроЭВМ обычно имеет только крат- ковременный доступ к данным, после чего она продолжает вы- полнять основную программу. С другой стороны, микроЭВМ
232 Глава 5 считывает вводимые данные в момент, который является для нее наиболее благоприятным. Это также влияет на ход выпол- нения программы, потому что микроЭВМ должна приостано- виться и опросить входную шину данных. Вместо регистров ввода-вывода можно использовать также двунаправленные буферы, которые соединяют внешнюю шину с шиной данных для ввода и вывода информации в требуемый момент времени. Таким 4-разрядным двунаправленным буфе- ром, который здесь используется, является ИС 74LS244. Очевидно, что нельзя постоянно посылать данные на шину данных для последующей обработки в ЭВМ, так как во время выполнения программы ЭВМ использует эту шину в течение длительного периода времени для выполнения других операций. Если внешняя информация будет поступать на эту шину по- стоянно, то ЭВМ не сможет выполнять свою основную функцию по обработке данных. Другими словами, шина данных будет все время занята, что существенно затруднит пересылку данных. Как известно, для организации ввода и вывода данных ис- пользуется своеобразная схемотехника, которая обеспечивает связь микроЭВМ с самыми разными приборами и установками. Эта связь иногда усложняется до такой степени, что для управ- ления вводом и выводом данных требуется применение отдель- ной микроЭВМ или отдельного контроллера. Здесь эти сложные системы не будут обсуждаться, так как это уведет далеко в сто- рону от основной темы. Будет рассмотрен только ряд сложных периферийных схем, которые используются в качестве практиче- ских схем для ввода и вывода данных в СППЗУ и на магнит- ную ленту кассетного магнитофона. Периферийные схемы разработаны для самых разных приме- нений, и их число постоянно увеличивается. Обычно они реали- зуются на одном кристалле и используют программное обеспече- ние микроЭВМ для осуществления различных операций с по- мощью шин данных, адресов и управления. Как именно реали- зуется это программное обеспечение, станет ясно после того, как мы рассмотрим в последующих разделах практические схемы и соответствующие программы, обеспечивающие адекватное управление потоками данных. 5.2. Программатор СППЗУ СППЗУ представляет собой ППЗУ с так называемым пла- вающим затвором, которое можно перепрограммировать (репро- граммируемое ППЗУ) после ультрафиолетового облучения кри- сталла. Структура и работа СППЗУ рассматривались в гл. 2 т. 3. Несколько СППЗУ типа 2708 (объем 1024 байт) применялось
Схемы ввода и вывода 233 в системе с МП 8085А (см. гл 4 настоящего тома). Для программи- рования этих СППЗУ с помощью отладочного комплекса разработа- ны специальные схемы и програм- мы. Как известно, битовую ячейку СППЗУ нельзя запрограммировать с помощью одного импульса про- грамматора. При подаче мощного одиночного импульса можно пре- высить допустимую мощность, рас- сеиваемую этой ячейкой, и разру- шить ее. Поэтому для практичес- кого программирования ячеек СППЗУ используется, например, 100-кратное повторение короткого импульса с достаточно большими паузами, в течение которых успева- ет произойти термодиссипация со- ответствующей электрической мощ- ности. Этот режим реализуется для всех 1024 слов СППЗУ, т. е. за- пись повторяется для каждого сло- ва 100 раз, как показано на рис. 5.3. При каждом прогоне програм- мы, т. е. при каждом повторении цикла, плавающий затвор получает небольшой отрицательный заряд; после 100 циклов заряд в элементе памяти смещается настолько, чторис. 5,3. Блок-схема программы, этот элемент оказывается в опреде-управляющей программированием ленном состоянии. СППЗУ. Для заполнения ячеек СППЗУ можно использовать программу пе- ресылки (см. гл. 3). Те байты в ЗУПВ/ПЗУ-имнтаторе, кото- рые содержат пересылаемую программу, выбираются из ЗУ один за другим, получают новые адреса и затем пересылаются в СППЗУ. При этом одновременно должен появляться и им- пульс программатора. Так как длительность этого импульса управляется соответствующим циклом в программе и в течение этого времени адреса и данные должны стабильно поступать на входы СППЗУ, для временного хранения данных и адресов потребуются регистры, которые должны обеспечивать синхрон- ность выполнения указанных операций. Для адресации требует- ся 10-разрядный регистр (1024 адреса = 210), а для хранения
234 Глава 5 данных — 8-разрядный регистр. Эти регистры загружаются с шины данных с помощью соответствующих программ. Далее в СППЗУ передаются импульс разрешения на запись (WE) и импульс программатора; для этого в регистре используются два бита. Как уже отмечалось выше, длительность импульса программатора определяется циклом в сервисной программе. После того как программа входит в этот цикл, запускается триггер программатора, а когда программа выходит из указан- ного цикла, триггер сбрасывается в нуль. Таким образом, для хранения данных, которые пересылаются в СППЗУ, требуется 20-разрядный регистр, который загружает- ся с шины данных с помощью последовательного набора опреде- ленных команд. Одним из подходящих для этой цели регистров является ИС 8255А, программируемый периферийный интерфейс с тремя 8-разрядными регистрами А, В и С. Биты регистров А и В загружаются в течение одного шага считывания. Биты регистра С загружаются с помощью специальных программ, что позволяет в определенные моменты времени получать с по- мощью этих изменяющихся битов импульсы WE и программато- ра, не меняя остальные биты регистра С. Биты адреса и данных в регистрах А и В и часть битов в ре- гистре С, хранящиеся во время программирования одного байта, можно передавать непосредственно в СППЗУ 2708. Импульсы выборки и программирования имеют разные уровни напряжения и поэтому их необходимо пересылать в СППЗУ, используя спе- циальные буферы на дискретных транзисторах. Эти буферы пре- образуют ТТЛ-уровни напряжения на выходах С-регистра в тре- буемые уровни напряжения переключения для СППЗУ 2708. 5.3. Программируемый интерфейс типа 8255А0 На рис. 5.4 приведена блок-схема этого интерфейса. В пра- вой части схемы находятся указанные выше регистры А, В и С, причем регистр С разделен на две группы по 4 бит в каждой. Режим работы этих регистров как при вводе, так и при выводе данных определяется содержимым управляющих регистров групп А и В. Перед началом работы с помощью команды вывода ИС 8255А сообщается, в каком режиме будут работать указан- ные регистры. Эти данные хранятся в управляющих регистрах как группы А, так и группы В. Очевидно, что перед заполнением регистров и считыванием данных из них через общую шину данных нужно послать опре- деленную управляющую информацию относительно того, что именно планируется. Эти операции выполняются с помощью !) Функциональный аналог отечественной ИС КР 580ИК55. — Прим. ред.
Схемы ввода и вывода 235 управляющей логики чтения-записи, показанной в левой нижней части рис. 5.4, а. Между шиной данных МП и внутренней шиной данных ИС 8255А находится двунаправленный буфер, который соединя- ет обе шины в обоих направлениях и, если требуется, отсоеди- няет их друг от друга. Управляющая логика, которая указывает регистры, предназ- наченные для пересылки данных, и задает направление пере- сылки, получает необходимые сигналы из микроЭВМ. В табли- це, приведенной на рис. 5.5, показано, какие сигналы МП ис- пользуются для этой цели и какие пересылки возможны, когда возникают определенные комбинации битов. Указанные на рисунке биты АО и А1 являются адресными битами ABUS0 и ABUS1, которые входят в состав второго бай- та команд чтения и записи ЗУ. RD(L), WR(L) и CS(L) являют- Рис. 5.4. а — блок-схема программируемого периферийного интерфейса типа 8255А; б — режимы работы схемы; в — МЭК-символ ИС 8255А.
236 Глава 5 ея управляющими сигналами, которые микроЭВМ вырабатывает в нормальном рабочем режиме при выполнении команд чтения в записи ЗУ и команд ввода-вывода данных. Как видно из таб- лицы, управление всеми регистрами, включая управляющие ре- гистры из групп А и В, осуществляется управляющей логикой. Связь микроЭВМ с ИС 8255А осуществляется при помощи вигнала выбора кристалла (ЗУ). В программаторе СППЗУ Рис. 5.4 (продолжение).
8 0| > ADR /I Программируемый периферийный интерфейс М8255А •8 Cb(L) св BD(L) RD WR(L) WR £брОС — RESET 34 33 32 31 30 29 28 27 0> 7' ► V DBUS РВ < (° <7 ( 0 ADR RD(L) WR(L) PC < Операция 17 <0 О 0 1 PA-*DBUS 1 О 1 РВ-* DBUS 2 О 1 PC-* DBUS 3 О 1 Недопустимое усл. РА < 0 1 О DBUS-* РА 1 2 1 1 О О DBUS-^ РВ DBUS-> PC 3 1 О DBUS-» Управление — 1 1 DBUS * состояние 3 ч7 18 19 20 21 22 23 24. 25 14 15 16 17 13 12 11 10 4 3 2 1 40 39 38 37 ADR = адрес DBUS= шина данных (в) Ряс. 5.4 (продолжение).
238 Глава 5 АЦН) АО(Н) RD(L) WR(L) 1 CS(L) Операция Ввод (чтение) 0 0 0 1 0 Порт А —> Шина данных 0 1 0 1 0 Порт В —>- Шина данных 1 0 0 1 0 Порт С —Шина данных Вывод (запись) 0 0 1 0 0 Шина данных —>- Порт А 0 1 1 0 0 Шина данных —> Порт В 1 0 1 0 0 Шина данных —► Порт С 1 1 1 0 0 Шина данных—>Управл. per. Отключение X X X X 1 Шина данных —> 3-е состояние 1 1 0 1 0 Недопустимое условие X X 1 1 0 Шина данных —> 3-е состояние X — неопределенное состояние. Рис. 5.5. Таблица истинности сигналов управления пересылкой данных в регистры/порты ИС 8255А. связь реализуется через порты ввода-вывода, так как команды ввода-вывода содержат сигналы RD(L) и WR(L), тогда как сигнал CS(L) определяется битом D7, который программирует- ся во втором байте команды ввода-вывода. Перед началом операции по пересылке данных необходимо •считать информацию с управляющих регистров групп А и В. Как уже отмечалось выше, это делается в СППЗУ-программато- ре с помощью команды вывода, во втором байте которой нахо- дится битовая конфигурация D7...D0=1000 ООН. Для управле- ния сигналом CS(L) предназначен бит D7. D7(H) переводит ABUS7 в состояние 1, a ABUS7 инвертируется и обеспечивает CS(L). Таким образом, с помощью команды вывода в ИС8255А пересылается управляющая информация в виде слова, содержа- щего данные о режиме работы. Это слово необходимо ввести в аккумулятор А. Описание содержимого аккумулятора дается в соответствии с форматом слова описания режима (рис. 5.6). Флажковый бит режима D7 при вводе указанного слова должен быть равен 1. Если этот флажковый бит равен 0, то, как будет
Схемы ввода и вывода 239 Управляющее слово D7 D6 D5 04 03 D2 D1 ВО Выбор режима О - режим О 1 - режим 1 Порт С (младшие биты) 1 - ввод О-вывод_______ Порт В 1 - ввод О - вывод Группа А л Порт С (старшие биты) 1 - ввод О - вывод_____ Порт А 1 - ввод О - вывод Выбор режима 00 - режим О 01 - режим 1 IX - режим 2 Флажковый бит режима работы 1 - активный. Рис. 5.6. Формат управляющего слова описания режима работы ИС 8255А. показано ниже, управляющее слово с информацией о режиме будет содержать двоичный номер бита в регистре С, который должен быть модифицирован, т. е. переведен в состояние О или 1. С помощью битов D2 и D5D6 в управляющем слове можно выбрать три режима1). В режиме 0 обеспечивается описание назначения определен- ной группы портов из группы А или группы В (см. рис. 5.6). При этом каждый порт может использоваться в качестве порта 11 11 Режим 0 — простой ввод-вывод; режим 1 — стробируемый ввод-вывод, режим 2 — двунаправленная передача данных. — Прим. ред.
240 Глава 5 ввода или порта вывода. Порты вывода работают все время в запоминающем режиме (фиксации), а порты ввода — без за- поминания передаваемых данных. В этом режиме может быть 16 различных конфигураций ввода и вывода данных. В частно- сти, для СППЗУ-программатора используется режим 0. В режиме 1 описание назначения в управляющем слове со- храняет свое действие и для соответствующей группы регистров,. 8-разрядные порты данных А и В используются как порты вво- да-вывода, однако здесь они и при вводе, и при выводе инфор- мации работают в запоминающем режиме (фиксации), т. е. являются регистрами. 4-разрядные порты Сст и Сил используют- ся для управления и считывания состояния 8-разрядного порта данных. Управление и индикация состояния регистров позволя- ют осуществить режим квитирования. Как видно из рис. 5.6, в режиме 2 порт А работает как порт ввода-вывода двунаправ- ленной шины; пять битов порта С используются в целях управ- ления. Указанные порты работают в запоминающем режиме (фиксации) как при вводе, так и при выводе данных. 5-раз- рядный управляющий порт С используется для управления и пе- редачи сообщения о состоянии 8-разрядного порта А двунаправ- ленной шины. С помощью управляющей команды из микроЭВМ с управ- ляющим словом, помещенным в А (аккумулятор), можно точно указать ИС 8255А, как будут использованы имеющиеся порты. При каждом изменении режима или сбросе в нуль эту команду необходимо всегда передавать первой. Как уже отмечалось выше, биты регистра С можно сбрасы- вать в нуль или переводить в состояние 1 по отдельности. Эту команду также можно обеспечить, передавая управляющее сло- во на шину данных, однако для этого необходимо сбросить в нуль флажковый бит D7 в отличие от рассмотренной выше конфигурации управляющего слова с функциональной специфи- кацией регистров, где бит D7=l. Биты DI, D2 и D3 представля- ют двоичный номер бита порта С, тогда как бит D0 указывает в какое состояние (0 или 1) должен быть установлен выбран- ный бит (рис. 5.7). Как уже отмечалось, ИС 8255А обычно используется в каче- стве СППЗУ-программатора в режиме 0. Порты А, В и С выпол- няют роль регистров вывода, что соответствующим образом ото- бражается в управляющем слове, содержащем информацию о режиме работы устройства. Это означает, что управляющее слово состоит из D7=l и нулевых остальных битов (см. рис. 5.6). Это слово загружается в аккумулятор А и затем пересылает- ся вместе с командой вывода в управляющий регистр. При этом второй байт команды вывода в соответствии с рис. 5.5 должен
Схемы ввода и вывода 241 Управляющее слово Рис. 5.7. Структура управляющего слова для установки/сброса бит© в ИС 8255А. содержать биты 1000 ООН (см. также рис. 5.8, где приведены коды для выбора регистров А, В и С). После передачи управляющей информации данные и адрес можно переслать в три приема в регистры А, В и С. Место наз- начения соответствующих байтов указывают два младших бита во втором байте команды вывода, равные 00 для порта А, 01 — для порта В и 10 — для порта С. При выполнении программи- рования СППЗУ на четвертом шаге биты D0 и D1 загружаются значениями адресных битов А8 и А9 так, чтобы в результате был получен 10-разрядный адрес, необходимый для выбора 1024 ячеек СППЗУ. Мы еще вернемся к этому вопросу при об- суждении программы загрузки СППЗУ. Через одну шину данных в четыре приема передается вся информация, соответствующая данным и адресам, которая необ- ходима для перехода к программированию какого-либо слова в СППЗУ. Сначала ИС 8255А (все порты которой являются ре- гистрами вывода) сообщается как планируется ее использовать, а затем с помощью набора команд вывода передается информа- ция о данных и адресах. 5.4. Операции в режимах 1 и 2 Хотя при выполнении программирования СППЗУ эти режи- мы и не применяются, они представляют определенный познава- тельный интерес. В режиме 1 можно использовать порты А и В как в качестве входных, так и выходных регистров. Мы говорим «регистры», потому что данные в этом случае будут запоми- наться в регистрах-фиксаторах. Четыре бита из регистра С бу-
CS JO-порт С Рис. 5.8. Часть алгоритма, который описывает пересылку управляющей и адресной информации, а также данных в ИС 8255А.
Схемы ввода и вывода 243 дут переданы в регистры А и В в качестве битов управления и состояния соответствующих портов данных (рис. 5.9). Бит РС4 порта С является стробируемым входом, с помощью которого в регистр А загружается информация в режиме ввода. При этом порт А должен быть указан в качестве входного ре- гистра. Бит РС5 является битом состояния, который сообщает, что данные загружены в регистр А. В действительности этот бит содержит информацию о заполнении буферного регистра А, откуда и возникло его наименование IBF (Input Buffer Full — входной буфер заполнен). Бит IBF переводится в состояние 1 сигналом STB(L) (строб) при загрузке регистра из перифе- рийного устройства и сбрасывается в нуль, когда микроЭВМ считывает данные с помощью команды RD(L). Рис. 5.9. Применение ИС 8255А в режиме 1. а — ввод данных; б — вывод данных.
244 Глава 5 Бит РСЗ предназначен для прерывания микроЭВМ после поступления запроса от периферийного устройства. Этот бит РСЗ (INTR) устанавливается в состояние 1 после приема строб* импульса; при этом активизируются биты IBF (регистр запол- нен) и INTE (разрешение прерывания). Бит РСЗ сбрасывается в нуль задним фронтом импульса RD(L). Эта процедура позво- ляет устройству ввода передать запрос на обслуживание путем односторонней пересылки данных в регистр под управлением строб-импульса. Триггерами, вырабатывающими разрешения прерывания INTE А и INTE В для порта А и порта В соответст- венно, можно управлять, переводя в состояния 0 и 1 биты РС4 в РС2 порта С (см. рис. 5.7). На рис. 5.9, а показано, как должно выглядеть управляющее WR(L) Управляющее слово D7 D6 D5 D4 D3 D2 DI DQ РI ° Р Р 1^ИЖ1 РС4,5 О-вывод (6) Рис. 5.9 (продолжение).
Схемы ввода и вывода 243 слово, если в режиме 1 использовать оба регистра в качестве портов ввода, как было описано выше. Если порты А и В рабо- тают как порты вывода, можно использовать РС7 для установ- ления контакта с внешним устройством, которое загружает регистр A. (OBF(L)—Outpur Buffer Full — выходной буфер за- полнен, активизируется на L-уровне.) OBF-триггер устанавли- вается в состояние 1 передним фронтом сигнала WR(L) и сбра- сывается сигналом ACK(L). Сигнал ACK(L) появляется в тот момент, когда происходит передача данных в соответствующее внешнее устройство, т. е. потверждается прием данных устрой- ством вывода. После этого регистр будет подготовлен для ново- го заполнения. Поэтому OBF-триггер следует сбрасывать в нуль. INTR-входные биты РСЗ и РСО можно использовать для пре- рывания микроЭВМ. после того, как внешнее устройство приня- ло данные, посланные из микроЭВМ. При этом микроЭВМ мо- жет подготовить и передать новые данные. INTR переходит в состояние 1 после того, как деактивизируются сигналы ACK(L) и OBF(L), т. е. после того, как порт освободится и внешнее устройство примет данные. Здесь необходимым усло- вием является переход IE-триггера в состояние 1. Триггер запроса прерывания устанавливается в состояние О сигналом WR(L), и в соответствующий регистр передаются новые данные для пересылки в периферийное устройство. В режиме 2 возможна двунаправленная передача данных, однако только через порт А. При этом фиксируются как вводи- мые, так и выводимые данные. Порт С вновь используется в ка- честве регистра управления/состояния сигналами ввода-вывода OBFa(L), ACKa(L), STBa(L) и IBFa (рис. 5.10). Сигнал OBF(L) активен, если регистр А заполнен данными из мик- роЭВМ. Если периферийное устройство готово к приему данных, то сигнал ACKa(L) дает разрешение тристабильным буферам регистра А и триггеры регистра будут подключены к внешней шине данных. Если сигнал ACKa(L) не активен, то выходы бу- феров переходят в отключенное состояние. INTE-триггер можно повторно установить в состояние 1 с по- мощью команды SET/RESET. INTRa (разрешение прерывания) возникает повторно под действием сигналов INTE1 и ACKa(L) при выводе данных или под действием сигналов INTE2 и STBa(L) при их вводе. Дело в том, что при выводе данных периферийное устройство производит выборку данных с помощью ACK(L), после чего может произойти новая передача данных. В режиме ввода пе- риферийное устройство вводит данные во время действия сиг- нала STB и тогда же микроЭВМ производит их выборку. Возможны также и другие комбинации, такие, например, как совместное использование режимов 0 и 2, которое обеспечивает-
246 Глава 5 Управляющее слово 07 06 05 04 D3 D2 01 00 Рис. 5.10. Применение ИС 8255А в режиме 2 (двунаправленная пересылка через порт А). ся с помощью закодированного управляющего слова. Если теперь вернуться к СППЗУ-программатору, то будет интересно выяснить, какое именно аппаратурное обеспечение требуется использовать для связи микроЭВМ с СППЗУ. С этой целью рассмотрим рис. 5.11. Шина данных DBUS0 — DBUS7 связана с входами данных DO — D7 ИС 8255А, что позволяет микроЭВМ загружать три регистра ИС 8255А. Для выборки управляющего регистра — А, В и С — необходимо переслать в 8255А содержимое ABUS0, ABUS1 и ABUS2. ABUS0 и ABUS1 указывают регистр, a ABUS7 обеспечивает сигнал CS(L). При этом чтобы сигнал CS(L) стал активным, необходимо инвертировать ABUS7, т. е. седьмой бит во втором байте команды ввода-вывода. Эту опера- цию осуществляет инвертор типа 74LS04. Выходы регистров РАп связаны с выводами данных на кор- пусе СППЗУ, а выходы регистров РВп и РСО, РС1 — с адрес- ными входами СППЗУ. Как уже отмечалось ранее, для обеспе- чения выборки 1024 ячеек СППЗУ требуется 10 бит. РС4 производит выбор WE(H)/CS(L), а РС5 служит для формирования импульса программатора. Уровни напряжения обоих сигналов необходимо преобразовать в уровни, применяе- мые при управлении СППЗУ, т. е. амплитуду WE(H)/CS(L)- сигнала необходимо преобразовать в диапазон 0—12 В, а ам- плитуду импульса программатора в диапазон 0—26 В. Для управления СППЗУ требуются также сигналы IOR(L)
Схемы ввода и вывода 247 и IOW(L). Сигнал IOW(L) обеспечивает ввод данных из мик- роЭВМ в ИС 8255А во время записи в СППЗУ, a IOR(L) — счи- тывание внешних данных из СППЗУ в режиме проверки. Для проверки содержимого данных в СППЗУ имеется отдельная программа, которая будет рассмотрена ниже. Сброс регистров в нуль производится с помощью внешнего переключателя. Этот переключатель можно не использовать, если сигнал сброса вырабатывается самой микроЭВМ. 5.5. Временная диаграмма, применяемая при программировании ИС 2708 СППЗУ типа 2708 программируется в соответствии с вре- менной диаграммой, показанной на рис. 5.12. Процесс програм- мирования начинается с подачи импульса CS/WE и указания BZW12 ABUSI(H) ABUSO(H)~ ABUSTOJu _________ABUS1 8 ABUSQ~9~ ABUS7(L) 6^ Tqr?l) IQW(L) Сброс(H) +5B 74LS04 __5^ 36^ _2£_ j Адрес Земля Программи- ст руемый RD периферийный интерфейс иЕ *7 М8255А Сброс -o+5B DBUSO(H), 33 32 31 30 29 28 27 ? DBUS С Маркировка 2N2222 2N2905 выводов РАЗ С 1 РА2 С 2 PAI С 3 FAO С 4 RD С 5 CS С S 10 11 8255А А] С АО Е РС7С РС6Е РС5С 12 РС4С 13 POOL 74 РС1 Е \ РС2Е , РСЗ С 17 РВОЕ , РВ1Е J РВ2С ; 15 16 18 /э 20 □ РАД □ РА5 ЗВ □ РА6 37 JPA7 36 □ WR 35 □Сброс ‘’З DO □ D1 ! 3D2 3D3 । □ D4 । □ D5 □ D6 □ D7 3 + Ub □ РВ7 1РВ6 □ РВ5 □ РВ4 21 ИРВЗ 40 39 34 33 32 31 30 29 28 27 26 25 24 23 22 Маркировка выводов 8255А О РВ 25 А7?\ PC РА J/PCQ 23 ./££1221 , /8 14 A9 >5 A8 DBUS J7 18 AO 19___» 20___ 21___> 22ZZZ 23 * 74LS04 10 кОм 0,1 мкФ кер 2N2222 CS(L)/WE(H) 10 кОм ______+12 В 5,62 кОм I2N 2904 2N2222 (а) AO Al'l A2 A3 A4 A5 A6 A7 A8 СППЗУ GS(L)/WE ивв Ub uss Импульс Н0~ 19 10 МКФ 21 24 12 ЮмкФ HU- ГВ2И5,6*5в ЮнкФ BZW5.6 6 -5В Напряжение на входе в DIL сгла- живается с ПОМОЩЬЮ керамического конденсатора 0,1мк<? Панель производства фирмы Textool, тип 224-3344-00-0602 (24-штырьковая DlL-панельоля ИС2708) : программатора_______________ 74LS04 ТЕ 9^Г 3,3 -7 -г о К0М 3,3 кОм -- 83,3 кОм 0,1 мкФ кер. 100 0м +268 2N29O4 50 Ом- 2N2222 3,3 кОм 2М2222 ЮкОм №№НД)1 2 1>д Д : 1023 8 Зн<Р Рис. 5.11. Программатор СППЗУ, а —схема; б — аппаратурное исполнение.
248 Глава 5 (б) Рис, 5.11 (продолжение). нулевого адреса. После задержки на время 10 мкс можно дать разрешение генерации импульса программатора. Этот импульс: должен иметь длительность 0,1—1,0 мс в зависимости от числа* циклов, которое предварительно устанавливается. Требуемое число циклов N является функцией длительности импульса tpw в соответствии со следующей формулой: (V х tpw > 100 мс. Если выбрать число циклов программирования ИС 2708 равным 100, то длительность импульса будет равна tpw=l мс. Адреса и данные должны сохраняться в течение 1 мкс после прекращения действия импульса программатора. Необходимые задержки обеспечиваются в программах с по- мощью фиктивных передач (пустых команд). Загрузка СППЗУ заканчивается спустя 1X1024X100 мс~102 с, после чего можно начать проверку введенной информации с помощью программы, которая сравнивает байты, введенные в СППЗУ, с байтами, на- ходящимися в ЗУПВ, которое обеспечивает исходную информа- цию. Стирание содержимого ИС 2708 производится с помощью ис- точника ультрафиолетового излучения с длиной волны 2537 At. Для очистки СППЗУ имеются приборы, которые позволяют очи -
Схемы ввода и вывода 249 щать одновременно несколько СППЗУ. Возможен также ва- риант очистки с помощью кварцевой лампы, когда СППЗУ в те- чение нескольких часов освещается этим источником, располо- женным от него на расстоянии ~20 см. 5.6. Программа загрузки СППЗУ Программа загрузки СППЗУ, осуществляющая пересылку информации, имеет дополнительные блоки, которые позволяют передавать через периферийный интерфейс как адреса, так и данные, а также обеспечивают необходимые временные сигна- лы, связанные с программными циклами. Структурная схема программы ЗАГРУЗКА СППЗУ приведена на рис. 5.13. Текст программы помещен в табл. 5.1. Выполнение программы начинается с загрузки необходимых операторов, таких, как индекс цикла, начальный и конечный адреса для пересылки данных. Конечный адрес получается из начального адреса с помощью команды DAD, которая прибав- ляет к нему 1024. После того как эти операторы заполнят соот- ветствующие рабочие участки ЗУ переменной длины, происходит запуск управляющего регистра ИС 8255А.
По команде MVI, А по адресу 010 0 278 загружает- ся управляющее слово с ин- формацией о режиме, 1000 00002, которое предпи- сывает портам А, В и С в режиме 0 работать в качес- тве регистров вывода. При этом регистры А, В и С под- готавливаются к передаче в ИС 2708 информации, отно- сящейся к адресам и дан- ным. По адресу 010 0338 за- гружается tpw-число, опре- деляющее число циклов, ко- торые должна выполнить программа для формирова- ния требуемой длительнос- ти импульса tpw= 1 мс. Эту длительность можно изме- нить с помощью константы 0538 по адресу 010 0348. Со- ответствующее tpw-число за- поминается в оперативном ЗУ переменной длины в микроЭВМ, что позволяет производить затем опреде- ленные операции с ним при выполнении цикла. Далее в А загружаются данные для первого адреса (010 0448) и этот байт за- поминается в порте А ИС 8255А. Заметим, что этот порт указан во втором байте команды вывода по адресу 010 0468 с помощью битов DI,D0=00. Затем за- гружается младший адрес- ный байт первого адреса из L в аккумулятор А мик- Рис. 5.13. Структурная схема программы ЗАГРУЗКА СППЗУ.
Схемы ввода и вывода 251 Таблица 5.1. Программа: загрузка СППЗУ (с загрузкой начальных условий) Адрес ЗУ Метка Исходный код Объектный код Описание опера* ции/комментарий восьм. шести. восьм. шести. 014 100 18 40 JMP 303 сз Переход в начало программы! 101 41 000 00 102 42 010 08 014 150 18 68 XXX XX Ввести начальный 151 69 XXX XX адрес загружае- мой программы! 152 6А XXX XX Ввести конечный 153 6В адрес (=на- чальный адрес+ + 1024)! 154 6С XXX XX Число tpw опера- тивного ЗУ 155 6D XXX XX 156 6Е XXX XX Адрес оператив- ного ЗУ 157 6F XXX XX 160 70 XXX XX Индекс цикла опе- ративного ЗУ 161 71 XXX XX Указатель 040 20 Начало стека стека 014 ОС 010 000 10 00 LXI Н 041 21 Загрузить индекс цикла ЮОю ( = 000 1448) 1 144 64 2 000 00 3 SHLD 042 22 Переписать ин- декс цикла в оперативное ЗУ 4 160 70 5 014 ОС 6 START LHLD 052 2А Загрузить началь- ный адрес 7 150 68 010 010 10 08 014 ОС 1 XCHG 353 ЕВ Содержимое HL—>DE
252 Глава 5 Продолжение Адрес ЗУ Объектный код восьм. шести. Легка Исходный код восьм. шести. Описание опера- цнн/комментарий 2 3 LXI Н 041 000 21 00 Загрузить 1024 (1 Кбайт) в HL 4 004 04 5 DAD 031 19 HL+DE=Ha- чальный адрм+ + 1024 6 7 SHLD 042 152 22 6А Переписать конач»- ный адрес ( = начальный адрес+1024) 010 020 10 10 014 ОС 1 2 LHLD 052 150 2А 68 Загрузить началь- ный адрес в HL 3 014 ОС 4 5 SHLD 042 156 22 6Е Переписать на- чальный адрес в оперативное ЗУ 6 014 ОС 010 7 030 1 2 10 18 MVI A 10.000.000 OUT 10.000.011 076 200 323 203 ЗЕ 80 D3 83 Загрузить слово режима в А Загрузить слово режима в А Режим в 8255А A7=CS; AiAo= Управление 3 4 TRANSPORT LXI H 041 053 21 2В Загрузить число tpw в HL 0538= 1 мс 5 000 00 6 7 SHLD 042 154 22 6С Переписать чио* ло tpw в опера- тивное ЗУ 010 040 10 20 014 ОС
Схемы ввода и вывода 253 Продолжение Адрес ЗУ Объектны* код восьм. шести. Метка Исходны* код восьм. шести. Описание опера* цииУкомментари* 1 2 3 4 5 LHLD MOV А, Н оит 052 156 014 176 323 2А 6Е ОС 7Е D3 Загрузить началь* ный адрес в HL Загрузить содер- жимое началь- ного адреса в А Переслать содер- жимое А в ре- гистр А ИС 8255А 010 6 7 050 10 28 10.000.000 MOV L,A OUT 200 175 323 80 7D D3 Загрузить в А со держимое L (младший байт адреса) Переслать содер- жимое А в ре- гистр В ИС к 8255А 1 2 3 10.000.001 MOV H, A ANI 201 174 346 81 7С Е6 Загрузить в А со- держимое Н (старший байт' адреса) Операция И для А и 38 (=обну- ление D2—D7) 4 5 6 7 00.000.011 ADI JMP 003 306 020 303 03 С6 10 СЗ Прибавить 0208 в. содержимому А («D4: устанав- ливается в со- стояние 1, т. е. D4=WE) Ошибка в текста программы 010 060 10 30 010 08
254 Глава 5 Продолжение Адрес ЗУ Объектный код восьм. шести. Метка Исходный код восьм. шести. Описание опера- цииТкомментарий «010 ою 1 1 2 3 4 5 6 7 070 1 2 3 4 5 6 7 100 1 2 10 10 38 40 TPW ADI 00.100.000 OUT LHLD DCX Н SHLD MOV A, L CPI 0 JNZ MOV А, Н 306 040 323 202 052 154 014 053 042 154 014 175 376 000 302 065 010 174 С6 20 D3 82 2А 6С 6С 2В 22 6С ОС 7D FE 00 С2 35 08 7С Прибавить 040в к содержимому А ( = D5: устанав- ливается в со- стояние 1, т. е. D5=импульс программатора) Переслать содер- жимое А в ре- гистр С ИС 8255А Загрузить число tpw в HL Уменьшить содер- жимое HL на 1 Переписать умень- шенное число tpw в опера- тивное ЗУ Переслать содер- жимое L в А Сравнить содер- жимое А с ну- лем (проверка tpw—0?) Если tpw¥=0, пе- реход по метке TPW Переслать содер- жимое Н в А
Схемы ввода и вывода 255 Продолжение ЗУ Объектный код восьм. шести. Метка Исходный код восьм. шести. Описание опера- ции/коммен гарий 010 3 4 5 6 7 110 1 2 3 4 5 6 7 120 1 2 3 4 10 10 48 50 CPI 0 JNZ POP В POP PSW ANI 11.011.111 OUT LHLD INX H SHLD 376 000 302 065 010 301 361 346 337 323 202 052 156 014 043 042 156 014 FE 00 С2 35 08 С1 F1 Е6 DF D3 82 2А 6Е ОС 23 22 6Е ОС Сравнить содер- жимое А с ну- лем (проверка* tpw = 0?) Если /pw¥=0, пе- реход по метк» TPW Коррекция указа- теля стека (сброс в нуль) Операция И для? А и 3378 (FF16) Переслать содер- жимое А в ре- гистр С ИС 8255А (сброс в нуль С5; им- пульс програм- матора заканчи- вается) Загрузить адрес Увеличить содер- жимое HL на 1 Переписать уве- личенный адрес в оперативное- ЗУ
556 Глава 5 Продолжение Адрес ЗУ Метка Исходный код Объектный код Описание опера- ции/комментаряй восьм. шести. восьм. шести. Г)10 5 6 7 130 1 2 3 4 5 6 7 140 10 10 58 60 LDA СМР L JNZ LDA СМР н JNZ 072 152 014 275 302 033 010 072 153 014 274 302 ЗА 6А ОС BD С2 1В 08 ЗА 6В ОС ВС С2 Загрузить началь- ный адрес+ + 1024 (=ко- нечный адрес) в А (младший байт) Сравнить содер- жимое L с со- держимым А Если L=+A, пере- ход по метке TRANSPORT Загрузить началь- ный адрес+1024 ( = конечный ад- рес) в А (стар- ший байт) Сравнить содер- жимое Н и А Если Н=АА, пере- 1 2 3 4 5 6 7 150 1 10 68 LHLD DCX Н SHLD 033 010 052 160 014 053 042 160 014 1В 08 2А 70 ОС 2В 22 70 ОС ход по метке TRANSPORT Загрузить индекс цикла в HL Уменьшить содер- жимое HL на 1 Переписать умень- шенный индекс цикла в опера- тивное ЗУ
Схемы ввода и вывода 257 Продолжение Адрес ЗУ Метка Исходный код Объектный код Описание опера* ции/комментарий восьм. шести. восьм. шести. 2 3 4 5 6 7 160 10 70 MOV A, L CPI 0 JNZ MOV А, Н 175 376 000 302 006 010 174 7D FE 00 С2 06 08 7С Переслать содер- жимое L в А Сравнить содер- жимое А с ну- лем Если A(L)=tM), пе- реход по метке START Переслать содер- 010 1 2 3 4 5 6 7 170 10 78 CPI JNZ MVI А OUT 376 000 302 006 010 076 000 323 FE 00 С2 06 08 ЗЕ 00 D3 жимое Н в А Сравнить содер- жимое А с ну- лем Если А(Н)=^0, пе- реход по метке START Загрузить нуль в А Сбросить в нуль 010 1 2 3 4 5 6 7 200 10 80 HALT OUT 202 166 323 82 76 D3 регистр С (8255А); деакти- вируется CS/ /WE Конец Установка CS/WE 1 202 82 в состояние 1
258 Глава 5 Продолжение Адрес ЗУ Метка Исходный код Объектный код Описание опера- ции/комментарий восьм. шести. восьм. шести. 2 PUSH PSW 365 F5 Операции для по- лучения време- ни задержки » 10 мкс 3 PUSH в 301 С1 4 5 6 JMP 303 061 010 СЗ 31 08 Обратный переход роЭВМ и этот байт пересылается с помощью команды выво- да в порт В ИС 8255А. Порт В указан во втором байте команды вывода с помощью битов D1J)O=O1 по адресу 010 051s. После этого загружается старший байт адреса из Н в аккумулятор А и по команде ANI выделяются два младших бита. Эти два бита используются как дополнение к 8-разрядному адресу в порте В, чтобы получить 10 бит для последующей выборки 1024 = 21(> ячеек СППЗУ. После этого к содержимому А в микроЭВМ добавляется число 020g, для того чтобы обеспечить значение D4=l. Теперь требуется передать содержимое аккумулятора в порт С ИС 8255А, однако соответствующая команда была здесь по ошибке пропущена. Это обстоятельство обнаружилось в процес- се тестирования программы, и недостающая команда была вставлена посредством программирования перехода по адресу 010 20€>8, чтобы затем можно было перейти в требуемую точку программы. С этой целью одновременно были выполнены две команды PUSH PSW и PUSH В, в результате чего появилась возможность вставить команду перехода по адресу 010 057g. После коррекции осуществляется возврат в исходную про- грамму по адресу 010 061g. Обе команды PUSH использовались для обеспечения необходимой задержки в 10 мкс между сигна- лом CS/WE и передним фронтом импульса программатора. Пос- ле этой задержки к содержимому А добвляется 0408; при этом получается D5=l. Этот бит после команды вывода используется для инициирования импульса программатора. Затем запускается программный цикл по tpw, который со- стоит из ряда команд. При каждом выполнении этого цикла ве- личина tpW будет уменьшаться на 1 до тех пор, пока не станет равной 0, после чего программа выйдет из цикла и будет про-
Схемы ввода и вывода 259 должена. При этом по адресу 010 110s сначала будут выполне- ны две команды POP, которые скомпенсируют воздействие пре- дыдущих команд PUSH на указатель стека; затем по команде ANI получается D5=0, в результате чего действие импульса программатора прекращается. Здесь команда ANI производит удаление 1 из бита D5. Последующие команды увеличивают адрес на 1 и прове- ряют, произошла ли пересылка всех 1024 адресов. Если она не закончена, то по командам JNZ (адреса 010 131s и 010 140s) произойдут переходы в начало программы и цикл повторится, однако теперь уже с новым адресом n+L Программа выполня- ется до тех пор, пока не будут переданы все 1024 адреса СППЗУ. Затем программа загружает индекс второго цикла (010 143в), уменьшает его на 1, проверяет, не равен ли этот индекс 0, и если нет, то осуществляет переход на метку START по адресу 010 ООбв, после чего снова все 1024 адреса с данными из ЗУПВ пересылаются в СППЗУ под управлением tPW, причем эта опе- рация повторяется 100 раз. Далее программа проходит через адрес 010 165s и по команде вывода сигнал CS/WE деактивизи- руется, после чего выполняется команда HALT и программа за- канчивается. 5.7. Программа проверки данных в СППЗУ При проверке данных в СППЗУ с помощью исходной про- граммы, находящейся в ЗУПВ/ПЗУ-имитаторе микроЭВМ, ре- гистр А используется в качестве порта ввода. Регистр В и часть регистра С продолжают работать в качестве адресного регистра, т. е. регистра вывода. Структурная схема программы проверки приведена на рис. 5.14, а текст ее находится в табл. 5.2. Из текста программы видно, что ее выполнение начинается с загрузки управляющего регистра; при этом регистр А исполь- зуется в качестве входного порта, а регистры В и С — в каче- стве выходных портов (см. адрес 010 200в). Затем загружается первый адрес в регистры В и С. Далее с помощью команды ввода IN байт данных считывает- ся из первого адреса СППЗУ и пересылается в аккумулятор микроЭВМ (010 2218). Этот байт по команде СМР сравнивается с тем байтом, который находится по первому адресу ЗУПВ (см. адрес 010 227з). Если эти байты не равны, то программа переходит к выполнению оператора HALT и по адресу 014 156/1578, используя пульт ручного управления, можно счи- тать адрес с неверным содержимым. Если же соответствующие байты равны, то программа будет выполняться далее с перехо- дом в подпрограмму «увеличение адреса на 1> (010 233в), после
260 Глава 5 Рис. 5.14. Структурная схема программы проверки СППЗУ. ресу 010 2008. Переход по адресу чего происходит провер- ка запроса о том, не до- стигнут ли последний ад- рес СППЗУ. До тех пор пока этот адрес не до- стигнут, программа будет переходить на метку READ по адресу 010 212э и проверка содержимого байтов СППЗУ будет продолжаться. Этот про- цесс заканчивается на 1024-м адресе, после че- го программа продолжа- ется по адресу 010 257а вплоть до оператора HALT (станов). Как программа за- грузки СППЗУ (табл. 5.1), так и программа проверки СППЗУ (табл. 5.2) начинают выпол- няться с адреса 000 000а после сброса в нуль или рестарта. По этому адре- су постоянно находится команда JMP, которая передает управление команде по адресу 014 ЮОз ячейки оператив- ного ЗУПВ, в которой с помощью пульта ручного управления записана команда перехода (JMP), передающая управление в требуемую программу. Как следует из табл. 5.1, в программе загрузки СППЗУ выполняется пе- реход по адресу 010 0008, а в программе проверки СППЗУ — переход по ад- 000 0008 выполняется в ППЗУ с помощью других подпрограмм и команд перехода, что позволяет обращаться во время прерываний к соответствующим сервисным программам.
Схемы ввода и вывода 261 Таблица 5.2. Программа: проверка СППЗУ (с загрузкой начальных условий) Адрес ЗУ Метка Исходный код Объектный код Описание операции/ком- ментарий восьм. шести. восьм. шести. 014 100 18 40 JMP 303 СЗ Переход в начало про- 101 41 200 80 граммы! 102 42 010 08 014 150 18 68 XXX XX Ввести начальный адрес 151 69 XXX XX проверяемой програм- мы! 152 6А XXX XX Ввести конечный адрес 153 6В XXX XX ( = начальный адрес+ + 1024)! Адрес оперативного ЗУ; 014 156 6Е XXX XX 157 6F XXX XXXJ этот адрес при появ- лении HALT указыва- ет, какой адрес был считан с ошибками 010 200 10 80 START MVIA 076 ЗЕ Режим в регистре А ИС 8255А: регистр А= «вход, регистры В и С=выход 1 220 90 2 OUT 323 D3 Переслать содержимое А в ИС 8255А 3 203 83 4 LHLD 052 2А Загрузить начальный ад- рес в HL 5 150 68 6 014 ОС 7 SHLD 042 22 Переписать начальный адрес в оперативное ЗУ 010 210 10 88 156 6Е 1 014 ОС 2 READ MOV 175 7D Переслать в А содер- A, L жимое L 3 OUT 323 D3 Переслать содержимое А в регистр В ИС 8255А 4 201 81 5 MOV 174 7С Переслать в А содержи- А, Н мое Н 6 ANI 346 Е6 Операция И для А и 0038 (=обнуление D2—D7) 7 003 03 010 220 10 90 OUT 373 D3 Переслать содержимое А в регистр С ИС 8255А 1 202 82
262 Глава 5 Продолжение Адрес ЗУ Метка Исходный код Объектный Мод Опнсанне операцжж/ком- межтаржй восьм. шести. восьм. | шести. 2 IN 333 200 D6 80 Переслать содержимое регистра А ИС 8255А в А (аккумулятор 8085А) 3 4 LHLD 052 2А Загрузить начальный ад* рес в HL 5 156 6Е 6 014 ОС 7 СМР м 276 BE Сравнить содержимое ад- 010 230 10 реса с содержимым А 98 JNZ 302 260 С2 ВО Если адрес^А, переход по метке HALT Ошибочный адрес счи- тывается по адресу 014-156/157ж(-=186Е/ /186Fle) 1 2 010 08 3 LHLD 052 2А Загрузить начальный ад* рес в HL 4 156 6Е 5 014 ОС 6 INX Н 043 23 Увеличить содержимое HL на 1 7 SHLD 042 22 Переписать увеличенный адрес в оперативное ЗУ ою 240 10 АО 156 6Е 1 014 ОС 2 LDA 072 152 ЗА 6А Загрузить начальный ад- рес-!- 1024 ( = конечный адрес) в А (младший байт) 3 4 014 ОС 5 СМР L 275 6D Сравнить содержимое L JNZ 302 С2 с содержимым А 6 Если L^A, переход по метке READ 7 212 8А 010 250 10 А8 010 08 1 LDA 072 153 ЗА 6В Загрузить начальный ад- рес-]-1024 ( = конечный адрес) в А (старший байт) 2 3 014 ОС
Схемы ввода и вывода 263 Продолжение Адрес ЗУ Метка Исходный код Объектный код Описание операции/ком- ментарий восьм. шести. восьм. |шестн. 010 4 5 6 7 260 10 ВО СМР Н JNZ HALT 274 302 212 010 166 6С С2 8А 08 76 Сравнить содержимое Н с А Если Н=#А, переход по метке READ Конец Если в программе используются прерывания, приходится сле- дить за тем, чтобы во время прерывания, начиная с «сервисно- го» адреса в ППЗУ (0), происходил переход в ЗУПВ, а из ЗУПВ — в соответствующую сервисную программу. 5.8. Вывод данных на магнитную ленту Практика показывает, что при обработке данных объем ЗУ довольно часто оказывается недостаточным для хранения ис- пользуемых программ и данных. В предыдущем разделе было рассмотрено сменное СППЗУ в качестве фиксированного носи- теля информации, который заполняется системой с помощью со- ответствующей программы. Однако программы можно хранить и на магнитной ленте. Этот метод часто используется в персональных компьютерах, поскольку он не связан с большими затратами для хранения информации. В профессиональной сфере в основном применяются диско- вые ЗУ; например, на дисках хранятся программы для расчетов займов, кредитов и т. п. Самым дешевым вариантом дискового ЗУ является гибкий диск (дискетка, или флоппи-диск). В качестве дешевого вспомогательного ЗУ часто использует- ся кассетный магнитофон. Подобное применение представляет хорошую иллюстрацию того, как специальные периферийные схемы осуществляют ввод и вывод данных. При выводе данных на ленту необходимо преобразовать параллельный набор би- тов в последовательный для того, чтобы затем можно было по- следовательно записать биты на ленте. Набор битов преобра- зуется в ЧМн-сигнал, который затем записывается на ленту. Здесь ЧМн— сокращение от слов частотная манипуляция, кото- рая представляет собой одну из форм частотной модуляции.
264 Глава 5 По сравнению с другими методами модуляции ЧМн имеет то преимущество, что к качеству кассетного магнитофона предъ- являются довольно низкие требования. При использовании ЧМн-метода нуль обеспечивается сигналом, частота которого лежит ниже основной частоты, а единица — сигналом с часто- той, превышающей основную. ЧМн-сигнал можно генерировать или детектировать с по- мощью довольно простой схемы, а именно схемы с фазовой под- стройкой частоты в интегральном исполнении, которая постав- ляется самыми разными фирмами-изготовителями. В рассматри- ваемой ниже разработке применена схема с фазовой подстрой- кой частоты типа NE564, которую изготавливает также фирма Signetics. Преобразование параллельного набора битов в последова- тельный для байта, записываемого на ленту, и обратное преоб- разование при считывании данных с ленты производит схема УСАПП (USART) типа 8251А (USART — Universal Synchro- nous Asynchronous Receiver Transmitter — универсальный син- хронно-асинхронный приемопередатчик — УСАПП) ’>. Первона- чально такие схемы были разработаны для телефонных систем последовательной связи. УСАПП типа 8251А располагается на кристалле и выполняет все функции, необходимые для реализации интерфейса между системой и модемом. При записи на ленту многие функции УСАПП являются лишними, в частности те, которые связаны с квитированием между соединяемыми станциями. Тем не менее эти функции также заслуживают рассмотрения хотя бы в фор- ме краткого обзора для получения более полного представления о работе УСАПП. При выводе данных из микроЭВМ на магнитную ленту УСАПП обычно присоединяется к шине данных микроЭВМ. При передаче данных на ленту мы говорим о выводе информа- ции, а при чтении данных с ленты — о вводе. Ввод и вывод дан- ных осуществляют команды записи и чтения ЗУ, а это возмож- но в том случае, когда УСАПП представляет собой набор запо- минающих элементов. При этом разрешение на ввод и вывод данных через УСАПП обеспечивает сигнал CS. Между УСАПП и кассетным магнитофоном находится ЧМн- генератор/демодулятор на ИС NE564, и, кроме того, к схеме до- бавляется задающий генератор, который определяет скорость передачи данных на ленту, т. е. плотность записи информации на магнитной ленте. В рассмотренной разработке скорость пере- дачи информации определяется частотой 400 Гц, при этом для 1) Отечественный функциональный аналог ММС КР580ИК51. — Прим, ред.
Схемы ввода и вывода 265 вывода данных из ЗУПВ-1К8 на ленту требуется всего несколь- ко минут. Скорость пересылки данных, равная 1000 бод (1 бод = = 1 бит/с) в этом случае считается высокой. Более высокие ско- рости пересылки обеспечить трудно из-за ограничений, связан- ных с шириной ленты кассетного магнитофона. УСАПП преобразует параллельный набор битов в последо- вательный при передаче и последовательный — в параллельный при приеме информации. Если какой-либо последовательный на- бор уже передан и происходит формирование нового параллель- ного набора, то УСАПП может послать запрос на прерывание. При этом микроЭВМ получает сообщение о том, что УСАПП либо ждет новую информацию, либо подготавливает для запи- си на ленту новые данные. Для этого используются сигналы RxRDY и TxRDY. Прежде чем перейти к анализу применения УСАПП в нашей системе, обсудим некоторые характеристики этой схемы. 5.9. УСАПП типа 8251А На рис. 5.15, а приведена блок-схема ИС 8251А. В правой части схемы показаны буферы передатчика и приемника, кото- рые осуществляют параллельно-последовательное и последова- тельно-параллельное преобразования. Каждый буфер/преобра- зователь связан со схемой управления, которая обеспечивает сообщения о ходе пересылки, или информацию о возможности приема данных из микроЭВМ для их обработки. МикроЭВМ может считывать данные, исходя из запросов о состоянии или передавая через управляющую схему соответствующие коман- ды, управлять буферами в ходе обработки информации. В УСАПП имеются схема управления модемом и логическая схема для управления процессами чтения и записи; буфер дан- ных может соединять и разъединять шину данных микроЭВМ и внутреннюю шину данных ИС 8251А. Управляющая логика предусматривает два возможных на- правления пересылки данных по шине данных (см. таблицу на рис. 5.16). Назначение сигналов RD(L), WR(L) и CS(L) было уже опи- сано выше. Эти сигналы микроЭВМ служат для выбора кри- сталла, а также для чтения и записи информации. Сигнал C(H)/D(L) (Control/Data — управление/данные) идентифициру- ет передачу управляющей информации в УСАПП или передачу информации о состоянии УСАПП в микроЭВМ (C(H)/D(L) = 1), или же «чистую» передачу данных (C(H)/D(L) =0). Для CS(L) используется бит D7 из третьего байта команды ЗУ, а для C(H)/D(L) —бит D6 из того же байта. Схема управления мо-
D7-D0 С шины управления < RESET_ CLK_ C/D_ RD_ WR ТГ CSOJ DSR(L)_ DTR(L) GTS(L£ RTS(L) Буфер приемника Управляюща логика чтения/ записи Управление модема Буфер передатчика (Р —S) Буфер шины данных Управление приемом 8251А (а) Внутренняя шина данных 02 С 28 □ DI D3 Е 2 27 □ DO RxD Е 3 26 □ +UB(55) Земля Е 4 25 □ RxC(L) D4E 5 24 □ DTR(L) D5 Е 6 23 □ RTS(L) D6 Е 7 22 □ DSR(L) 8251А D7 Е 8 21 □ Сброс TxC(L)Е 9 20 □ CLK iWR(L) Е to J9 □ TXD ^CS(L) Е It 18 □ TxEMPTY C(H)/D(L) е 12 17 □ CTS(L) RD(L) Е 13 16 □ SYNDET/BD RxRDY Е 14 15 □ TXRDY ™ ии—un- Управление передачей TxRDY TxEMPTY TxC(L) RX&TJ---ltutj- RxRDY RxC(L) SYNDET/ BRKDET Рис. 5.15. Блок-схема программируемого связного интерфейса (УСАПП) ти- па 8251А (а, б) и пример применения этой схемы в качестве асинхронного интерфейса, подключенного к телефонной сети (в).
(в) Наименование вывода Функция вывода D7.. .DO C(H)/D(L) RD(L) WR(L) CS(L) CLK RESET TxC(L) Шина данных — 8 бит У пра вление/Д анные Команда чтения Команда записи данных или управляющего слова Выбор кристалла; выбор УСАПП Синхроимпульс МП Сброс Синхронизация передатчика (входной сигнал, управляющий скоростью передачи данных) TxD Выход передатчика; последовательный набор би- тов RxC(L) Синхронизация приемника (входной сигнал, за- дающий скорость приема) RxD RxRDY Вход приемника; последовательный набор битов Готовность приемника; УСАПП готов передать собранный байт в МП Рис. 5.15 (продолжение).
268 Глава 5 (продолжение рис. 5.15) TxRDY Готовность передатчика; УСАПП готов передать на выход последовательный набор данных DSR(L) DTR(L) Готовность набора данных; модем готов к работе Готовность терминала данных; МП и УСАПП готовы к передаче данных SYNDET/BD Обнаружение режима синхронизации и разрыва (паузы). Сигнал активизируется при обнаруже- нии символа синхронизации в синхронном ре- жиме. BD определяет символ паузы в асин- хронном режиме RST(L) Запрос передачи, передаваемый МП на шину данных CTS(L) Готовность приемника терминала; модем готов к приему данных TxE Передатчик пуст; буфер передатчика не успел принять своевременно байт информации из МП Ub Земля Напряжение питания +5 В Логическая земля C(H)/D(L) RD(L) WR(L) CS(L) Операция 0 0 1 0 Данные 8251А Шина данных 0 1 0 0 Шина данных => Данные 8251А 1 0 1 0 Бит состояния => Шина данных 1 1 0 0 Шина данных => Управл. регистр X 1 1 0 Шина данных =>3-е состояние X X X 1 Шина данных => 3-е состояние X — неопределенное состояние. Рис. 5.16. Таблица истинности, которая показывает, как с помощью комби- нации управляющих символов можно реализовать определенные команды ввода и вывода. дема может передавать команды в модем и считывать информа- цию о состоянии этого блока. Сигнал DSR(L) (Data Set Rea- dy— готовность модема) представляет собой инвертированный первый бит, который может быть опрошен микроЭВМ с по- мощью команды считывания информации о состоянии. Этот сигнал сообщает о готовности модема к сеансу связи. Сигнал DTR(L) передается из микроЭВМ с помощью опре- деленного бита, запрограммированного в управляющем слове описания формата команды. Сигнал DTR(L) (Data Terminal
Схемы ввода и вывода 269 Ready — готовность терминала) сообщает модему о том, что микроЭВМ готова к передаче данных. Сигнал RTS(L) (Request to Send — запрос на пересылку) выдается микроЭВМ также с помощью бита, запрограммиро- ванного в управляющем слове описания формата команды. УСАПП передает этот запрос в модем с помощью соответствую- щего сигнала. Сигнал CTS(L) (Clear to Send — готовность к пересылке) модем посылает тогда, когда он подготовлен к приему данных. Если этот сигнал отсутствует, когда передатчик занят пересыл- кой данных, то сначала заканчивается сеанс пересылки, а затем •сбрасывается в нуль CTS-триггер. Сигнал TxRDY (Transmitter Ready — готовность передатчи- ка) сообщает микроЭВМ о том, что преобразование закончено и соответствующий байт данных передан во внешние схемы. С помощью этого сигнала часто инициируется прерывание, пос- ле чего микроЭВМ может передать новый байт для последую- щего преобразования в УСАПП. Сигнал ТхЕ (Transmitter Empty — передатчик пуст) сообща- ет, что в ИС 8251А отсутствуют символы или байты данных, подготовленные для передачи. Этот сигнал, который принимает высокий уровень в случае пустого буфера, может использовать- ся для того, чтобы сообщить микроЭВМ о передаче последнего байта сообщения и о том, что модем может перейти в режим передачи или приема новой информации. В случае синхронной передачи сигнал ТхЕ указывает, что пересылаемые символы были загружены в микроЭВМ несвое- временно и что УСАПП должно послать синхронизирующие символы, необходимые для заполнения пробела, возникшего в передаваемом сообщении. Сигнал TxC(L) является входным синхронизирующим сигна- лом передатчика, управляющим скоростью передачи информа- ции. При синхронной передаче эта скорость определяется часто- той сигнала TxC(L). В асинхронном режиме скорость передачи определяется величиной, кратной частоте сигнала TxC(L). В этом случае управляющее слово, задающее режим, указывает соответствующий коэффициент деления частоты: 1, 1/16 или 1/64. TxD — выходной сигнал для передачи последовательного на- бора битов, полученного после преобразования, a RxD — вход- ной сигнал, который вводит последовательный набор битов, по- ступивший извне. Сигнал RxRDY сообщает, что принятый по- следовательный набор преобразован в параллельный байт, ко- торый готов к пересылке. Можно запросить микроЭВМ о приеме этого байта, используя для этой цели прерывание.
270 Глава 5 В асинхронном режиме RxRDY переходит в состояние 1, если после приема стартового бита приемник получает разрешение и при этом уже выделен полный символ или байт, который нахо- дится в выходном регистре данных. Для того чтобы произошло считывание RxRDY в асинхронном режиме, буфер должен полу- чить разрешение, а символ должен быть полностью принят. Пос- ле считывания байта в микроЭВМ сигнал RxRDY переходит в состояние 0. Входной сигнал RxC(L) управляет скоростью передачи ин- формации при выборке последовательного набора битов. В син- хронном режиме скорость передачи определяется частотой этого сигнала, а в асинхронном режиме — величиной, кратной частоте сигнала RxC(L). Управляющее слово, задающее режим, обеспе- чивает эту кратность, равную 1, 1/16 или 1/64. Данные переда- ются передним фронтом сигнала RxC(L). Сигнал SYNDET/BRKDET используется в синхронном режи- ме как входной или выходной сигнал для программирования с помощью управляющего слова. Будучи запрограммирован в качестве выходного, этот сигнал указывает, что в данный мо- мент обнаружен символ синхронизации. Если появляются два символа синхронизации, то SYNDET принимает высокий уровень при передаче последнего бита второго символа синхронизации. При считывании состояние SYNDET автоматически сбрасы- вается в состояние 0. Будучи запрограммирован как входной сигнал поступающий положительный сигнал запускает сборку символов данных в ИС 8251А передним фронтом следующего импульса RxC(L). Если запрограммирован режим внешней син- хронизации, то обнаружение режима внутренней синхронизации не производится. Будучи запрограммирован в качестве опреде- лителя паузы, выходной сигнал принимает высокий уровень, если стартовый бит, бит четности и отдельный стоп-бит имеют нулевые значения. МикроЭВМ с помощью операции считывания состояния может также запросить информацию о состоянии определителя паузы в виде бита состояния, который устанавли- вается в состояние 0 либо по сигналу главного сброса в нуль, либо когда сигнал RxD = l. Определение паузы применимо только в асинхронном режиме передачи информации. 5.10. Управление ИС 8251А По аналогии с ИС 8255А при описании УСАПП начнем с тех операций, которые показывают, что именно и почему дела- ет эта схема. Для управления УСАПП используются два вида управляющих слов: инструкция задания режима и инструкция команды. Сначала управляющее слово, содержащее инструкцию
Схемы ввода и вывода 271 задания режима, загружается в микроЭВМ командой записи в ЗУ. При этом мы выделяем два формата: один для асинхрон- ного, а другой для синхронного режима передачи данных. Изме- нение формата может произвести только сигнал MCR (Master Chip Reset — главный сброс кристалла). На рис. 5.17 приведен формат инструкции, задающей режим асинхронной передачи. С помощью этого слова указываются скорость передачи, длина слова/символа, четность и требуемое число стоп-битов (см. т. 3, гл. 4). На рис. 5.18 приведен формат инструкции, задающей режим синхронной передачи данных. Соответствующие биты этой ин- струкции точно указывают, как именно будет проходить пере- дача данных. Инструкция режима передается с помощью коман- ды записи в ЗУ, поступающей из микроЭВМ в УСАПП; при этом C(H)/D(L) = 1 (шина данных соединяется с регистром управления). После инструкции, задающей режим, передается инструкция команды, структура которой показана на рис. 5.19. В этом сло- ве различные управляющие биты активизируют выходы модема и других схем по указанию микроЭВМ. Относительно бита «вход в режим поиска» можно отметить, что если он запрограм- мирован, то УСАПП переходит в режим ожидания и начинает следить за появлением символов синхронизации, разумеется, только в синхронном режиме передачи данных. МикроЭВМ может получить информацию о состоянии УСАПП с помощью команды чтения ЗУ, в третьем байте кото- рой бит C(H)/D(L) = 1. Если программе требуется информация о состоянии ИС 8251А, то ее можно получить именно по этой команде. Формат слова состояния ИС 8251А показан на рис. 5.20. После этого краткого описания возможностей УСАПП обра- тимся к проблеме вывода информации на ленту из микроЭВМ и ввода информации с ленты в микроЭВМ в последовательном режиме. Эту проблему можно решить, применяя довольно про- стое аппаратурное обеспечение, показанное на рис. 5.21. Более тщательный анализ этой схемы показывает, что слово, задаю- щее режим, инструкция команды, слово состояния и слова дан- ных можно принять по шине данных и передать с помощью со- ответствующих управляющих сигналов, подаваемых на CS(L)-, C(H)/D(L)-, RD(L)- и WR(L)-входы в соответствии с таблицей, приведенной на рис. 5.16. Программируя команды чтения и записи, мы заботимся о том, чтобы в третьем байте этих команд были заполнены раз- ряды D7 для CS(L) и D6 для C(H)/D(L). В случае вывода дан- ных на магнитную ленту последовательный набор битов появ- ляется на TxD-выходе ИС 8251А. Этот сигнал через двойной
D7 D6 D5 D4 D3 D2 D1 DO Рис. 5.17. Формат инструкции асинхронного режима работы. D7 D6 D5 D4 D3 D2 DI DO scs ESD ЕР PEN L2 L1 0 0 Длина символа 0 7 О 7 О О 1 7 5 бит 6 бит 7 бит 8 бит Разрешение контроля по четности 1-разрешен О-запрещен - Генерация бита контроля 1- четный О-нечетный Обнаружение внешней синхронизации 1- SYNDET является входным сигналом О-SYNDET является выходным сигналом Число символов синхр. 1-один символ О-два символа Рис. 5.18. Формат инструкции синхронного режима работы. [Примечание: в режиме внешней синхронизации при программировании двух символов синхронизации будет изменяться только Тх (передатчик)].
Схемы ввода и вывода 273 *(не оказывает никакого воздействия в асинхрон- ном режиме) Рис. 5.19. Формат инструкции команды ИС 8251 А. инвертор поступает на ЧМн-генератор/детектор NE564!). После пересылки последовательного набора битов сообщение об этом событии передается с помощью сигнала INTR2 через TxRDY-вы- ход в микроЭВМ, после чего микроЭВМ передает в УСАПП следующий байт данных. См. разд. 5.8 — Прим, перев.
274 Глава 5 D7 D6 D5 D4 D3 D2 D1 DO DSR SYNDET FE ОЕ РЕ ТхЕМРТУ RxRDY TxRDY TO ЖЕ ЗНАЧЕНИЕ, ЧТО И ДЛЯ КЛЕММ ВВОДА-ВЫВОДА ОШИБКА ПО ЧЕТНОСТИ Флажковый бит четности устанавливается, когда обнаружена ошибка по чет- ности. Этот бит сбрасывается ER-битом в инструкции команды. Флажковый бит РЕ не запрещает работу ИС8251А ОШИБКА ПЕРЕГРУЗКИ Флажковый битОЕ устанавли- вается, когда МП не может считать символ до появления следующего символа. Этот бит сбрасывается битом ER! инструк- ции команды. ОЕ не запрещает работу ИС 8251А, однако предыду- щий символ при перегрузке будет потерян____________________ ОШИБКА ФОРМИРОВАНИЯ ' КАДРА (в асинхронном режиме) Флажковый бит ЕЕ устанавли- вается, когда в конце каждого символа не будет обнаружен действующий стоп-бит. Этот бит сбрасывается битом ER инструкции команды. ЕЕ не за- прещает работу ИС 825IA ГОТОВНОСТЬ НАБОРА ДАННЫХ показывает, что на DSR-exod подано напряжение L-уровня, а это означает, что модем готов к работе Рис. 5.20. Формат слова состояния ИС 8251А. При запросе состояния УСАПП биты в слове данных имеют значения, указанные в данном формате. При выборке данных с ленты с помощью программы «чтение ленты» ЧМн-демодулятор формирует ЧМн-сигнал, который по- ступает с ленты в виде последовательного набора битов, пере- даваемого через схемы И-НЕ на основе триггера Шмитта на RxD-вход ИС 8251А. После детектирования начального бита (здесь используется асинхронный режим для записи данных на ленту) байт «собирается» с помощью УСАПП и после форми- рования полного байта ИС 8251А генерирует сигнал RxRDY.
Схемы ввода и вывода 275 Этот сигнал используется для прерывания микроЭВМ (INTR1). В средней части схемы (рис. 5.21) показан задающий гене* ратор на основе NE555, который обеспечивает частоту синхро- импульсов, равную ~6000 Гц. ИС 8251А программируется та- ким образом, что эта частота 6 кГц делится затем на 16 для обеспечения скорости пересылки информации, соответствующей ~400 Гц. Коэффициент деления частоты задается в формате инструкции режима (см. рис. 5.17). Переключение с режима чтения на режим записи, и наобо- рот, производится тумблером, который устанавливается в соот- ветствующее положение. В начале выполнения программы со- стояние тумблера «передача/прием> считывается по команде ввода и на основе этих данных микроЭВМ решает, к какой про- грамме следует обратиться — к программе чтения ленты или к программе записи на ленту. Ниже будет показано, как про- граммируется этот режим. Если при пересылке данных с ленты в УСАПП микроЭВМ обнаруживает ошибку по четности, то с помощью команды вы- вода происходит установка D-триггера, который включит све- тодиод. В начале каждого файла данных находится идентификатор,, который позволяет микроЭВМ обнаружить требуемый файл на ленте, после чего происходит пересылка данных. В оперативное ЗУ микроЭВМ (ЗУПВ) вводятся идентификатор, номер програм- мы, начальный и конечный адреса ячеек ЗУ; после запуска кассет- ного магнитофона микроЭВМ производит непрерывную провер- ку поступающих байтов данных с целью обнаружения иденти- фикатора с номером программы, начальным и конечным адре- сами. Если ЭВМ находит эту информацию (заголовок), то по команде вывода D-триггер переводится в состояние 1; при этом включается светодиод с пометкой LOAD (ЗАГРУЗКА). D-триг- гер и светодиод находятся в правой части схемы. Информация о состоянии тумблера «передача/прием» считы- вается на шину данных в тот момент, когда появляется им- пульс INSO(L). Только после этого буфер может начать пере- сылку данных, для которой требуется тристабильная связь с ИС 74LS244. Буфер 74LS244, управляемый INSO(L), находится в левой нижней части схемы. ЧМн-генератор/детектор представляет собой схему с фазовой перестройкой частоты и дополнительной электроникой, разме- щенной на одном кристалле, которая преобразует полученный с выхода фазового детектора порог напряжения в ТТЛ-сигнал. Детектор с фазовой перестройкой частоты состоит из гене- ратора, управляемого напряжением (ГУН), и фазового детекто- ра, который управляет ГУН через RC-фильтр. На входы фазо-
23 24 16 Входной синхросигнал °Сброс (Н) ABUS 14(H) 20 21 С Сброс ~выход MEMR(L) memwclJ ABUS15(H) + 5В DBUSQ(H) DBUS7(H) INTRKL) INTR2(L) INSO (L) PUTSCH L) OUTSKL), 74LS0? 2fb|RD(L) 26 27 28 RxRDY >3 /4 WR(L) CS(L) CTS(L) Ucc Земля DO DI D2 D3 D4 D5 D6 D7 УСАПП 8251А 74 LSI32 -oRTS(L) -oDTR(L) -°SYND/BD о Тх ЕМРТ Установка гистерезис^ триггера Шмитта DSR(L) RxC(L) TxC(L) 2,2 мкФ передачи 1/2 кОм 12 RxC(L) RXD 13 IN914 ~^2,2мк^2,2 мкФ NE5G4 ЧМн-генератор/ дешифратор Генератор °>1л*кФ °-'^T 1& С, зависящие от частоты 2 G 0,0/мкФ£ TxQ(H) 3 NE555 12 кОм чмн-лриелю- I передатчик TxD Установка усиления \ 10 кОм 2 кОм +6# П 350 ОМ 0,1мкФ 1 кОм ^15. 74LS04 1QJ---pi |TxRDY 74LS244 11 | Выход 74LS04 Посылка (H) Тристабильный бусрер Посылка DBUSO(H) 1к0м + 5В 12 II 413 CLR 2D 74LS74 PR ^10 IIkOm 01мкФ ЧН 1 кОм fl 74LS132 100 ОМ 50 кОм BCI07 10 кОм 1N914 (2х) О^мкФ 100 кОм z ‘Вход Выход Л 12 Q(L) 3 ID CLR 74LS74 PR 6 CQV24-A2 550 0м LZ__(О)_।--1— +5 В ' Загрузка 74LS04 РП.,Ол до « 7 1--|Я С^24 А2 560 Ом H/F-----0—CZZF К5Л q(L) —J Ошибка по четности 14 5, 5В 0,15 мкФ a Рис. 5.21. Периферийная схема для связи микроЭВМ с кассетным магнитофоном, а —схема; б — аппаратурное исполнение,
Схемы ввода и вывода 277 б Рис. 5.21 (продолжение). вого детектора подаются сигнал ГУН и внешний сигнал (ЧМн- сигнал), фазы которых этот детектор сравнивает. Фазовый де- тектор стремится управлять работой ГУН так, чтобы разность фаз соответствующих сигналов была минимальной. Выходное напряжение фазового детектора используется для управления ГУН. Если подать сигнал на детектор с фазовой перестройкой частоты, то под действием изменения частоты выходное напря- жение детектора будет переходить с одного уровня на дру- гой. Эти уровни напряжения преобразуются затем в ТТЛ-уров- ни и подаются на вход УСАПП. Схема генерирует и ЧМн-сигнал, так как если на выходе фа- зового детектора формируется напряжение с изменяющимся уровнем, ГУН выдает сигнал с изменяющейся частотой (ЧМн- режим). В данной схеме выводы фазового детектора (точки 4 и 5) управляются сигналом TxD, который поступает через две схе- мы И на основе триггера Шмитта и транзистора ВС107. Между фазовым детектором и ИС NE564 включены электрон- ные схемы, такие, как триггер Шмитта, гистерезисные характе- ристики которого можно изменять с помощью внешнего потен- циометра. Гистерезис существенно влияет на чувствительность этой схемы по отношению к помехам. С помощью второго потен- циометра устанавливается уровень усиления в детекторе с фазо- вой перестройкой частоты. Оба потенциометра определяют ре-
278 Глава 5 жим работы соответствующего детектора. Однако следует от- метить, что настройка слабо зависит от положения ручек потен- циометров. Величина частотного диапазона при передаче ЧМн- сигнала определяется 50 кОм-потенциометром, включенным в коллектор транзистора ВС 107. ИС NE555 работает в режиме мультивибратора и формиру- ет синхронизирующие сигналы ТхС и RxC для ИС 8251А. Вход синхросигналов CLK управляется непосредственно выходными сигналами микроЭВМ. Вход главного сброса кристалла также связан с соответствующим выходом микроЭВМ. 5.11. Программа вывода данных на ленту кассетного магнитофона При записи на ленту кассетный магнитофон должен перей- ти в режим приема данных до того, как микроЭВМ начнет вы- полнение программы вывода. При чтении можно начать выпол- нение программы, не дожидаясь, пока будет запущена лента. При этом программа работает в режиме ожидания до тех пор, пока не будет зафиксирован идентификатор файла. Из табл. 5.3, где приведена программа чтения/записи данных на ленту кассет- ного магнитофона, видно, что до начала работы в ЗУПВ тре- буется ввести некоторые начальные данные. В ячейки 014 0408 и 014 0438 вводятся две команды RET, которые, как будет показано ниже, обеспечивают возврат в ос- новную программу при появлении прерывания в подпрограммах. Далее с пульта ручного управления (ПРУ) адреса 014 1478— 014 1538 заполняются номером программы, а также адресами начала и конца выдаваемого массива. Другие указанные в начале программы адреса формируют оперативные ЗУ переменной длины. При появлении ошибки по четности с помощью ПРУ можно произвести считывание адреса 014 3068 и последующих ячеек, чтобы найти адреса тех ячеек ЗУ, которые загружены с ошибкой по четности. Сначала выясним, как выполняется программа при загрузке ленты байтами данных из микроЭВМ. Структурная схема этой программы приведена на рис. 5.22. При нажатии клавиши RESET ПРУ выполнение программы начинается со считывания по адресу 000 0008 команды перехода, которая производит передачу управления по адресу 014 1008. Здесь находится вторая команда перехода, которая передает управление по адресу 012 0008. Выполнение программы начи- нается с загрузки указателя стека с помощью команды LXI, SP (014 2008). После этого по команде вывода сбрасывается в нуль триггер индикатора со светодиодом LOAD. То же самое про- исходит с триггером индикатора ошибки по четности. После загрузки в аккумулятор нулей и пересылки этих нулей на вы-
Схемы ввода и вывода 279 Таблица 5.3. Программа: чтение/запись на ленту кассетного магнитофона (с загрузкой начальных условий) Адрес ЗУ Метка Исходный код Объектный код Описание опера- циц/комментарий восьм. шести. восьм. шести. 014 100 18 40 JMP 303 СЗ Переход в начало программы! 101 41 000 00 102 42 012 0А 043 23 RET 311 С9 Ввести RST2! 040 20 RET 311 С9 Ввести RST1! 014 147 18 67 Ml XXX XX Ввести номер про- граммы! 150 68 М3 XXX XX Ввести начальный ад- рес! 151 69 М3 XXX XX 152 6А М4 XXX XX Ввести конечный ад- рес! .153 6В М4 XXX XX 014 156 18 6Е Al XXX XX PE-файл в оператив- ное ЗУ переменной длины 157 6F Al XXX XX 160 18 70 А2 XXX XX Оперативное ЗУ пе- ременной длины Мх 161 71 А2 XXX XX 162 72 АЗ XXX XX Программа в опера- тивное ЗУ перемен- ной длины 163 73 АЗ XXX XX 014 306 18 СО XXX XX Начало РЕ-файла 014 200 18 80 XXX XX Начало стека 012 000 14 00 LXI SP 061 31 Загрузить указатель стека , 1 200 80 2 014 ОС 3 MVI А 076 ЗЕ Заполнить А нулями 4 000 00
280 Глава 5 Продолжение Адрес ЗУ Метка Исходный код Объектный код Описание опера- ции/комментарий восьм. шести. восьм. шести. 5 6 7 010 1 2 3 4 5 6 7 020 1 2 3 4 5 6 7 14 14 08 10 OUT OUT IN ANI DO CPI JZ LXIH SHLD 323 000 323 001 333 000 346 001 376 001 312 300 012 041 300 014 042 156 014 D3 00 D3 01 D6 00 Е6 01 FE 01 СА СО 0А 21 СО ОС 22 6Е ОС Сбросить в нуль ин* дикатор загрузив (INS0) Сбросить в нуль ин* дикатор ошибки по четности Считать состояние пе- реключателя пере* сылки Операция И для А в 0018 (Obe) Сравнить содержимое А с 0018 (01 к) Если А=1, переход в подпрограмму за* писи Загрузить начальный адрес РЕ-файла Переписать в опера- тивное ЗУ по адре- су А1 012 030 1 14 18 MVI A 076 377 ЗЕ FE Команда с описанием режима в А
Схемы ввода и вывода 281 Продолжение Адрес ЗУ Метка Исходный код Объектный код Описание опера- ции/комментарий восьм. шести. восьм. шести. 2 STA 062 32 Описание режима УСАПП cs=i бГоГоГ 3 ООО 00 c/d=i 1 4 300 СО D4” D3* D2* dT DO* 2L2L 2L2L2L 5 IDENT MVIA 076 ЗЕ Инструкция команды в А 6 026 16 7 STA 062 32 Инструкция команды в УСАПП 012 040 14 20 000 00 1 300 СО 2 EI 373 F6 Разрешение прерыва- НИЯ 3 HLT 166 76 Ожидание данных; возврат через 014 0408 4 RST1 LDA 072 ЗА Переслать данный УСАПП в А 5 000 00 6 200 80 7 STA 062 32 Переписать содержи- мое А (идентифи- катор) в Ml для тестов 012 050 14 23 165 75 1 014 ОС 2 CPI А 376 FE Сравнить содержи- мое А с 307в(071б) (идентификатор) 3 307 С7 4 JNZ 302 С2 Переход по метка IDENT, если иден- тификатор не най- ден
282 Глава 5 Продолжение Адрес ЗУ Метка Исходный код Объектный код Описание опера- ции/комментарий восьм. шести. 2 О о шести. 5 035 1D 6 012 0А 7 MVIA 076 ЗЕ Инструкция команды в А 012 060 14 30 026 16 1 STA 062 32 Инструкция команды в УСАПП 2 000 00 3 300 СО 4 EI 373 F6 Разрешение прерыва* НИЯ 5 HLT 166 76 Ожидание данных; возврат через 014 0408 (18 201б) 6 RST1 LDA 072 ЗА Переслать данные УСАПП в А (но- мер программы) 7 000 00 012 070 14 38 200 80 1 STA 062 32 Переписать в М2 (для тестов) 2 165 75 3 014 ОС 4 LXIH 041 21 Загрузить адрес, со- держащий номер программы, в HL 147 67 5 014 ОС 6 7 СМРМ 276 6Е Сравнить содержимое А с номером про- граммы в ячейке ЗУ 014 147в 012 100 14 40 JNZ 302 С2 Переход по метке IDENT, если най- денный номер про- граммы не равен введенному номеру программы
Схемы ввода и вывода 283 Продолжение hxptt ЗУ Метка Исходный код Исходный КОД Описание опера- ции/комментарий восьм. шести. восьм. шести. 1 035 ID 2 012 0А 3 LXI Н 041 21 Загрузить начальный адрес в HL 4 150 68 5 014 ОС 6 SHLD 042 22 Переписать по адресу 014 1608 (Мх= = 18 7016) 7 160 70 012 п'С 14 48 014 ОС 1 ADDRESS MIL А 076 ЗЕ Инструкция команды в А 2 026 16 3 STA 062 32 Содержимое А в УСАПП 4 000 00 5 300 СО 6 EI 373 F6 Разрешение преры- вания 7 HLT 166 76 Ожидание; возврат через RET 014 0408 (18 201б) 120 14 50 RST1 LDA 072 ЗА Данные УСАПП в А2 1 000 00 2 200 80 3 LHLD 052 2А Загрузить Мх в HL 4 160 70 5 014 СО 6 CMP M 276 6Е Сравнить содержимое А с Мх 7 JNZ 302 С2 Переход по метке IDENT, если не равно введенному начальному или ко- нечному адресу
284 Глава 5 Продолжение Объектный Адрес ЗУ код Метка Исходный Описание опера- код з 0 пии/комментарнй восьм. шести. о S 130 14 58 035 1D 1 012 0А 2 LHLD 052 2А Загрузить адрес в А2 (Мх) 3 160 70 4 014 ОС 5 INX Н 043 23 Увеличить этот адрев на 1 (HL+1) 6 SHLD 042 22 Переписать увеличен- ный адрес в 014 1608 (18 7016) 7 160 70 012 140 14 60 014 ОС 1 MVI А 076 ЗЕ Загрузить старший байт конечного ад- реса в А 2 154 6С 3 CPI Н 274 ВС Сравнить содержи- мое А с содержи- мым Н 4 JNZ 302 С2 Переход по метке ADDRESS после проверки всех 4 байт начального и конечного адресов 5 111 49 6 012 0А 7 MVI А 076 ЗЕ Заполнить А едини- цами 150 14 68 111 49 1 OUT 323 D3 Установка триггера индикации загрузки в состояние 1 2 000 00 3 LHLD 052 2А Загрузить начальный адрес в HL (содер- жимое адреса 0 1 4 1 508)
Схемы ввода и вывода 285» Продолжение Адрес ЗУ Метка Исходный мод Объектный код Описание опера- ции/комментарий восьм. шести. восьм. шести. 4 150 68 5 014 ОС 6 SHLD 042 22 Переписать в АЗ 7 162 72 160 14 70 014 ОС 1 DATA MVI А 076 ЗЕ Инструкция команды* в А 2 026 16 3 STA 062 32 Инструкция формата* команды в УСАПП 4 000 00 5 300 СО 6 EI 373 F6 Разрешение преры- вания Ожидание; возврат через RET 014 0408 (18 2016) 7 HLT 166 76 Ожидание 012 170 14 78 LDA 072 ЗА Переслать данные УСАПП в А 1 000 00 2 200 80 3 LHLD 052 2А Загрузить содержи- мое адреса АЗ bHL 4 162 72 5 014 ОС 6 MOV M 167 77 Переписать содержи- мое А в програм- мный файл 7 INX H 043 23 Увеличить адрес про- граммы на 1 200 14 80 GO THROUGH SHLD 042 22 Переписать увеличен- ный адрес в АЗ 1 162 72 2 014 ОС
286 Глава 5 Продолжение Адрес ЗУ Метка Исходный Код Объектный код Описание опера- ции/комментарий восьм. шести. восьм. шести. 3 CALL 315 CD Проверка на чет- ность: переход по метке РЕ-СНЕСК 4 231 99 5 012 0А 6 LDA 072 ЗА Загрузить содержи- мое М4 (конечный адрес) в А (млад- ший байт) 7 152 6А 210 14 88 014 ОС 1 СМР L 275 6D Конец программного файла? 2 JNZ 302 С2 Если=/=0, продолжить пересылки данных; переход по метке DATA 3 161 71 4 012 0А 5 LDA 072 ЗА Загрузить содержи- мое М4 (конечный адрес) в А (млад- ший байт) 6 153 6В 7 014 ОС С12 220 14 90 СМР Н 274 6С Конец программного файла? 1 JNZ 302 76 Если=/=0, продолжить пересылки данных; переход по метке DATA 2 166 76 3 012 0А 4 MVI А 076 ЗЕ Нуль в А 5 000 00 6 OUT 323 D3 Сбросить в нуль триг- гер индикатора за- грузки
Схемы ввода и вывода 287 Продолжение Адрес ЗУ Метка Исходный КОД Объектный код Описание опера- ции/комментарий восьм. шести. восьм. шести. 7 230 1 2 3 4 5 6 7 240 1 2 3 4 5 6 7 14 14 98 АО РЕ-СНЕСК PE-ERROR HALT LDA ANI CPI H cz RET XCHG LHLD ООО 166 072 000 300 346 010 376 010 314 244 012 311 353 052 156 014 00 76 ЗА 00 СО Е6 08 FE 08 сс А4 0А С9 Е6 2А 6Е ОС Конец Проверка на чет* ность; чтение слова состояния УСАПП Чтение одного бита четности; операция И с 00 001 0002 Равен ли бит четно* сти 1? Если произошла ошибка по четно- сти, отметьте ее. Переход по метке PE-ERROR Переход Обменять содержи- мое HL с содержи- мым DE: обезопа- сить содержимое- HL Загрузить в HL со- держимое адреса А1 012 250 1 2 14 А8 LDA 072 162 014 ЗА 72 ОС Загрузить в А оши- бочный адрес (младший байт)
288 Глава 5 Продолжение Адрес ЗУ Метка Исходный код Объектный код Описание опера- ции/комментарий вооыс. шести. о g шести. 3 MOV м 176 7Е Переслать содержи- мое А в РЕ-файл (младший байт) 4 INX Н 043 23 Увеличить содержи- мое HL на 1 5 LDA 072 ЗА Загрузить в А оши- бочный адрес (старший байт) 6 163 73 7 014 ОС 260 14 ВО MOV М 176 7Е Переслать содержи- мое А в РЕ-файл (старший байт) 1 2 INX Н 043 23 Увеличить содержи- мое HL на 1 3 SHLD 042 22 Переписать следую- щий адрес в А1 4 156 6Е 5 014 ОС XCHG 353 ЕВ Обменять содержимое HL с содержимым DE 6 RET 311 С9 Переход 7 270 14 В8 012 300 14 СО WRITE LXI Н 041 21 Загрузить адрес но- мера программы 1 147 67 2 014 ОС 3 SHLD 042 22 Переписать Мх в опе- ративное ЗУ 4 160 70 5 014 ОС 6 MVI Н 076 ЗЕ Загрузить 1 (DO) 7 001 01
Схемы ввода и вывода 289 Продолжение ЗУ Метка Исходный код Объектный код Описание опера- ции/комментарий воаьм. шести. восьм. X о 0) s 012 012 012 310 1 2 3 4 5 6 7 320 1 2 3 4 5 6 7 330 1 2 3 4 5 6 7 14 14 14 С8 D0 D8 NUMBER RST2 OUT MVI А STA MVI А STA MVI A STA El HALT MVI A STA 323 000 076 377 062 000 300 076 063 062 000 300 076 307 062 000 200 373 166 076 063 062 000 300 D3 00 ЗЕ FF 32 00 со ЗЕ 33 32 00 СО ЗЕ С7 32 00 80 F6 76 ЗЕ 33 32 00 СО Установить триггер индикатора за- грузки (OUTSO) Команда с описанием режима в А Описание режима в УСАПП Инструкция команды в А Инструкция команды в УСАПП Загрузить идентифи- катор в А (иденти- фикатор— RESTART 0) Запомнить IDENT в УСАПП Разрешение преры- вания Ожидание Инструкция команды в А Инструкция команды в УСАПП
290 Глава 5 Продолжение Адрес ЗУ Метка Исходный Объектный код Описание опера- код S ции/комментарий восьм. шести. о О а о э 012 340 1 14 Е0 LHLD 052 160 2А 70 Загрузить содержи- мое Мх в HL (но- мер программы) 2 014 ОС 3 MOV А, М 176 7Е Номер программы в А 4 STA 062 32 Содержимое А в УСАПП 5 000 00 6 200 80 7 INX Н 043 23 Увеличить содержи* мое HL на 1 012 350 14 Е8 SHLD 042 22 Переслать содержи- мое Н в Мх 1 160 70 2 014 ОС 3 4 MVI А 076 154 ЗЕ 6С Загрузить в А адрес,, в котором записав младший байт ко* нечного адреса (1548) 5 6 7 СМР L JNZ 275 302 331 6D С2 D9 Сравнить содержимое А с содержимым L Если=/=0, переход по метке NUMBER; если=0, продол- жать чтение про- граммы и запись на ленту 012 360 1 2 14 F0 LHLD 012 052 150 0А 2А 68 Загрузить содержи*- мое М3 (начальный адрес) 3 014 ОС
Схемы ввода и вывода 291 Продолжение Адрес ЗУ Метка Исходный код Объектный код Описание опера- ции/комментарий восьм. шести. восьм. шести. 4 SHLD 042 22 Переписать в А2 5 160 70 6 014 ОС 7 DATA MVI А 076 ЗЕ Инструкция команды в А 012 370 14 F8 063 33 1 STA 062 32 Инструкция команды в УСАПП 2 000 00 3 300 СО 4 LHLD 052 2А Загрузить начальный адрес в HL 5 160 70 6 014 ОС 7 MOV 013 ООО 16 00 A, M STA 176 062 7Е 32 Содержимое адреса Содержимое в УСАПП 1 000 00 2 200 80 3 INX H 043 23 Увеличить содержи- мое HL на 1 4 SHLD 042 22 Переписать увели- ченный адрес в опе- ративное ЗУ из ад- реса А2 5 160 70 6 014 ОС 7 LDA 072 ЗА Загрузить начальный адресЧ-1024 ( = ко- нечный адрес) в А (младший байт) 013 010 16 08 152 6А 1 014 ОС
292 Глава 5 Продолжение Адрес ЗУ Метка Исходные ксЩ Объектны! код Описание опера- ции/комментарий восьм. шести. восьм. шести. 013 013 2 3 4 5 6 7 020 1 2 3 4 5 6 7 030 1 2 3 4 5 6 7 16 16 10 18 LOOP RST2 ENE СМР L JNZ LDA СМР Н JZ EI HALT JMP MVI А OUT HALT 275 302 025 013 072 153 014 274 312 032 013 373 166 303 367 012 076 000 323 000 166 6D С2 15 0В ЗА 6В ОС 6С СА 1А ОВ FB 76 СЗ СЗ 0А ЗЕ 00 D3 00 76 Сравнить содержимое L с содержимым А Если А#=0, переход по метке LOOP; ее* ли А=0, то про- должать Загрузить начальный адрес+1024 («ко- нечный адрес) в А (старший байт) Сравнить содержи- мое Н о содержи- мым А Если А=0, то запись на ленту подготов- лена, переход по метке ENE Если А^0, то про- должать Разрешение преры- вания Ожидание Переход по метке DATA Загрузить нуль в А Сброс триггера инди- катора загрузки Конец
Q Конец J) 012-230 Pic. 5.22. Структурная схема процедуры чтения/записи для кассетного маг- нитофона.
294 Глава 5 ход сброс соответствующих триггеров в нуль заканчивается. Для этого достаточно только обеспечить D0 = 0, так как именно этот бит переводит соответствующие триггеры в состояния 1 иО. После выполнения этих команд состояние тумблера «переда- ча/прием» считывается по команде ввода (IN) в аккумулятор, и соответствующий байт маскируется, исключая бит DO. Далее с помощью CPI-команды проверяется, равен ли бит DO единице, и если Е>0=7^=1, то по адресу 012 0178 происходит условный пере- ход JZ в подпрограмму записи информации (адрес 012 300s). Номер программы записывается в оперативное ЗУ. Далее 1 считывается в А и триггер индикатора загрузки переводится в состояние 1 с помощью команды вывода (012 310s), т. е. про- исходит переход в режим записи информации. Запись начинается с инициализации УСАПП. Указывается инструкция режима, которая состоит из одних единиц, помещен- ных в соответствующем байте (3778 по адресу 012 3138). Как сле- дует из рис. 5.15, это означает, что планируется асинхронный режим пересылки данных и скорость пересылки будет опреде- ляться 1/64 частоты, задаваемой ТхС, т. е. в данном случае 6 кГц/64~400 Гц. Длина последовательного слова равна 8 бит, так как параллельный байт данных также содержит 8 бит. Да- лее будет получен бит четности (девятый) и, наконец, за байтом данных с битом четности последуют два стоп- бита. Команда с информацией о режиме загружается в управляю- щий регистр УСАПП по команде STA (012 3148). В третьем байте этой команды биты D7 = D6=1, т. е. в соответствии со схе- мой, показанной на рис. 5.21, будем иметь ABUS 15=ABUS 14 = = 1 и поэтому получим C(H)/D(L) = 1 и CS(L)=0, что при активном сигнале WR(L) действительно приведет, как следует из рис. 5.16, к загрузке управляющего регистра информацией, необходимой для реализации пересылки данных. Теперь в аккумулятор А по команде MVI (012 3178) загру- жается слово инструкции команды с содержимым 0011001U (0638 по адресу 012 3208), т. е. тем самым дается разрешение на пересылку, осуществляется сброс ошибок в нуль и выдается запрос на пересылку. ____ ______ Это позволяет использовать выходы DTR и RTS для управ- ления кассетным магнитофоном, однако на последующих этапах такой режим работы не применялся из-за особенностей конкрет- ного механизма магнитофона. В инструкции команды разре- шение УСАПП на пересылку данных в магнитофон кодируется с помощью бита D0=l. После этого можно перейти к пересылке данных, которая начинается с загрузки идентификатора 3078 (012 3258). Этот идентификатор представляет собой RST0, который в данной
Схемы ввода и вывода 295 системе обработки данных с МП 8085А в качестве команды не применяется. Далее загружается идентификатор и записывается в УСАПП. Третий байт команды STA по адресу 012 330s заполняется чис- лом 2008=1000 00002, в результате чего получаем ABUS15=1 и ABUS14 = C, а это при наличии активного сигнала WR(L) озна- чает, что действительно данные записываются с шины дан- ных в УСАПП (CS(L)=0, C(H)/D(L)=0 и WR(L)=0, см. рис. 5.16). Затем дается разрешение микроЭВМ на прерывание с по- мощью команды El (012 331s) и осуществляется переход в ре- жим HALT. Теперь УСАПП генерирует последовательный на- бор битов и посылает его через ЧМн-модулятор в кассетный магнитофон. По окончании этой операции УСАПП передает сиг- нал TxRDY, который заканчивает прерывание (INTR2). Далее микроЭВМ считывает вектор RST2, передает управление по адресу 000 020в, считывает здесь команду перехода по адресу 014 043s (команда RET) и снова передает управление в программу по адресу 012 (3324-1) в (метка RST2). Следует отметить, что по адресу 000 020s запрограммирована фиксиро- ванная команда перехода по адресу 014 043s. При выполнении указанных переходов в действительности ничего не происходит и они необходимы только для того, чтобы можно было снова вернуться в программу из режима HALT, причем по адресу, превышающему на 1 адрес ячейки, где 'находится команда HALT. После этого инструкция команды снова загружается в аккумулятор А и переписывается в управляющий регистр УСАПП. Далее считывается номер программы (012 340s), кото- рый пересылается в кассетный магнитофон, причем эта опера- ция повторяется до тех пор, пока не будет передана вся адрес- ная информация для файла данных в целом. После вывода этой адресной информации программа по команде условного перехода (JNZ) выполняется, начиная с ячейки 020 356s, и продолжаются операции вывода данных байт за байтом, начиная с начального адреса, из ЗУ на ленту магнитофона. При выводе каждого байта данных (программный цикл) адрес увеличивается на 1 и производится проверка на до- стижение конечного адреса. Если конечный адрес не достигнут, то программа записи продолжается далее. По адресу 013 026s микроЭВМ переходит при каждом сбросе в HALT-режим, т. е. ждет до тех пор, пока УСАПП не закончит вывод соответствую- щего байта на магнитную ленту. По окончании этой операции УСАПП выдает сигнал TxRDY, который осуществляет переход к вектору RST2 (013 0278). Для микроЭВМ это служит указа- нием начать выборку следующего байта данных из ЗУ в УСАПП для последующей пересылки на ленту.
296 Глава 5 По достижении конечного адреса микроЭВМ переходит из ячейки 0130228 с командой условного перехода JZ в ячейку 013 0328, где в регистр А загружается нуль. Команда вывода (OUT), которая считывается по адресу 013 0348, сбрасывает в нуль триггер индикатора загрузки и соответствующий свето- диод гаснет. После этого можно остановить кассетный магнито- фон, так как весь файл теперь находится на магнитной ленте. При работе в режиме чтения программа сначала устанавли- вает, что тумблер «передача/прием» не включен, т. е. находится в состоянии 0, в результате чего условный переход JZn из ячей- ки 012 0178 уже не происходит и программа выполняется далее, переходя в подпрограмму чтения. Процесс чтения начинается с загрузки начального адреса PE-файла (РЕ — ошибка по чет- ности) (014 3008), а затем выполняется команда по адресу 014 156/1578. В случае обнаружения ошибок по четности в этот файл вводятся те адреса ЗУ, в которых были зафиксированы указанные ошибки. Затем в аккумулятор А вводится то же самое слово с опи- санием режима, что и в случае записи, и это слово передается в управляющий регистр УСАПП. При адресации команды запи- си биты D7 и D6 в третьем байте должны быть равны 1 (см. команду в ячейке 0120328). После этого передается инструкция команды. Здесь бит D0=#0 и тем самым в УСАПП сообщается, что можно принять байты данных с ленты кассетного магнитофона. Далее триггер разрешения прерывания в микроЭВМ перево- дится в состояние 1 и микроЭВМ переходит в HALT-режим (012 0438). Теперь можно запустить кассетный магнитофон и УСАПП начинает собирать один байт из битов, поступающих с магнитной ленты. По окончании формирования байта проис- ходит прерывание, при котором активируется вектор прерывания RST1, и с помощью различных переходов команды RET из ячей- ки 014 0408 программа выполняется вплоть до адреса 012 0448 (метка RST1). Обратный переход из HALT-режима в програм- му происходит точно так же, как и в режиме записи байтов данных на ленту. Байт, сформированный в УСАПП, передается затем в акку- мулятор А микроЭВМ, где он сравнивается с другим байтом, чтобы выяснить, не является ли он идентификатором. Если ответ отрицательный, программа совершает обратный переход в ячей- ку 012 0358 (метка IDENT), после чего процедура поиска по- вторяется до тех пор, пока не будет найден идентификатор. Далее программа совершает условный переход JNZn из ячейки 012 0548, где она ожидает прихода следующего байта. После приема этого байта происходит проверка номера программы. Если этот номер не совпадает с номером, который был введен
Схемы ввода и вывода 297 в оперативное ЗУ, то программа возвращается в исходную ячейку 012 035s (метка IDENT). Проверка идентификатора и номера программы происходит также и для адресов начала и конца массива данных. Если эти данные, полученные с магнитной ленты, не совпадают с теми, которые хранятся в оперативном ЗУ, то микроЭВМ продолжает поиск по адресам 014 1478 — 014 1538. При совпадении програм- ма передает управление по команде условного перехода JNZn (ячейка 012 1448), переводя в состояние 1 триггер индикатора загрузки с соответствующим светодиодом (012 1518). Светодиод загорается, и мы видим, что микроЭВМ обнаружила на ленте требуемый файл данных. Программа продолжается с передачей инструкций режима работы и команды, с помощью которых с магнитной ленты считываются последующие байты данных, ко- торые затем переписываются в определенный участок ЗУ, выде- ленный с помощью адресов начала и конца. Каждый раз при выполнении этой операции в программе происходит переход в подпрограмму проверки РЕ (см. 012 2038). Программа считывает слово состояния, при этом биты D7 и D6 в третьем байте команды чтения должны быть равны 1 (см. ячейку 012 2318). Далее бит D3 маскируется по команде ANI и сравнивается с таким же битом в команде сравнения с непосредственным опе- рандом CPI (012 2368). В случае совпадения программа продол- жается далее и после команды RET (012 2438) возвращается в подпрограмму чтения. Если же будет обнаружена ошибка, то после условного вызова CZn (012 2408) произойдет переход в ячейку 012 2448. Регистры HL и DE при этом обмениваются содержимым для того, чтобы сохранить содержимое регистра HL, после чего ошибочный адрес загружается для последую- щего сброса в РЕ-файл. По команде INX.H в ячейке 012 261» адрес файла сразу же получает приращение для перехода к сле- дующей ошибке по четности. По окончании этих операций вы- полняется команда RET с переходом в ячейку 012 2438, из кото- рой следует RET в ячейку 012 2068. Указанные адреса находятся в стеке. Далее программа продолжается проверяя достижение конеч- ного адреса. Если этот адрес достигнут, то программа по команде условного перехода JNZ будет продолжаться после ячейки 012 2218. При этом обнуляется регистр А и по команде вывода (0122268) триггер индикатора загрузки сбрасывается в нуль, в результате чего загорается соответствующий светодиод, ука- зывая, что достигнут конец файла данных, с которого произво- дилось считывание информации. Далее микроЭВМ переходит в HALT-режим (останов) по адресу 012 2308 и выполнение про- граммы заканчивается.
298 Глава 5 5.12. Адреса рестартов Для инициирования прерываний в предыдущих разделах использовались два RST-вектора. Как известно, при выполнении команд RSTn происходит переход по рестарт-адресу, конкретное значение которого определяется индексом команды RST, т. е. п. Рестарт-адреса всегда равны 8Хп и начинаются с адреса ООО 0008. Восьмерич- ный адрес ячейки Шестнадца- теричный адрес ячейки Восьме- ричная команда Шестнад- цатеричная команда Переход в: Прерыва- ние 000-000 00-00 303 СЗ JMP START 1 1 100 40 100 2 2 014 00 014 3 3 000-010 ОО-О8 303 СЗ JMP INTR1 1 9 040 40 040 2 А 014 ОС 014 3 В 000-020 00-10 303 СЗ JMP INTR2 1 1 043 23 043 2 2 014 ОС 014 3 3 000-030 00- 18 303 СЗ JMP INTR3 1 9 046 26 046 2 А 014 ОС 014 3 В 000-040 00-20 303 СЗ JMP INTR4 1 1 051 29 051 2 2 014 ОС 014 3 3 000-050 00-28 303 СЗ JMP INTR5 1 9 054 2С 054 2 А 014 ОС 014 3 В 000-060 00-30 303 СЗ JMP INTR6 1 1 057 2F 057 2 2 014 ОС 014 3 3 000-070 00-38 303 СЗ JMP INTR7 1 9 062 32 062 2 А 014 ОС 014 3 в I Рис. 5.23. Команды перехода в адрес рестарта, которые передают управле- ние в ячейки оперативного ЗУ с адресами 014ХХХ8 (00XXi«). На рис. 5.23 приведена сводная таблица этих адресов с ин- формацией по соответствующим командам перехода. Здесь указаны команды перехода JMP, которые передают управление
Схемы ввода и вывода 299 в оперативное ЗУ 014 ХХХ8, откуда с помощью соответствующих команд перехода можно попасть в обслуживающую подпрограм- му обработки запроса на прерывание. RST0 означает в действительности сброс в нуль, при кото- ром указатель стека необходимо заполнить по команде LXI,SP, чтобы в дальнейшем не забыть об этом сбросе. Для каждой про- граммы под указатель стека выделяется определенная зона ЗУПВ, например 408 ячеек с адресами 014 1 008—014 2008. Ука- затель стека начинает заполняться с адреса 014 0408, причем процесс заполнения продолжается до ячейки 014 1778, если тре- буется временно запомнить большее число байтов данных. 5.13. Ввод программ в ЗУ В системе, описанной в гл. 4, программа вводится с по- мощью тумблеров данных, которые располагаются на панели ПРУ. Восьмеричные числа, которые указываются в текстах про- грамм, преобразуются в двоичные коды с помощью тумблеров данных так, как показано на рис. 5.24. Адрес, по которому дол- жен храниться первый байт, вводится аналогичным образом. При записи программы следует перевести ПРУ в режим за- писи с помощью тумблера выбора режима работы. При нажатии клавиши LOAD выбирается адрес, после чего, нажимая клавишу STEP, можно записать данные в соответст- вующую ячейку ЗУ. При нажатии клавиши STEP адресный ре- гистр ПРУ получает единичное приращение. Затем с помощью тумблеров данных вводится следующий байт и снова нажимает- ся клавиша STEP. В результате вводится второй байт и процесс повторяется до тех пор, пока не будет введена вся программа. Преобразование восьмеричных чисел в двоичные вначале происходит довольно медленно, однако после приобретения дос- таточного опыта эта операция выполняется быстро и не вызы- вает никаких затруднений. Контроль заполнения ячеек ЗУ ПРУ производит в режиме чтения. При этом мы снова устанавливаем начальный адрес с помощью соответствующих тумблеров, нажимаем клавишу LOAD и индикаторы на светодиодах высвечивают содержимое выбранной ячейки ЗУ. По окончании контроля мы нажимаем клавишу STEP и светодиоды высвечивают содержимое следую- щей ячейки ЗУ, при этом номер адреса высвечивается теми све- тодиодами, которые находятся над тумблерами адреса. Все эти операции повторяются до тех пор, пока не будут проверены все ячейки ЗУ. После этого блокируем ЗУПВ, в котором находится программа, деактивируя сигнал WE (разрешение записи), или, другими словами, переводим переключатель записи ЗУПВ/ПЗУ-
300 Глава 5 Рис. 5.24. Установка тумблеров адресов и данных, которая обеспечивает восьмеричные числа, необходимые для адресации и кодирования команд и операндов в программах. имитатора в положение 0. По окончании этих операций можно начать тестирование и отладку введенной программы. Исследуемые программы располагаются в секторах ЗУ, кото- рые реализованы в виде СППЗУ. Это означает, что если требу- ется ввести эти программы в ЗУПВ/ПЗУ-имитатор, то CS(L)-вы- вод соответствующей ПЗУ-секции нужно соединить с CS(L)-bh-
Схемы ввода и вывода 301 Рис. 5.25. Тестирование и отладка происходят в ПЗУ/ЗУПВ-имитаторе» CS(L)-вывод СППЗУ, где записаны программы, в ходе тестирования и от- ладки должен быть соединен с CS(L)-выводом ПЗУ/ЗУПВ-имитатора та^ как показано на этом рисунке. водой на корпусе ЗУПВ/ПЗУ-имитатора. Так как СППЗУ соеди- няется с микроЭВМ при помощи разъема с двухрядным распо- ложением выводов типа DIL, то такое присоединение можно реализовывать довольно простым способом, соединяя проводни- ком соответствующую CS(L)-клемму корпуса DIP с CS-выво- дом ЗУПВ/ПЗУ-имитатора. Указанное соединение можно выполнить и с помощью пере- ключателя, который предусмотрен в схеме ЗУПВ/ПЗУ-имитато- ра, используемого в системе, которая была описана в гл. 4 (рис. 5.25). Оба варианта осуществимы только в том случае, когда объем программы не превышает 1К8 бит. Ввод программы с помощью тумблеров данных является довольно трудоемким процессом, однако затраченные усилия обычно окупаются. Практика показывает, что за 45 мин можно ввести и проверить 300 байт текста. Это время оказывается намного меньше того, которое тратится на анализ какого-либо проекта и последующее адекватное программирование получен- ного алгоритма. Разумеется, из этого анализа и последующего программирования мы извлекаем много полезной информации
302 Глава 5 Программа Пересылка в начало программы Оператор/Константа/Адрес Запол- нить в Переход в Запол- нить в Оператор Запол- нить в Оператор Запись единиц 014 100 303 101 100 102 011 014 150 000 151 000 014 152 000 153 004 (1024 байт) Передача 014 100 303 101 000 102 010 014 150 Начальный 151 адРес файла 014 152 Конечный 153 1дРес файла Загрузка СППЗУ 014 100 303 101 000 102 010 014 150 Начальный 151 адРес файла Конечный адрес равен начальному адресу-}-1024 Проверка СППЗУ 014 100 303 101 200 102 010 014 150 Начальный 151 адЯес файла Конечный адрес равен начальному адресу+1024 Загрузка магнито- фона 014 100 303 101 000 102 012 014 150 Начальный адрес lbl файла 014 152 Конечный 153 1дРес файла Чтение ленты' магни- тофона 014 100 303 101 000 102 012 014 150 Начальный 151 адРес файла 014 152 Конечный 153 адРес файла Рис. 5.26. Адреса, которые необходимо запомнить до запуска программ, и затраченное время при этом также окупается, тем более что здесь мы имеем по истечении определенного времени не «инте- реснук» игровую ситуацию, а вполне определенный научный результат. С другой стороны, при программировании игровых
Схемы ввода и вывода 303 Оператор/Конст анта/Адрес Заполнить в Оператор Заполнить в Оператор Заполнить в Оператор 014 154 Начальный 155 адРес 014 154 Начальный 155 адрес нового файла Перед запуском сбросить в нуль 8255А Адрес ошибки читать в: 014 156 157 Перед запуском сбросить в нуль 8255А 014 147 Номер программы 014 040 311 (RET) Z/O-переключатель в по- ложении Z 014 043 311 (RET) Z/O-переключатель в по- ложении Z 014 147 Номер программы 014 040 311 (RET) Z/O-переключатель в по- ложении 0 014 043 311 (RET) Z/O-переключатель в по- ложении 0 рассмотренных в этом разделе. Запуск производится посредством сброса в нуль или рестарта с нулевым адресом. задач мы занимаемся не только компьютерными играми как таковыми, но и реальным анализом таких проектов автоматиза- ции, как организация управления игрушечной железной дорогой с помощью ЭВМ, автоматизация центрального отопления и т. д.
804 Глава 5 В этих ситуациях с помощью простого отладочного комплекса с ПРУ можно получить совершенно неожиданные результаты. На рис. 5.26 приведена сводная таблица начальных (исходных) данных, которые требуется ввести в ЗУПВ до начала выполне- ния программ, рассмотренных в данной главе. 5.14. Синтез и распознавание речи Как следует из предыдущих глав, в нашем распоряжении имеются самые разнообразные средства для осуществления свя- зи с системой обработки данных. Однако среди них отсутствуют средства для обмена информацией с системой обработки дан- ных посредством устной речи (голоса). В течение последних лет были предприняты энергичные уси- лия по созданию специальных схем для осуществления связи этого вида. Эти схемы реализуют синтез (восстановление) речи и ее распознавание. При вводе и выводе данных с помощью голоса мы имеем в виду речевой ввод-вывод. При таком способе связи наибольшие трудности возникают при решении проблемы распознавания речи. Существует несколько методов синтеза речи. Здесь можно упомянуть о записи на магнитную ленту, когда на ленту через микрофон записываются определенные слова или тексты. ЭВМ может обращаться к магнитофону и запрашивать у него разре- шение на воспроизведение специального текста, передаваемого через динамик и усилитель. Аппаратура, необходимая в этом случае, состоит из довольно большого числа компонентов, поэто- му является дорогой. Другим вариантом носителя информации, применяемым вме- сто магнитной ленты, является ПЗУ. Тексты преобразуются в дискретные звуковые сигналы, после чего они запоминаются в ПЗУ. Эти тексты можно снова извлечь, выбирая последова- тельно соответствующие адреса ПЗУ и считывая наборы битов с помощью цифро-аналогового преобразователя. Такой метод синтеза речи, обычно называемый кодированием по форме вол- ны, также не очень привлекателен из-за чрезвычайно большого числа ячеек ЗУ, которые требуются для качественного воспроиз- ведения звука. Третьим методом, который можно использовать для синтеза речи, является фонемное кодирование. Фонемы представляют собой гласные и согласные звуки, из которых состоит любое слово. Генерируя фонемы по отдельности и затем комбинируя их, можно формировать слова. Если закодировать отдельные фонемы, то их комбинации можно хранить в ЗУ. Речь, восста- новленная по этому методу, имеет довольно низкое качество, поскольку такие ее существенные характеристики, как динами- ка, интонация и т. д., игнорируются. Привлекательной особенно-
Схемы ввода и вывода 305 стью фонемного кодирования _____________ R ______ р является то, что речь можно вое- 1 1 станавливать даже при низких \ скоростях передачи данных по- 1 рядка 70 бод. С== /ЫХ По-видимому, наилучшим яв- / ляется метод синтеза речи, из- / вестный под названием «модели- 4? i 7 рование речевого тракта», кото- рый используется многими фир- Рис- 5-27- RC-фильтр. мами — изготовителями соответ- ствующего оборудования, в частности фирмой Philips (система МЕА 8000). Эта система гарантирует высокое качество восста- новления речи, обеспечивая довольно объемный словарь при умеренной стоимости. Моделирование речевого тракта представляет собой линей- ный прогнозирующий метод кодирования, для которого в специ- альной литературе используется термин LPC-метод (Linear Pre- dictive Coding Method — метод линейного предсказания). При синтезе речи по LPC-методу требуемые волновые формы восста- навливаемых звуковых сигналов получаются с помощью сигна- ла, волновая форма которого содержит высшие гармоники. Эти гармоники выделяются системой фильтрующих устройств. Резо- нансная частота и ширина полосы частот этих фильтров управ- ляются с помощью цифровых схем. Такие фильтры называются выборочными или дискретными нестационарными фильтрами. Проиллюстрируем этот метод на простом примере. Если нуж- но восстановить волновую форму с экспоненциальными конту- рами, то это можно сделать, подавая импульсное напряжение на вход RC-цепочки так, как показано на рис. 5.27. Требуемая вол- новая форма появляется в этой схеме на емкости. Подобный сигнал можно также получить и по методу дискре- тизации (дискретной выборки) (рис. 5.28). В дискретные момен- ты времени Тп определяются мгновенные значения (амплитуды) напряжений, которые затем запоминаются в ЗУ. Мгновенные амплитуды напряжения, согласно математической модели, нахо- дятся в форме полинома. Каждый член полинома вносит вклад в волновую форму, пропорциональный коэффициенту при нем. Для восстановления импульсов напряжения с экспоненциальны- ми формами применяется фильтр, показанный на рис. 5.29. Если с помощью такого фильтра произвести дискретную вы- борку в последовательные моменты времени от То до Тэ включи- тельно, то в различных узловых точках схемы появятся напря- жения, указанные в таблице на рис. 5.30. Аналогичным образом восстанавливается требуемая волно- вая форма и при синтезе речи. Однако коэффициенты полинома
306 Глава 5 Степень е Тп U вых Го Т, т2 т3 т4 TS г6 т7 тв Т9 0 0,5 0, 75 0,875 0, 9375 0,96875 0,984375 0,9921875 0,99609375 0,998046875 (а) Рис. 5.28. Генерация волновой формы по методу дискретной выборки. а — значения UBbIX в моменты времени Т<—Т»; б — форма волны. вых и вых (Тп"!) Рис. 5.29. Фильтр, работающий по методу дискретной выборки (рекурсив- ный фильтр).
Схемы ввода и вывода 307 (ряда Тейлора) не являются здесь постоянными, как в случае экспоненты, а изменяются в зависимости от вида восстанавли- ваемой волновой формы. тп йвх(Т„) 1/2/йвк(Тп)1 ЯвЫхСТп) & вых (?П 1) 1/Я0вт(Т„-1)1 То 0 0 0 0 0 Т1 1 1/2 0,5 О 0 Т2 1 1/2 0,75 0,5 0,25 Т3 1 1/2 0,875 0,75 0,375 т4 1 1/2 0,9375 0,875 0,4375 Т5 1 1/2 0,96875 0,9375 0,46875 Тб 1 1/2 0,984375 0,96875 0,484375 Т7 1 1/2 0,9921875 0,984375 0,4921875 тв 1 1/2 0,99609375 0,9921875 0,49609375 Т9 1 1/2 0,998046875 0,99609375 0,498046875 Рис. 5.30. Амплитуда напряжений в различных узлах рекурсивного фильтра (см. рис. 5.29), соответствующих моментам времени То—Т9. Таким образом, метод выборочной дискретизации обеспечи- вает сигналы, соответствующие требуемым волновым формам. Коэффициенты полинома, которые необходимо фиксировать при каждой последующей подгонке волновой формы, требуется за- поминать и записывать в группу ячеек ЗУ с последовательными адресами. Считывание, суммирование и умножение коэффициен- тов также реализуются полностью на дискретной основе. Если в систему поступает аналоговый сигнал, то сначала он с по- мощью аналого-цифрового преобразователя преобразуется в дис- кретную форму. Если требуется получить на выходе аналого- вую форму, то цифровая информация снова преобразуется в ана- логовый сигнал с помощью цифро-аналогового преобразователя. Для воспроизведения речевого сигнала с шириной полосы частот 4 кГц достаточно использовать от 8 до 10 LPC-коэффи- циентов. Для обеспечения более высокого качества воспроизве- дения речи ширину полосы частот следует увеличить до 5 кГц, т. е. использовать 12 LPC-коэффициентов. На рис. 5.31 проиллюстрирован принцип действия схемы, мо- делирующей человеческий голос. Комбинация из периодического сигнала, который отобража- ет высоту тона голоса, и апериодического сигнала, отображаю- щего шум, подается на вход серии фильтров, управляемых с по- мощью цифровых схем. Каждый фильтр выделяет определенный пик в частотном спектре, который соответствует частоте форманты в исходном речевом сигнале. Фильтры управляются по двум параметрам, а именно частоте (F1...F4) и ширине полосы частот (В1...В4). Характеристики выходного сигнала определяются высотой тона,
308 Глава 5 .амплитудой и качеством настройки четырех фильтров. Сумми- руя периодически все параметры (в моменты времени выбороч- ной дискретизации), можно получить хорошую копию речевого сигнала. Интенсивность Рис. 5.31. Электронное моделирование человеческого голоса. Приемлемое качество обеспечивается в том случае, когда для кодирования частот первых двух низших формант (Fl, F2) используется по 5 бит, для частоты третьей форманты (F3) — 3 бит и для частоты четвертой форманты (F4) — 0 бит, т. е. частота четвертой форманты имеет фиксированное значение. Каждая ширина полосы частот (В1—В4) кодируется двумя би- тами. Оба амплитудных кода можно скомбинировать в один код из 4 бит. В ЗУ хранятся две различные величины амплитуды. В слу- чае когда в речи наблюдается переход от нормальной громкости к пониженной (отсутствие голоса), амплитудный параметр сбра- сывается в нуль с помощью интерполяционного алгоритма и в тот же момент амплитуда, соответствующая тихому (слабому) звуку, медленно увеличивается до определенного предела. Ниже мы еще вернемся к интерполирующему алгоритму и рассмотрим его подробнее. Хотя длительность кодового кадра ограничивается временем 25 мс, часто выбирается и бблыпая длительность; другие кадры могут воспроизводиться и быстрее. В результате фиксированная скорость воспроизведения кадров составляет, например, 8, 16, 32 и 64 мс, т. е. для описания одного кадра потребуется 4 бит.
Схемы ввода и вывода 309 Наконец, нужно еще дать определение параметра высоты тона. Если исходить из кратности в 8 бит, то, так как мы уже использовали 27 бит, к ним можно добавить только 5 бит, чтобы получилось число 32, кратное 8. Однако для прямого пред- ставления параметра высоты тона 5 бит недостаточно. К счастью, высота тона сильно не меняется во времени, поэтому вместо высоты тона можно закодировать только разность по вы- соте тона, для чего 5 бит будет вполне достаточно. При этом по- требуется предварительно загрузить в синтезатор начальное зна- чение высоты тона. Параметры, соответствующие различным моментам времени выборочной дискретизации, хранятся в ПЗУ. Таким образом, для каждого временного интервала (кадра) мы должны хранить в ПЗУ в табличной форме (4 байт) следующие закодированные величины: 1а) частоты настройки для двух нижних формантных фильт- ров (по 5 бит для каждого); 16) частоты настройки для третьего формантного фильтра (3 бит); 2) ширину полосы частот формантных фильтров (по 2 бит на каждую); 3) амплитуду (4 бит); 4) высоту тона (8 бит отдельно); 5) изменение частоты высоты тона (5 бит); 6) длительность кадра (промежуток времени между двумя дискретными выборками) (2 бит). D7 D0 —Г~|—।—I—।—I—Г—I—।—।—I—I—I—I—I——I—I—Г—I—[—1—I—[—1—I—[—I—।—I—г В1 В2 ВЗ В4 F3 F2 F1 Мнтенсивн.1 FD ДГ __1—1 I 1 I I I I I—I—I—I—I—I_1 I—I I I I I I I I I I 1 I L Байт J_____________________________Байт 2-Байт 3 I Байт 4 F - частота форманты В - ширина полосы частот FD-длительность кадра f0 - высота тона &f-вариация высоты тона Рис. 5.32. Формат речевого кадра. Формат закодированного речевого кадра показан на рис. 5.32. Для обработки сигналов используются стандартные цифровые ИС, при этом запоминающие элементы фильтра Т регистрируют информацию, относящуюся к речевым сигналам, в виде набора битов. В результате величина выходного сигнала также выра-
310 Глава 5 Рис. 5.33. Резонатор второго порядка с тремя умножителями. жается в цифровой фор- ме, поэтому требуется применять ЦАП, который преобразует набор битов; в аналоговый сигнал. До- полнительная интерполя- ционная логика согласу- ет переходы между по- следовательными значе- ниями сигналов (между двумя кадрами). Цифро- вая обработка парамет- ров речевых сигналов производится при часто- те синхроимпульсов 8 кГц. В пределах одного пери- ода на частоте 8 кГц. производится восьми- кратная интерполяция^ поэтому частота выборочной дискретизации достигает 64 кГц. ПЗУ и интерполяционная логика, т. е. схемы, которые с по- мощью данных параметров восстанавливают волновую форму в пределах одного кадра, помещаются на одном кристалле. Цифровые фильтры, выполненные в виде резонаторов второго порядка, состоят из трех умножителей вместо двух, обычно при- меняемых в таких фильтрах. В моменты выборочной дискрети- зации эти умножители выполняют обработку полиномов для промежуточных сумм с коэффициентами, которые находятся в ЗУ в двоичной форме. Так, в частности, обрабатываются па- раметры F и В. Фильтр с тремя умножителями приведен на рис. 5.33. Ука- занные на рисунке два параметра: формантная частота и шири- на полосы частот могут быть представлены с помощью одной переменной. Для расширения области применения синтезатора в нем час- то предусматривается возможность воспроизведения музыки, в частности, когда синтезатор применяется в игрушках. Вариа- ции высоты тона для музыкальных мелодий можно программи- ровать без всяких промежуточных стадий. Для обеспечения бо- лее приятного звучания обычно используются два дополнитель- ных резонатора с высоким значением добротности Q. Подобные высокие значения Q в речи не проявляются и поэтому при соз- дании формантных фильтров не используются. По этой причине более низкие форманты выбираются так, чтобы между ними на- блюдалось перекрытие в частотном диапазоне 400—1100 Гц.
Схемы ввода и вывода 311 В этой области формантные частоты должны иметь интервал, равный 12f2, для того чтобы можно было обеспечить соответст- вующую шкалу настройки по тону. Синтезатор МЕА 8000 фирмы Philips В этом речевом синтезаторе на кристалле находится генера- тор, который вырабатывает синхросигналы с частотой 3,5— 4,0 МГц (номинальная частота равна 3,84 МГц). Генератор ста- билизирован кварцем, который подключается снаружи. Внутри схемы эта частота делится на 3, для того чтобы сформировать для системы синхросигналы с частотой 1,28 МГц. Буферизованный выход позволяет использовать синхросигналы для управления другими схемами, например МП. 8 кГц-элементы выборки подаются из цифрового фильтра на вход цифро-аналогового преобразователя. Для вычисления пара- метров семи промежуточных выборок применяется метод линей- ной интерполяции. Это означает, что здесь реализуется частота выборки (дискретизации), равная 64 кГц, в результате чего фильтрация на аналоговом выходе происходит достаточно просто. В цифро-аналоговом преобразователе реализуются два мето- да обеспечения 8-разрядной точности (рис. 5.34). Выход связан с двумя параллельными источниками тока с открытым стоком (I и 161). Рис. 5.34. Выходная схема с интерполятором и ЦАП. Младшие и старшие четыре бита на выходе интерполятора используются независимо для управления шириной импульса обоих источников тока. Устройство управления В реальных условиях синтезатор речи можно использовать только с помощью схемы, показанной на рис. 5.35, которая со- единяет его с 8-разрядной микроЭВМ. Для микроЭВМ синтеза- тор является обычным устройством вывода информации, кото- рое имеет входной 32-разрядный регистр, регистр команд и ре-
312 Глава 5 гистр состояний. С помощью управляющих сигналов CE(L), R(L)/W(H) и W(L) производится выбор кристалла и регистра для хранения требуемых данных. Бит состояния можно считы- вать с помощью центрального процессора. Рис. 5.35. Блок-схема МЕА8000 (фирма Philips). Устройство управления решает три главные задачи. Во-пер- вых, оно должно определять, какой именно речевой элемент необходимо восстановить и, кроме того, в каких ячейках ПЗУ находятся параметры этого элемента. Это устройство должна считывать данные из ПЗУ и передавать их в требуемом форма- те на вход синтезатора. Четыре байта данных для каждого сле- дующего кадра должны поступать не непосредственно через микроЭВМ. Входной буфер может хранить временно толька один кадр данных. Ввод новых данных во входной буфер для следующих друг за другом речевых элементов регулируется с помощью процедуры прерывания. Блок-схема МЕА8000 показана на рис. 5.35, а вариант синте- затора речи — на рис. 5.36. Отметим, что с помощью ПЗУ на 2 байт можно обеспечить словарь, состоящий из 25 слов (15 с)„ Распознавание речи Проблема распознавания речи относится пока к облает» научных исследований. Некоторые фирмы-изготовители разра- ботали устройства, которые, однако, пока предназначены для удовлетворения внутренних нужд, а не для широкой продаж» в странах ЕЭС. Эти устройства обеспечивают словарь от 40 до 100 слов, а цены на них лежат в пределах нескольких тысяч долларов за экземпляр.
Схемы ввода и вывода 313 При распознавании речи акустический сигнал обрабатывает- ся с помощью анализатора спектра; полученные параметры сиг- нала преобразуются с помощью АЦП. Полученный код сравни- вается с опорным набором битов, и в случае совпадения гене- рируется сообщение, понятное для ЭВМ. На рис. 5.37 приведена блок-схема системы распознавания речи. Сначала нужно «научить» эту систему понимать слова, Рис. 5.36. Минимальная конфигурация системы речевой связи. Рис. 5.37. Система распознавания речи. Процессор сигналов обеспечивает формирование кадра слова.
314 Глава 5 помещая в нее опорные наборы битов, которые обсуждались в предыдущем разделе, посвященном воспроизведению речи. Рис. 5.38. Синтезатор речи со стандартным словарем на 119 слов. Схема разработана фирмой Telesensory System (США) и стоит 395 долл. В схеме применяется кодирование формы волны. В современных схемах, используемых для распознавания речи, между словами требуется соблюдать паузы в 100—200 мс, которые варьируются в зависимости от фирмы-изготовителя. Группа слов не должна превышать по длительности звучания время в 3 с. Фирма Centrigram Corp, использует при распознавании речи метод, согласно которому каждое слово сначала нормируется относительно фиксированного интервала времени, что позволяет компенсировать вариации по скорости реальной речи.
Глава 6 ЯЗЫКИ ПРОГРАММИРОВАНИЯ высокого УРОВНЯ —БЕЙСИК 6.1. Введение Как известно, телеграфные сообщения, состоящие из буквен- но-цифровых знаков, при передаче требуется кодировать. Используемый для этой цели код Морзе является замкнутым ко- дом с довольно ограниченной сферой применения. Хотя он из- вестен далеко не каждому, однако с помощью микроЭВМ мож- но легко выполнить преобразование алфавитно-цифровых сим- волов в код Морзе, и наоборот. Проблемы, возникающие при использовании кода Морзе, являются характерными для процесса связи с ЭВМ на машин- ном языке. ЭВМ имеет свой собственный язык, закодированный в виде групп битов, состоящих из нулей и единиц, и не вос- принимает никаких буквенно-цифровых символов, пока эти символы не будут переведены на язык, понятный ОС ЭВМ. То же самое имеет место и для логических понятий, которы- ми пользуется ЭВМ. Они являются чрезвычайно простыми, а это означает, что при вводе команд в ЭВМ человек должен описывать их очень подробно. Мы привыкли к более сложным понятиям и нам часто мешает то обстоятельство, что ЭВМ не может «понять» наше задание, выраженное с помощью простых команд. В первые годы развития ЭВМ общение с ними было исклю- чительной прерогативой отдельных специалистов, которые созда- вали машинный язык. Этот «языковой барьер» стоял годами на пути развития программирования для ЭВМ, пока не появились компилирующие программы, которые позволили общаться с ОС на человеческом языке, вернее, вначале на его научном диалек- те, а затем и на языке с тем уровнем сложности, который харак- терен для человеческого общества в целом. Теперь не требует- ся писать сотни отдельных команд, только для того чтобы на- печатать какое-то одно слово, — для этой цели используется всего лишь одна команда PRINT X. Для решения научно-техни- ческих задач используются такие языки программирования, как Алгол-60, Алгол-68 и Фортран. Для административных и бухгалтерских расчетов используется язык Кобол. Эти языки 315
316 Глава 6 программирования применяются в соответствующих областях знания и в настоящее время. В последние годы разработан язык программирования Бей- сик, который отличается простотой и находит широкое примене- ние в небольших системах типа персональных компьютеров, снабженных МП, гибкими дисками, принтером или видеодисп- леем. Название Бейсик является сокращением от слов Beginners All Purpose Symbolic Instruction Code (мноцелевой язык сим- волических команд для начинающих); этот язык программиро- вания создан группой авторов из Дартмутского колледжа (США) для одной из систем, работавшей в режиме с разделе- нием во времени. Новым языком программирования является также Паскаль, названный в честь французского философа и ученого Паскаля, который жил в XVII в. В повседневной жизни мы имеем дело со сложными коман- дами и при этом обычно не осознаем, что эти команды являют- ся в действительности комбинациями простых команд. Поясним эту мысль примером. Мастер-плотник, узнав, что запас гвоздей кончился, дает своему ученику следующее указание: «принеси гвозди». Это указание является сложной командой, так как в нем не уточняется, какого типа нужны гвозди, сколько их тре- буется и где их можно взять. Однако ученик знает, что речь идет о гвоздях определенного типа, что нужно взять пакет гвоз- дей и что гвозди находятся на складе. Для расчетов на складе используется накладная. В этом примере ученик играет роль предварительно запро- граммированного объекта. У него имеется подпрограмма, в ко- торой подробно описаны все специальные операции. Вполне вероятно, что другой исполнитель этого указания, скажем снаб- женец предприятия, также выберет эту же подпрограмму. Можно также представить себе, что мастер дает указание «купить гвозди» в отдел снабжения. При этом, естественно, бу- дет выбран другой путь решения задачи. После получения та- кого указания снабженец начнет с изучения рынка и выяснит, какая фирма продает гвозди высокого качества по приемлемой цене. Скорее всего он закажет партию пакетов этих гвоздей, которая будет поставлена в один прием. При этом ученик плот- ника не будет принимать никакого участия в операции пересыл- ки пакетов. Аналогичные ситуации наблюдаются при переходе к языкам программирования высокого уровня. Если в макрокоманде, на- писанной на таком языке, речь идет о поиске наиболее удобного перевода (преобразования), соответствующего деятельности снабженца в рассмотренном выше примере, то мы прибегаем к компиляции (трансляции). Если же операции необходимо вы- полнить в том порядке, который определяется набором стан-
Языки программирования высокого уровня — Бейсик 317 дартных подпрограмм (один пакет гвоздей взять в определен- ном складе), то мы говорим о программе трансляции в виде ин- терпретатора. Снабженец, имея на входе макрокоманду «купить гвозди», не разделенную на специальные операции, ищет наибо- лее выгодного поставщика. Его миссия заканчивается после того, как он найдет требуемого поставщика и разместит заказ на гвозди. По истечении определенного срока гвозди будут до- ставлены на склад предприятия. В процессе компилирования происходит примерно то же са- мое. Компилятор «переводит» (транслирует) программу, напи- санную на языке высокого уровня, в программу, написанную на машинном языке, и на этом свою работу заканчивает. От- транслированную программу можно передать в дисковое ЗУ и» более того, поместить в ту часть ЗУ, которую первоначально за- нимала компилирующая программа. В случае программы для генерации кода Морзе речь идет об интерпретаторе. В данном случае для всех генерируемых сооб- щений соответствие между кодами Морзе и буквенно-цифро- выми символами зафиксировано в библиотеке кодов Морзе. В упоминавшейся выше программе используется это соответст- вие и она обеспечивает генерацию знаков с требуемой длитель- ностью. Элементы библиотеки, оформленные в виде коротких подпрограмм, всегда находятся в ЭВМ. Та же ситуация наблю- дается и в примере с учеником плотника при выполнении под- программы «принести гвозди», так как она также может пона- добиться в любой момент времени. Интерпретатор языка высокого уровня тоже должен постоянно находиться в распоря- жении системы в ходе выполнения программы. И наоборот, как. уже отмечалось выше, при компилировании программа-транс- лятор во время выполнения основной программы не требуется. Транслятор для преобразования языка высокого уровня» в машинный язык может иметь структуру, аналогичную струк- туре генератора кода Морзе. По аналогии с кодом Морзе мож- но хранить в библиотеке подпрограммы для описания команд на языке высокого уровня, т. е. операторы. Выполняя в после- довательном порядке различные подпрограммы, указанные в ос- новной программе, можно реализовать самые сложные способы- обработки данных; при этом описание соответствующих команд может быть достаточно простым. Так происходит при вводе- команды PRINT В, т. е. оператора, который может понять и за- помнить любой человек и который выполняет операцию печати,, а именно печати данной величины В принтером, для чего на ма- шинном языке требуется несколько сотен команд. Подпрограмма PRINT находится в библиотеке подпрограмму при считывании оператора PRINT в пользовательской програм- ме происходит переход, по которому производится обращение*
318 Глава 6 к подпрограмме PRINT в этой библиотеке. Затем выполняется эта подпрограмма, после чего осуществляется обратный пе- реход (возврат) в основную программу или в другую подпро- грамму. При использовании интерпретатора команды JMP и CALL обрабатываются так же, как подпрограммы. Поэтому при вы- полнении операторы типа IF А = В THEN GOTO 100 (если А=В, то переход к строке 100) сначала проверяется равенство А = В, а затем в зависимости от результата этой проверки передается (или не передается) управление программе по адресу (номеру отроки) 100. Переход производится в том случае, когда эта про- верка получает утвердительный ответ Да (истина). В случае языков высокого уровня обычно подразумевается десятичная адресация и переменные вводятся в буквенно-циф- ровой форме, а не в восьмеричном или шестнадцатеричном коде, как в машинном языке. Во всех языках программирования такие арифметические операции, как сложение, вычитание и де- ление, представляются с помощью стандартных символов +, — и /. Операция умножения является исключением из правила и обозначается символом * (звездочкой), а операция возведения в степень — стрелкой f. Более сложные действия описываются в виде буквенно-цифровых символов, например SIN(X), COS(X), TAN(X) и т. д. Первоначально каждая программа вводится в ЭВМ вручную, причем в случае языков высокого уровня для этой цели исполь- зуется обычно терминал с буквенно-цифровой клавиатурой. Во время ввода программы в ЭВМ все символы высвечиваются на экране видеодисплея, что позволяет контролировать правиль- ность ввода информации (текста) в ЭВМ. При вводе строки текста, написанной на языке Бейсик, мы начинаем с печати де- сятичного номера строки, после которого следует одна или не- сколько команд (операторов). Ввод строки заканчивается на- жатием клавиши RETURN (Возврат), что предписывает системе «возврат в начало новой строки». Если эта операция выполнена и система (терминал) готова к приему новой информации, в на- чале строки появляется знак так называемой подсказки, напри- мер >. После его появления можно начинать заполнение новой строки. Если ввести систему в рабочий режим, то сразу после вклю- чения сетевого напряжения ЭВМ посылает соответствующее сообщение. Это сообщение содержит название системы или спо- соб кодирования, после которого следует какое-либо слово-при- тлашение, например welcome (добро пожаловать). После этого мы переходим к выполнению программы. Рекомендуется начи- нать ввод текста с команды NEW, по которой микроЭВМ очи- щает все строки и рабочие области ЗУ.
Языки программирования высокого уровня — Бейсик 3191 Современные программные ЗУ иногда разделяются на стра- ницы (секторы), в которые можно записывать свою программу. В большинстве систем при отсутствии точного указания номера страницы система начинает отсчет с первой страницы. Если не- обходимо начать работу со второй страницы из-за того, что- в первую страницу уже введена какая-то программа, то вводит- ся команда PAGE-2 и нажимается клавиша RETURN. Переход с одной страницы на другую при программировании- осуществляется по команде PAGE-f-1 или PAGE—1. В первом случае ввод программы продолжается на странице, номер кото- рой на 1 больше номера предыдущей страницы, а во втором случае — на 1 меньше. Можно также “перескочить” на две или- три страницы выше или ниже, указывая соответствующие циф- ры после команды PAGE. Во многих системах разделение на страницы не применяется и поэтому в них производится сквоз- ная нумерация адресов ЗУ с начала и до конца. Программы можно хранить в дисковом или ленточном ЗУ, для чего имеются- операторы SAVE (переписать на ленту) и LOAD (загрузить- в память). Программе присваивается имя, которое заключается в кавычки после указанных операторов. Выполнение операции- SAVE или LOAD начинается после нажатия клавиши RETURN. Язык программирования высокого уровня, такой, как Бейсик,, можно применять только тогда, когда ЗУ имеет объем, доста- точный для размещения интерпретатора, т. е. около 4000 слов.. Кроме того, требуются ячейки для хранения программы и дан- ных. Такой интерпретатор часто бывает невозможно ввести- вручную на машинном языке, особенно если учесть тот факт,, что обычно эта программа хранится в ПЗУ. Практическое ре- шение заключается в том, что приобретается система с встроен- ным в нее интерпретатором или компилятором для Бейсика или Паскаля, которая снабжена необходимой периферийной аппара- турой в виде дисплея или принтера, дисковода с гибкими дис- ками и клавиатуры. Интерпретатор можно также приобрести в виде программного модуля, хранящегося на диске или ленте, поэтому соответствующая система должна иметь в своем соста- ве дисковод или магнитофон для ввода-вывода данных. Монитор, т. е. программа управления ЭВМ, предназначен для обеспечения связи с ЗУ указанных выше типов. 6.2. Команды и операторы При использовании языка Бейсик следует учитывать раз- личие между командами и операторами. С помощью команд осу- ществляется управление ЭВМ во время ввода программы и дру- гих данных, а также отдаются такие приказания, как START и STOP. Команды вводятся с помощью клавиатуры и получают
«20 Глава 6 разрешение на выполнение после нажатия клавиши RETURN. Иногда бывает достаточно нажать всего лишь одну из клавиш, которая инициирует ввод определенной команды в ЭВМ. В свою очередь операторы инициируют те операции, которые должна выполнить программа, поэтому их можно рассматривать как команды на машинном языке. Понятие оператора совпадает € каким-либо логическим утверждением или формулировкой. Очевидно, что после ввода текста программы в ЭВМ начи- нается ее исполнение. Для этой цели обычно используется команда RUN, которая вводится с помощью клавиатуры и рас- сматривается интерпретатором как приказ перейти к исполне- нию программы в ЭВМ. Другими командами являются LIST, NEW, а в некоторых диалектах Бейсика — PURGE и CLEAR. Выполнение всех этих команд начинается после нажатия клави- ши RETURN. В частности, по команде LIST текст программы будет либо напечатан построчно на принтере, либо выведен на экран дисплея. При этом можно проверять качество текста вве- денной программы. Во время «перелистывания» текста про- грамма не выполняется. Команда PURGE (п) в некоторых диалектах Бейсика пред- назначена для очистки (стирания) страницы с номером п. С по- мощью команды CLEAR в программе стираются только пере- менные. В некоторых диалектах Бейсика команда CLEAR ис- пользуется для стирания переменных и резервирования операци- онного ЗУ для хранения переменных в виде строк символов. Команда CLEAR не изменяет программу с фиксированными данными. Как отмечалось выше, операторы являются инструкциями, записанными на языке высокого уровня. Во время тестирования и отладки программ средства языка программирования высоко- го уровня обычно обеспечивают программиста информацией об ошибках, связанных с синтаксисом и формой записи команд в строке. Если в номере строки появится пробел, то в записи оператора будет обнаружена «орфографическая» ошибка, а если вместо знака разделения будет использован знак чтения, то про- грамма сообщит о «синтаксической» ошибке. Интерпретатор может обнаружить эти синтаксические ошибки, однако он не обнаруживает ни ошибочных данных, которые будут затем обра- ботаны, ни ошибочного текста. Прямое выполнение какого-либо Бейсик-оператора возможно посредством ввода номера строки сразу же после знака «под- сказки», например в виде PRINT 8*2. После команды RETURN следует выполнение этого оператора и результат печатается на -следующей строке. Так же как и любой другой язык, языки программирования ммеют различные диалекты, в которых имеются отклонения
Языки программирования высокого уровня — Бейсик 321 в словоупотреблении по сравнению с нормативным вариантом языка. Эти отклонения связаны с теми новыми возможностями, которые обеспечивают различные системы. Минимальные конфи- гурации ЭВМ обычно имеют ограниченные возможности и это приводит к модифицированному типу словоупотребления, ко- торый обеспечивает требуемые логические выражения для опе- раторов и команд. Применяются также языки с ограниченным запасом слов, такие, например, как «мини-Бейсик». Для систем с более широкими возможностями используется «расширенный или углубленный Бейсик». Справочники по ЭВМ содержат об- ширную информацию по этому вопросу. Разумеется, такая ин- формация особенно важна при приобретении ЭВМ. То же самое можно сказать относительно величины чисел, которые может об- рабатывать данная ЭВМ. Программирование на языке высокого уровня по аналогии с машинным языком начинается с системного анализа, или, дру- гими словами, с составления алгоритма, т. е. списка с перечис- лением последовательных операций, которые необходимо вы- полнить для решения данной задачи. При этом сначала состав- ляется предварительный список, затем он уточняется и, наконец, приобретает законченную форму, в которой отдельные строки можно заполнять конкретными операторами. При составлении программы желательно также иметь список с указанием рабо- чих областей ЗУ, которые понадобятся при выполнении данной программы. Стандартный вариант языка Бейсик обеспечивает 286 позиций для переменных, причем эти переменные могут обо- значаться буквой или буквой с последующей цифрой, например А, А1 и А9. Одну переменную можно использовать многократно (см. разд. 6.12). Максимальное число символов в одной строке равно 255. Как уже отмечалось, интерпретатор может обнаружить син- таксические ошибки и выдать на печать соответствующее сооб- щение. То же самое происходит при вводе слишком большого числа (VALU ERROR — ошибка значения) или при использова- нии ошибочной буквы в операторе (CHAR ERROR — ошибка символа). Сообщение об ошибке появляется и в том случае, ког- да какая-либо буква используется в неправильной позиции. В каждой системе имеются свои ограничения на величины положительных и отрицательных чисел. В большинстве случаев более дорогие системы работают с большими числами, чем де- шевые. При покупке системы диапазон представляемых чисел может иметь решающее значение. В болыпиестве случаев числа лежат за пределами обычного десятичного диапазона. При этом используется представление чисел с плавающей точкой. Число записывается в виде мантиссы, за которой следует степень (экс- понента) по основанию 10, называемая также масштабным мно-
322 Глава 6 жителем, или порядком. Таким образом можно представлять и обрабатывать как целые, так и десятичные числа. При этом чис- ло.. 18Е4 равно 1800, а .27Е— = 0.000027. Точность вычислений определяется максимальным числовым значением мантиссы, ко- торое в стандартном варианте Бейсика равно шести цифрам. С помощью экспоненты Е интерпретатор сдвигает в ходе вычис- лений положение точки так, чтобы число цифр в мантиссе не увеличивалось. Таким образом можно обеспечить условия, что- бы при последующих операциях не происходило переполнения соответствующих слов ЗУ. 6.3. Арифметические операции Элементарные арифметические операции, такие, как сло- жение и вычитание, обозначаются с помощью операторов + и — соответственно. Приведем некоторые примеры: Строка Операция 100 А = В + С 200 X=Y—Z 300 Р = 5 + 7 400 Z = X*Y+A/B Заметьте: переменные вводятся в виде прописных букв и мо- гут состоять из двух символов, например одной прописной бук- вы и одной цифры (0—9). Вместо переменных В и С можно ввести числа или же, что также возможно, математическое вы- ражение, т. е. соотношение, которое связывает различные вели- чины, например при умножении или делении (четвертый при- мер). Умножение обозначается звездочкой, деление — наклонной чертой, а возведение в степень — вертикальной стрелкой. Примеры: Строка 100 200 300 400 Операция A=B*C*D X=Y/Z P = S|T А=В*С : D-EfF В соответствующих выражениях каждая операция должна быть указана точно, т. е. должно быть только два элемента дан- ных, разделенные каким-либо одним оператором. При этом запрещается использовать два оператора подряд. Для разделе- ния операторов можно использовать скобки. Так допускается выражение А*(—В), выражение А*—В ЭВМ не обработает.
Языки программирования высокого уровня — Бейсик 323 В соответствии с правилами алгебраических вычислений сна- чала производится обработка данных, заключенных в скобки. В строке 400 указаны две операции, которые будут выполнены только в том случае, когда они будут разделены двоеточием (:). Вторую операцию можно переместить на следующую строку. Следует отметить, что в системах буквы часто имеют толь- ко прописную форму, поэтому в клавиатуре этих систем отсут- ствует клавиша перевода букв в верхний регистр. Приведем пример программы возведения в степень. 5 LPRINT "СТЕПЕНИ 2" 10 Y=0 15 LPRINTY; 20 LPRINT2AY 30 Y-=YH:G0T015 СТЕПЕНИ 2 0 1 1 2 2 4 3 S 4 16 5 32 6 64 7 128 8 256 9 51.2 10 1024 11 2043 12 4096 13 8192 14 16334 15 32768 16 65536 17 131072 18 262144 19 524233 20 1.04353Е+06 21 2.09715Е+06 22 4.1943Е+06 23 8.38861Е+06 В строке 5 дается указание напечатать по команде LPRINT (L обозначает печать на принтере) заголовок «СТЕ- ПЕНИ 2» в верхней части таблицы. Затем в строке 10 перемен- кой Y присваивается значение, равное 0, и в строках 15 и 20 печатаются величины Y и 2Y. В строке 30 значение Y увеличи- вается на 1 и производится безусловный обратный переход в строку 15 (GOTO 15), после чего операция возведения в сте- пень повторяется, однако теперь уже с показателем степени, превышающим на 1 предыдущий. В программе образуется цикл, который при повторении выполняется так, что каждый раз вычисляется следующая, более высокая степень по основа- нию 2. Процесс вычисления степени числа с основанием е иллюст- рирует следующая программа:
324 Глава 6 2 REM ВЫЧИСЛЕНИЕ СТЕПЕНЕЙе 5 REM 2 3 4 10 REM X XXX 20 REM Е= 1-4-Х < —+—-4----+....... 30 REM 2 2.3 2.3.4 40 INPUTX 50 Z=2 60 V:=l 70 Е==14-Х 80 P=(XAZ)/(V*Z) 90 V=V»Z 100 E-E+P 110 Z = ZH 120 IFZ<30G0T080 125 LPRINTГА8(10)X 130 LPRINT"X=";TAB(5)X?TAB(10)"E=":TAB(15)E 1 X= 1 11= 2.71323 10 X* 10 E= 22026.5 В данной формуле для вычисления ех в каждом следующем члене показатель степени x(Z) увеличивается на 1 (Z = Z4-1). Знаменатель каждого следующего члена разложения образует- ся умножением значения знаменателя V предыдущего члена на новый показатель степени (V = VXZ). При этом получается новый член Р= (Xz)/(VXZ). Величину этого члена необходимо прибавить к сумме предыдущих членов: Е = Е4-Р. В данной программе этот подход применен для вычисления ех. Повторяющееся вычисление соответствующих членов раз- ложения осуществляется с помощью оператора IF.. .THEN в строке 120. К этому оператору мы еще вернемся позже. Ес- ли Z^30, то программа выполняется до строки 120 и оператор LPRINT выводит на печать х и ех. Вычисление ряда продолжается до тех пор, пока член Р не станет меньше 8 (Р—8<0). В данном алгоритме выбрано 30 членов ряда, причем в основном для того, чтобы показать, сколько времени будет занимать выполнение этой Бейсик-про- граммы на микроЭВМ разных типов. Структурная схема алго- ритма представлена на рис. 6.1. Стандартные неэлементарные операторы, которые обеспе- чивает Бейсик, приведены ниже в таблице. Аргументы этих функций заключены в скобки, включая и тот случай, когда они являются числами. Функция Описание SIN(X) sin X COS(X) cos X X является углом, измеренным в TAN(X) tgx радианах ATN(X) arctg X Выражается в радианах в диапазоне от — л/2 до +л/2
Языки программирования высокого уровня — Бейсик 325 ЕХР(Х) ex (e=2,71828) ABS(X) Абсолютная величина X LOG(X) elog|X| = ln|X| SQR(X) V|X| —корень квадратный из |X| INT(X) Наибольшее целое число, меньшее или равное X 1, если Х>0 SGN(X) Знак Х = 0, если Х = 0 —1, если X <0 RND(X) Генератор случайных чисел Для тригонометрических функций, таких, как синус, коси- нус и тангенс, аргумент задается в радианах, причем 1° = =0,017483 рад. Из 180° = л следует, что 1° = л/180 рад и 1 рад = = 180°/я, при этом л = 22/7. В вычислениях принято, что л = = 22/7. Можно присвоить какой-либо определенной переменной величину 22/7 и использовать затем эту переменную вместо л. Например, если необходимо определить синус угла 17°, про- грамма будет выглядеть следующим образом: Строка Операция 100 A=SIN (17*22/7/180) или 100 Z = 22/7 110 A=SIN (17*Z/180) или 100 R=22/7/180 ПО A=SIN (17*R) В последнем примере R совпадает с числом радианов угла, равного Г. Применение синуса можно проиллюстрировать с помощью следующей программы: 150 160 Y =0 170 Р=(SIN(X *(22/7)/180)>л2 ISO LETY-Y+P 190 1_ЕГХ=ХИ 200 IFX<360THEIMG0T01 70 210 PR IN Г"IEFF = "1 TAB(10)SQR(Y/360 ) 220 PR INT"IEFF=";TAB(10)(1/2)*SQR(2) IEFF- .706965 IEFF = .707107 Эффективная амплитуда^ переменного тока равна УгУЗТтах. В программе множитель У2/2 определяется путем интегрирова- ния, т. е. вычисляется мощность, приходящаяся на 1° (Р = = (SIN(Xx (22/7)/(180))2); найденные величины суммируются по полному периоду переменного тока. В данной программе на каждом шаге производится увеличение «старой» частичной суммы Y на Р (Y = Y-J-P). Для определения отдельных вели-
326 Глава 6 Рис. 6.1. Структурная схема алгоритма «вычисление степени е>. чин Р на каждом новом шаге вычисления произво- дится увеличение значения X на 1 (LETX=X+i). Суммирование заканчивает- ся при Х = 360°, когда про- исходит «переход» в строку 200 и определяется отноше- ние вычисленного значения I к Imax (V = yY/360). В строке 220 определяется точное значение Ieff = 1/272, чтобы проверить, насколько вычисленное значение отли- чается от точного. В дан- ном случае мы констатиру- ем, что эта разность до- вольно мала. Наблюдаемую разность можно объяснить тем, что ДХ=1, поэтому ве- личину ДХ, очевидно, нуж- но в принципе выбирать меньшей. Для данного при- мера программы применена структурная схема, пока- занная на рис. 6.2. В случае arctg результат указывает- ся в радианах. Функция SQR определяет квадрат- ный корень из данной пе- ременной, при этом аргу- мент должен быть боль- ше 0. В некоторых диалек- тах Бейсика при определе- нии корня из отрицательно- го числа его знак автомати- чески изменяется на поло- жительный, так что в дей- ствительности при этом вы- числяется корень из абсо- лютной величины аргумента. При определении величины LOG(X) вычисляется натураль- ный логарифм аргумента, т. е. результат представляет собой логарифм X с основанием е (2,71828...), тогда как ЕХР(Х) сводится к вычислению степени е, где X — показатель степе- ни е. Данные функции являются стандартными функциями, ко-
Языки программирования высокого уровня — Бейсик 327 торые часто используются в програм- мах научных расчетов и в алгоритмах управления физическими процессами. Функция INT (X) определяет мак- симальное целое число, которое по ве- личине меньше или равно X. Этот оператор в действительности являет- ся командой округления. Для числа 7,81123456789 он дает 7, а для —3,2456789 дает —4. Указанный опе- ратор позволяет убрать из действи- тельного числа те цифры, которые не- существенны для конечного результа- та вычислений. Это связано с тем, что для научных расчетов вполне доста- точна точность 10~4, если входные пе- ременные заданы с точностью 1%. При расчете цен для накладной можно производить округление таким же образом. Если нужно произвести округление между 0,5 и 1,0 с избыт- ком, то сначала к найденному числу добавляется 4-0,5, а затем применяет- ся оператор INT(X). Команда ABS(X) определяет аб- солютную величину X, под которой понимается величина данного числа без учета знака. Результатом приме- нения функции ABS будет всегда по- ложительное число. С помощью функции SGN (от английского слова Sign — знак) можно определить знак числа, при этом функция прини- мает значение 1, если это число положительное. Нуль получа- ется, если аргумент равен нулю, и —1, если он равен отрица- тельному числу. Функция RND(X)1) может понадобиться для получения слу- чайного числа в диапазоне от 0 до 1. Если X присваивается значение —1, то при генерации случайных чисел начальные значения будут всегда одинаковыми, поэтому при каждом вызо- ве RND (—1) будет получаться одно и то же случайное число. Аналогичная ситуация наблюдается и для Х = 0. Примеры: NEW 10 X = RND(+1) START Рис. 6.2. Структурная схе- ма программы _вычисления leff = Imax* !) Аргументом X при обращении к функции RiND(X) может быть любое число, так как его значение игнорируется. — Прим. ред.
328 Глава 6 20 PRINT X 30 GOTO 10 RUN •498871 •670127 •98706 •739354 RUN •823571 •244878 •421504 •310637 NEW 10 X = RND(—1) of RND(0) 20 PRINT X 30 GOTO 10 RUN RUN •308601 •308601 •308601 •308601 •308601 •308601 •308601 •308601 Генерация случайных чисел находит широкое применение в научных расчетах, а также во многих играх, реализуемых на ЭВМ. В нашем распоряжении имеются также и логические опера- ции И, ИЛИ и НЕ. Эти операторы имеют то же значение, что и эквивалентные им команды машинного языка. Если используются шестнадцатеричные переменные, то пе- ред ними помещаются символы &Н, в результате чего ЭВМ ге- нерирует соответствующие буквенно-цифровые комбинации. В некоторых системах для этой цели часто используется знак @. Логические функции программируются обычно в следующем виде: Функция И Функция ИЛИ Функция НЕ : Z = XANDY : Z=XORY : Z-NOTY Указанные функции могут входить в состав более сложных операторов, например IF Х = 6 AND Y = 8 THEN PRINT Z (см. также следующий раздел). Другой пример: IF R<X OR (S<Y AND T>Z) THEN GOTO 150. В этих примерах соответствующие выражения опра- шиваются, и если ответом будет «истина», то в программе произойдет ветвление, в частности переход к строке 150. Шестнадцатеричная интерпретация логической функции дана в следующем примере: Z = &HX AND &HY. В этом примере переменным предшествуют символы &Н, указывающие, что здесь мы имеем дело с шестнадцатеричными переменными.
________Языки программирования высокого уровня — Бейсик_329 Логические действия такого вида над шестнадцатеричными данными часто используются в операциях со строками битов. Пример: NEW 10 X = &H0F 20 Y = &H08 30 Z=XAND Y 40 PRINT &HZ 50 END RUN 0 8 С помощью X = &H0F шестнадцатеричное число OF загружается в X, с помощью Y = &H08 число 08 загружается в Y. Числа X и Y после операции И печатаются с помощью оператора PRINT: 0Fi6 = 0000 11112 0816 =0000 10002and 0816 =0000 10002 При выполнении операции И над 0F16 и 08i6 из 0Fi6 выделяет- ся четвертый бит, начиная с младшего бита, а все остальные биты маскируются. Подобная операция, при выполнении кото- рой для какого-либо байта производится маскирование одного или нескольких битов, называется маскированием битов. Эта операция находит применение при управлении работой клапанов, кранов, реле, двигателей и различными процессами с применением микроЭВМ. С помощью 8 бит, хранящихся в запоминающих элементах (триггерах), можно управлять режи- мом работы восьми органов управления. Маскирование битов позволяет ЭВМ указать, какие органы управления должны быть включены (состояние 1), а какие — выключены (состоя- ние 0). В вышеприведенном примере результат применения операции AND может быть равен 0 или 1 в зависимости от зна- чения четвертого бита в верхнем байте. Остальные биты будут равны 0 независимо от значений других битов в верхнем бай- те. Можно присвоить переменной и восьмеричное значение, используя цифровой ряд с предшествующим знаком &, напри- мер Х = &237. 6.4. Команды перехода и ветвления По аналогии с машинным языком в языке Бейсик имеются также команды перехода и ветвления. Команда JMP совпадает с оператором GOTO N, где N указывает номер строки, в кото- рую происходит данный переход.
330 Глава 6 Этот оператор можно .проиллюстрировать с помощью сле- дующего примера: NEW 10 LET А=0 20 Y = Af2 30 PRINT Y 40 LET A = A+1 50 GOTO 20 RUN Здесь оператор LET присваивает начальное значение А = 0. Затем вычисляется квадрат А и печатается результат с по- мощью PRINT. Далее А получает приращение, равное 1, за- тем происходит обратный переход от строки 50 к строке 20 и вычисление повторяется. Таким образом, при каждом про- хождении через цикл А увеличивается на 1 и в результате получается таблица квадратов. Оператор GOTO 20 осуществ- ляет возврат в начало подпрограммы. Часто GOTO встречается в форме ON X GOTO 100, 150, 300, 480; при этом X указывает, по какому адресу происходит безусловная передача управления после GOTO. Если Х = 2, то происходит переход в строку 150, если Х = 4, то в строку 480. На X накладывается следующее ограничение: X не должна быть отрицательным числом и превышать 255. При Х = 0 опе- ратор GOTO не выполняется и программа продолжается со следующей строки. Если X не является целым числом, то дробная часть, нахо- дящаяся после десятичной точки, отбрасывается. Условный пе- реход имеет форму IF.. .THEN.... После THEN указывается номер строки, в которую происходит переход, если выражение, находящееся после IF, оказывается истинным. В выражениях, располагающихся после IF, можно использовать следующие символы: Символ Значение равно не равно больше, чем меньше, чем больше или равно меньше или равно Пример А = В А<>В А > В А < В А> = В А< = В Если выражение, находящееся после IF, оказывается лож- ным, то программа продолжается со следующей строки. В приведенном выше примере вычисления таблицы квадра- тов отсутствует останов. Такой останов можно «встроить»,
Языки программирования высокого уровня — Бейсик 331 превратив безусловный переход GOTO в условный переход (см. строку 50) типа IF А<100 GOTO 20. Переходы будут проис- ходить до тех пор, пока А не станет равным 100. Если закон- чить цикл при А = 99, то программа перейдет в строку 60, и если поместить здесь оператор END, то выполнение програм- мы закончится. Оператор IF. ..THEN... можно использовать в комбинации с оператором GOSUB, а также с оператором, например, PRINT. Используя этот оператор, можно выполнять (или не выполнять) соответствующую операцию вычисления, напри- мер IF. ..THEN S = Yf2. Этот оператор может быть связан не только с цифрами, но и с текстом, например IF A$=«JA» THEN GOTO.... Вполне допустимы ситуации, в которых неко- торое условие встречается в одной строке несколько раз. Так, например, IF Х<1 OR Х> 10 THEN PRINT ERROR показыва- ет, что если X меньше 1 или больше 10, то программа выведет на экран дисплея или отпечатает на принтере ERROR (ОШИБ- КА). В некоторых программах часто бывает необходимо обра- щаться к какой-либо подпрограмме многократно. Такую под- программу можно назвать циклической. Чтобы вызвать под- программу требуемое число раз, необходимо использовать счетчик, который при каждом вызове получает приращение на 1 до тех пор, пока не станет равным некоторой константе. Для выполнения этой операции в Бейсике используется опера- тор FOR...NEXT (FOR определяет начало цикла, NEXT — ко- нец). После FOR можно указать, например, Х=1 ТО N; при этом N будет задавать число повторений цикла. В начале со- ответствующей программы помещается оператор Х=1 ТО N, а в конце — оператор NEXT X. После считывания оператора NEXT X величина X увеличи- вается на 1 и сравнивается с N. Если она равна N, то програм- ма продолжается, т. е. переходит к строке, следующей после NEXT X; если не равна, то происходит обратный переход в строку с FOR и соответствующий цикл продолжается. Этот оператор показывает, что здесь отсутствует необходимость в подготовительной работе для программирования цикла в про- тивоположность машинному языку, где для реализации указан- ных выше операций требуется использовать большое число команд. Применение оператора FOR.. .NEXT иллюстрирует сле- дующий пример: NEW 10 LET N=100 20 FOR X=1 TO N 30 LET Y=Xf2 40 PRINT Y
332 Глава 6 FOR X FORY t NEXTY I NEXTX FORX t FORY f FORZ f NEXTZ t FOR W t NEXT W t NEXT Y t FORZ t NEXTZ t NEXTX Рис. 6.3. Два приме- ра вложенных цик- лов. Эти конфигура- ции допустимы, так как линии не пересе- каются. ...NEXT в циклах разными циклами. 50 NEXT X 60 END RUN Здесь снова рассматривается програм- ма вычисления таблицы квадратов. Про- грамма начинается с оператора присваи- вания N = 100. В строке 20 переменной X присваивается значение 1, после чего в строке 30 вычисляется квадрат X. В строке 50 переменная X увеличивается на 1 и вы- ясняется, не равна ли она N = 100. Если не равна, то происходит обратный переход в строку 20 и цикл повторяется. Этот про- цесс повторяется до тех пор, пока перемен- ная X не станет равной 100, после чего программа переходит к выполнению опе- ратора END. В случае оператора FOR. ..NEXT с пе- ременной Х=1 ТО N подразумевается, что X постоянно увеличивается на 1. Такой ре- жим называется режимом «по умолчанию», т. е. без указания величины приращения. Однако если требуется другое приращение, то его можно задать с помощью оператора 1 ТО N STEP Y, где Y определяет величи- ну приращения. Если Y = 2, то X будет каж- дый раз увеличиваться на 2 вместо 1, как в приведенном примере. При использовании операторов FOR... следует обращать внимание на связь между Циклы могут выполняться в программе, вхо- дя в состав других циклов, а также могут содержать внутри се- бя меньшие циклы. Наконец, циклы могут быть «вложенными» друг в друга. В этой ситуации один цикл является частью дру- гого цикла, а последний в свою очередь является частью цикла в основной программе (рис. 6.3). Описанные циклы выполняют- ся правильно, так как соответствующие линии переходов в них не пересекаются. На рис. 6.4 приведен пример связи между циклами, которая недопустима, так как линии переходов здесь взаимно пересекаются. В следующем примере приведена программа, в которой один цикл является частью другого. NEW 10 LET Х = 0 20 FOR Х = 0 ТО 100 STEP 10
Языки программирования высокого уровня — Бейсик 333 30 LET Y=0 40 FOR Y=0 TO 5 50 LET Z = X+Y 60 PRINT Z 70 NEXT Y 80 NEXT X 90 END RUN В этой программе используются совместно переменные X и Y, причем X может принимать значения 0, 10, 20. ..100, a Y принимает значения 0—5 во внутреннем цикле. В результате будет напечатан набор цифр от 0 до 5, от 10 до 15, от 20 до 25 и т. д. вплоть до 100—105. NEXT Y и NEXT X в строках 70 и 80 нельзя поменять местами, иначе произойдет пересечение FORX Рис. 6.4. Конфигурация вложенных циклов, которая не- допустима. Линии пересекаются. FORY NEXTX NEXT У и получится совершенно другой результат. При замене строки 70 на строку 80 печатаются числа 0, 10,..., 100, после чего появляется сообщение «NEXT without FOR in 80». Структурная схема этой программы приведена на рис. 6.5. Другим оператором с подобным функциональным назначе- нием является DO.. .UNTIL. После DO следует выполняемая процедура, в которой переменная X увеличивается при каждом выполнении цикла на N. В конце цикла помещается оператор UNTIL и проверяется не превзошла ли переменная X опреде- ленную величину (константу). До тех пор пока выражение, на- ходящееся после UNTIL, будет ложным, происходит обратный переход в строку с DO. Если же это выражение становится истинным, будет осуществлен переход в строку, находящуюся после строки с UNTIL. Пример: NEW 100 LET Х = 0 ПО DO 120 Х=(Х-Н)*2 130 PRINT X 140 UNTIL Х> = 20 150 END RUN
834 Глава 6 В строке 100 X присваивается значение 0 и выполняется процедура в пределах, заданных DO. ..UNTIL. Эта процедура начинается со строки 120, где вычисляется переменная X, ко- торая затем печатается с помощью PRINT (строка 130). В стро- ке 140 проверяется, не превзошла ли переменная X констан- ту 20. При отрицательном ответе (Нет) происходит обратный переход, а при положительном ответе (Да) программа перехо- дит к следующей строке 150 с оператором END, который ее останавливает. Печатаются числа 2, 6 и 14, после чего выпол- нение программы заканчивается. Q START ) х=о Рис. 6.5. Структурная схема участка программы, где дважды встречается оператор FOR... NEXT. Здесь циклы являются вложенными. Переходы к подпрограммам, осуществляемые на машинном языке с помощью команд CALL и RET, реализуются в языке Бейсик с помощью операторов GOSUB.. .RETURN. Оператор GOSUB... используется как в основной программе, так и в подпрограмме. Например, можно перейти из основной програм- мы в какую-либо подпрограмму, а затем из этой подпрограм- мы в другую и т. д., что позволяет выполнить автономно ряд отдельных специальных операций в процедурах, к которым имеют доступ и другие части программы. Для возвращения в исходную процедуру или основную программу в операторе RETURN не надо указывать адрес возврата. При выполнении оператора GOSUB необходимая адресная информация, в част- ности следующий адрес из исходной программы (адрес возвра- та), запоминается в стеке. После считывания оператора
Языки программирования высокого уровня — Бейсик_________335 RETURN возврат происходит именно в этот адрес. Как уже отмечалось выше, применение различных циклов в комбина- ции с внутренними циклами обеспечивает возможность построе- ния «вложенных» структур. Число вложенных циклов, которое можно использовать в рамках Бейсика, ограничивается во- семью уровнями. В результате с помощью операторов FOR... ...NEXT и DO. ..UNTIL можно «вложить» друг в друга опре- деленное число циклов. При превышении допустимого числа вложенных циклов Бейсик обеспечивает диагностическое сообщение об ошибке, которое печатается принтером или появляется на экране дис плея. Что касается сообщения об ошибках в случае операто- ров перехода или ветвления, то система печатает соответствую- щее сообщение, если такой оператор состоит, например, из двух слов, одно из которых было опущено. Это замечание от- носится к таким операторам, как FOR. ..NEXT и DO. ..UNTIL. Кроме того, сообщение об ошибке появляется и в том случае, когда в программе до оператора RETURN не используется со- ответствующий оператор GOSUB. 6.5. Ввод данных В языке Бейсик предусмотрена возможность ввода новых переменных с помощью оператора INPUT во время выполнения программы. Этот оператор помещается в определенной строке программы и после него записываются одна или несколько пе- ременных, которые затем обрабатываются в основной про- грамме. Как известно, программа начинает выполняться после команды RUN и останавливается, встретив оператор INPUT. Система сообщает об этом, печатая в следующей строке знак вопроса (?), после чего с помощью клавиатуры требуется вве- сти запрашиваемые переменные. Если речь идет о вводе боль- шого числа переменных, то следует использовать оператор PRINT и напечатать информационное сообщение, которое поз- волит избежать ошибок при вводе переменных. Применение оператора INPUT иллюстрирует следующий пример: NEW 10 PRINT „X, Y”. 20 INPUT X 30 INPUT Y 40 Z=(X+Y)*(X—Y) 50 PRINT Z 60 END RUN
336 Глава 6 X, Y ?5 ?4 9 Оператор PRINT „X, Y” указывает на то, что требуется ввести X и Y. Выполнение программы останавливается при реализации оператора строки 20 и печатается вопросительный знак. С клавиатуры вводится цифра 5 и нажимается клавиша RETURN, после чего ожидается появление следующего вопро- сительного знака. Далее с клавиатуры вводится цифра 4 и снова нажимается клавиша RETURN, после чего программа выполняется до тех пор, пока не будет напечатан результат (Z = 9). Относительно ввода текста после оператора INPUT следует отметить следующее: а) после INPUT текст вводится с клавиатуры только один раз; б) за текстом всегда должна следовать переменная, которой позже с помощью клавиатуры присваивается какое-либо конк- ретное значение; в) текст, заключенный в кавычки, должен всегда предшест- вовать соответствующей переменной. Если одновременно с текстом вводятся и данные, то для этой цели используется оператор READ, с помощью которого можно считывать данные из файла или блока данных. Файл данных, указываемый в начале строки оператором DATA, мо- жет быть помещен в разных местах программы. Интерпэета- тор может собрать разрозненные данные в один файл. В це- лях удобства все данные, разделенные запятыми, можно вве- сти после оператора DATA. Так как это делается в конце программы, то место файла данных уже известно, поэтому в него можно легко внести соответствующие изменения. В лис- тинге программы отмечаются соответствующие переменные че- рез А, В, С... и т. д. и тем самым устанавливается связь с оператором READ. Более подробное обозначение переменных при вводе данных с помощью оператора DATA можно осу- ществить и позднее. Программа присвоит адреса и свяжет их с переменными, которые вводятся оператором READ. Применение операторов READ и DATA показано в следую- щей программе: NEW 10 READ X 20 READ Y 30 LET Z-X + Y 40 PRIN ,,X + Y = ”; Z
Языки программирования высокого уровня — Бейсик 337 50 DATA 5,10 60 END RUN X + Y=15 С помощью операторов READ извлекаются числа 5 и 10 из файла данных и эти значения присваиваются переменным X л Y. В строке 30 вычисляется Z, после чего в строке 40 дается команда напечатать «Х+У = » в виде текста и Z — в числовой форме. В строке 50 находится файл данных, состоящий из двух чисел, 5 и 10. Если файл данных требуется использовать повторно еще где-нибудь в программе, то для этой цели служит оператор ^RESTORE, располагаемый в начале соответствующей части программы. При этом управление данными восстанавливается, так что при считывании программа снова попадает в начало файла данных. В действительности при этом указатель дан- ных просто сбрасывается в нуль. Пример: NEW 10 READ X 20 READ Y 30 PRINT X, Y 40 DATA 50, 100 50 RESTORE 60 READ В 70 READ A 80 PRINT A, В 90 END RUN 50 100 100 50 В строках 10 и 20 числа 50 и 100 из файла данных присваива- ются переменным X и Y соответственно и выводятся на печать оператором PRINT (строка 30). В строке 50 указатель данных сбрасывается в нуль оператором RESTORE и происходит при- сваивание новых числовых значений. В строке 60 эта операция реализуется, присваивая В = 50 и А=100 из файла данных. Заметьте: переменная В появляется после оператора RESTORE первой и ей присваивается первое числовое значение из файла, т. е. 50. Затем в строке 70 число- вое значение 100 присваивается второй переменной, т. е. А. Интересным оператором является также SWAP, с помощью которого можно поменять значения, присвоенные двум разным переменным. В случае операции SWAP X, Y переменные X и Y
338 Глава 6 могут иметь как числовые, так и символические значения. Опе- рации с переменными в форме строк символов будут рассмот- рены в следующих разделах. Этим переменным присваиваются группы символов, например образующих некоторый связный текст. Символические переменные отличаются от числовых сим- волом доллара, который помещается после соответствующей переменной. В файле данных группы символов, которые обра- зуют строку (текст), заключаются в кавычки. Пример применения оператора SWAP: NEW 10 Х=5 20 Y=10 30 PRINT X, Y 40 SWAP X, Y 50 PRINT X, Y 60 X$ =„ОБЕЗЬЯНА” 70 Y$=„OPEX” 80 PRINT X$, Y$ 90 SWAP X$, Y$ 100 PRINT X$, Y$ 110 END RUN 5 10 10 5 ОБЕЗЬЯНА ОРЕХ ОРЕХ ОБЕЗЬЯНА Прямой ввод данных и переменных возможен также с по- мощью оператора LET, например LET А=10. После этого опе- ратора может следовать и какое-либо выражение, например LET А=С4-В. Здесь оператор LET можно интерпретировать как «пусть А равно...». Это означает, что выражение справа от знака равенства может быть также и текстом, как следует из процедур обработки строк символов (см. разд. 6.9). 6.6. Вывод данных на экран дисплея и при помощи принтера Оператор PRINT позволяет вывести на экран дисплея или печать программу, введенную с клавиатуры, в частности ком- ментарии и результаты обработки в виде текста и числовых данных. Вывод на дисплей производится оператором PRINT, вывод на печать — оператором LPRINT. Следует отметить, что во многих системах видеодисплей имеет вид телевизионного приемника. Различие между операторами PRINT и LPRINT
Языки программирования высокого уровня — Бейсик 339 связано с применением команды LIST. При выводе текста со- ответствующие символы необходимо заключить в кавычки. Эти символы затем печатаются принтером или высвечиваются на экране дисплея. С помощью оператора PRINT можно также вывести на пе- чать результат численной обработки или числовое значение ка- кой-либо переменной. При этом не используются кавычки и программируется, например PRINT 3+8, или же в случае ка- кого-либо числа или переменной PRINT 34 или PRINT В соот- ветственно. Если после PRINT не указаны никакие другие опе- ранды, то выполняются только операции «перевода строки» и «возврат каретки»^ Пример: NEW 10 PRINT „BASIC” 20 PRINT „2X7” 30 PRINT 257, 2*7 40 END RUN BASIC 2X7 257 14 Текст выражений, например в строках 10 и 20, заключается в кавычки и печатается без всякой обработки в требуемом ме- сте программы. Если же убрать кавычки, как это сделано в строке 30, то на выходе появится число 257 и результат вычис- ления 2*7. Если в программе какая-либо переменная, напри- мер X, использована без кавычек, то на выходе будет напеча- тано только числовое значение X. Тексты, помещенные в последовательно расположенных строках с предшествующим оператором PRINT и заканчиваю- щиеся точкой с запятой (;), при выполнении программы печа- таются на одной строке. Если соответствующие строки закан- чиваются запятой (,), то печать будет выполнена также на од- ной строке. Однако обычно тексты разбиваются на зоны по 15 символов в каждой, и их окончание указывается точкой с запятой. Можно представить себе также и ситуацию, когда со- ответствующие тексты, находящиеся после оператора PRINT, вводятся в одной строке. Если эти тексты разделяются запяты- ми, то будет произведена распечатка по частям, когда как при разделении с помощью точки с запятой соответствующие тек- сты будут объединены. Оператор PRINT, находящийся в пронумерованной строке, после которого следует какое-либо выражение, число или пе-
340 Глава 6 ременная, сам по себе ничего напечатать не может. Для реа- лизации выдачи на печать необходимо выполнить несколько операций, которые образуют довольно простую процедуру. По- сле оператора PRINT N помещается оператор END, затем с клавиатуры вводится команда RUN и нажимается клавиша RETURN. Если ввести оператор PRINT N без указания номе- ра строки и нажать клавишу RETURN, то произойдет то же самое, т. е. соответствующее число, переменная или выраже- ние будут отпечатаны на выходе. Для печати текстов в табличной форме Бейсик располагает оператором TAB. После PRINT TAB в скобках указывается позиция первой буквы текста, считая от начала строки, а так- же приводится текст, переменная или число, которые печата- ются в таблице. Для иллюстрации действия оператора TAB можно привести следующий пример: NEW 10 READ А$ 20 DATA „КОФЕ” 30 LET А = 7 40 LET В= 15 50 PRINT TAB (1) А$; 60 PRINT TAB (10) A; 70 PRINT TAB (20) В 80 END RUN КОФЕ 7 15 Здесь A$ является так называемой текстовой переменной, с помощью которой в файле данных указывается текст „КОФЕ”. Этот текст вводится в файл данных оператором DATA. Переменным А и В оператор LET присваивает опреде- ленные числовые значения. При выполнении программы распе- чатка происходит в табличной форме, так как после оператора PRINT указан оператор TAB. Команда LIST предназначена для вывода на печать полного текста программы или какой-либо ее части в порядке следова- ния номеров строк. Во время действия команды LIST програм- ма не выполняется. Если при отладке в программу вносятся какие-либо изменения, то они будут напечатаны принтером. Если требуется распечатать какую-либо часть программы, то для этого после оператора LIST указывается первая и по- следняя строки соответствующей части, например LIST 150-250. Номера строк разделяются с помощью дефиса. Применение команды LIST иллюстрирует следующий при- мер:
Языки программирования высокого уровня — Бейсик 341 LIST 10—50, после чего следует нажатие клавиши RETURN. 10 LET X = Y 20 Х = Х+1 30 PRINT X 40 GOTO 20 50 END После ввода команды LIST с последующими номерами строк для требуемой части программы и нажатия клавиши RETURN происходит вывод текста на экран дисплея. Если требуется вывести текст на принтер, то вводится команда LLIST. При отладке программы операторы PRINT следует вводить в тех местах программы, где появляются интересные промежу- точные результаты. Эти операторы позволяют контролировать качество выполнения соответствующих частей программы. По окончании отладки операторы PRINT можно убрать, если про- межуточные результаты не понадобятся для других целей. Для удаления какой-либо строки текста служит команда DELETE п, где п указывает номер строки. Если требуется уб- рать несколько строк, то используется оператор DELETE п—гп. Эту же операцию можно реализовать, вводя с клавиатуры но- мер строки и нажимая клавишу RETURN. По команде DELETE п—m удаляются все строки, начиная с номера п и кончая номером гп. Оператор REM позволяет ввести комментарии, поясняющие основной текст программы. Требуемый текст комментариев вводится в строку после этого оператора. Так как оператор REM имеет совершенно определенное (специализированное) назначение, то текст комментариев в кавычки не заключается. При выполнении программы комментарии игнорируются и не распечатываются. Печать текста вместе с комментариями про- изводится по команде LIST. Пример: 10 REM СЧЕТ ДО 100 20 LET Х = 0 30 PRINT X 40 LET Х = Х+1 50 PRINT X 60 IF Х<=99 GOTO 40 70 REM КОНЕЦ 80 END RUN 0 1 2
342 Глава 6 3 4 100 При выполнении команды LIST на экран дисплея или прин- тер выводится текст программы, а не результат вычислений, так как при этом выполнение программы будет приостановле- но. По окончании печати вводится команда RUN, после чего выполнение программы заканчивается и печатается результат. Если вместо операторов REM в строках 10 и 70 записать опе- раторы PRINT и заключить соответствующие тексты в кавыч- ки, то в ходе выполнения программы будут распечатаны и комментарии. Над нулем будет напечатан текст СЧЕТ ДО 100, а после 100 в следующей строке появится слово КОНЕЦ. Оператор или набор операторов, разделенных двоеточи- ем (:), выполняется немедленно, если соответствующие строки не пронумерованы. В таком варианте применения система иг- рает роль карманного калькулятора, с помощью которого на- бор введенных с клавиатуры команд, разделенных знаком ра- венства ( = ), немедленно передается на исполнение. Промежу- точные результаты в таком режиме выдаются автоматически, однако не в ходе выполнения Бейсик-программы, снабженной операторами PRINT. 6.7. Ввод и тестирование программ После включения напряжения питания система сообщает о своей готовности, печатая свое коммерческое название, за которым следуют слова READY (ГОТОВ) ИЛИ WELCOME (ДОБРО ПОЖАЛОВАТЬ) и символ «подсказки» в виде > или другого знака. Некоторые системы сообщают также, сколько свободных байтов ЗУ можно использовать для про- граммирования. После этого сообщения можно переходить к вводу про- граммы, начиная со строки с номером 10 и вводя затем строки с номерами 20, 30 и т. д. Между соседними строками при та- кой нумерации остается по девять свободных строк, которые позволяют ввести в дальнейшем еще ряд дополнительных опе- раторов в случае обнаружения ошибок или необходимости в распечатке промежуточных результатов. Для ввода промежуточных строк достаточно ввести с по- мощью клавиатуры номер соответствующей строки с требуе- мыми выражением, переменной или числом. Дополнительная
Языки программирования высокого уровня — Бейсик 343 строка автоматически попадет на свое место после нажатия клавиши RETURN. Очистку какой-либо строки можно произ- вести, вводя номер строки и нажимая клавишу RETURN. Если при вводе программы с клавиатуры забыли напеча- тать какую-либо строку, то ее можно ввести, нажимая клави- шу RETURN и вводя соответствующий текст. В нашем распо- ряжении имеется также клавиша возврата, которая позволяет вернуться на несколько позиций и ввести необходимую по- правку. После исправленной позиции остальные символы вво- дятся в строку заново. Окончив ввод всех операторов и файлов данных, а также заключительный оператор END, можно в принципе перейти к выполнению программы. На самом же деле этого делать не следует, за исключением случая, когда программа содержит так мало операторов, что ошибки в ней практически исклю- чаются. В случае программы большего объема необходимо сначала проверить правильность записи текста, используя команду LIST п—ш, после которой следует нажатие клавиши RETURN. В результате интерпретатор начнет печатать текст программы, начиная со строки п и кончая строкой гп. Эта команда может напечатать всю программу или же какую-либо ее часть, что особенно важно в тех случаях, когда экран дисплея не может вместить весь текст программы. Если текст введен правильно, то можно перейти к отладке, при этом в программе выделяются автономные части, которые обрабатываются (транслируются) компилятором. Помещая в определенных местах проверяемых частей программы операто- ры PRINT и INPUT, можно контролировать промежуточные результаты вычислений. Такая процедура отладки уже обсуж- далась в предыдущих разделах. Система останавливает вы- полнение программы после считывания оператора INPUT с последующей фиктивной переменной. Если перед этим опера- тором в программе находится оператор PRINT, предназначен- ный для вывода на печать требуемых переменных, то на выхо- де будет отпечатана соответствующая информация об этих пе- ременных. Дальнейшее выполнение программы зависит от зна- чения, которое будет присвоено фиктивной переменной с кла- виатуры. Рестарт программы с определенной строки можно произвести по команде GOTO п с последующим нажатием клавиши RETURN, причем п — номер строки. Это может понадобиться в том случае, когда в одном файле помещено несколько про- грамм. При запуске по команде RUN начинается выполнение первой программы. Другие программы можно будет запустить, используя переход по команде GOTO п.
344 Глава 6 Если интерпретатор выявит синтаксические или какие-либо другие ошибки, то на выходе появится диагностическое сооб- щение с кратким описанием этой ошибки. Строки программы, содержащие ошибки, можно скорректировать, вводя новый, ис- правленный текст. Все операторы необходимо вводить в связной форме, без пробелов между символами. Пробелы между операторами, числами, переменными и выражениями можно ввести позже, так как они занимают в ЗУ определенное количество ячеек. Рекомендуется по крайней мере вводить в связной форме, т. е. без пробелов, все цифры в числах. Десятичная запятая заменя- ется в языке Бейсик десятичной точкой. Причина заключается в том, что запятая используется в Бейсике в качестве символа разделения между числами, переменными и выражениями. В некоторых диалектах Бейсика имеются операторы/коман- ды, с помощью которых можно выводить на печать или на эк- ран номера строк в порядке выполнения операций. Это требу- ется прежде всего для обеспечения контроля за выполнением сложных циклов. При этом между номерами строк, которые появляются на выходе в кавычках или в скобках, происходит также и нормальный вывод данных с помощью операторов PRINT. В варианте Бейсика Microsoft соответствующий опера- тор обозначается как TRON (TRacing ON — включение трасси- ровки). Прекращение действия оператора TRON, т. е. его от- мена, производится оператором TROFF (TRacing OFF — прек- ращение трассировки), который вводится с клавиатуры с по- следующим нажатием клавиши RETURN. Пример: NEW 10 TRON 20 Х = 5 30 Y = X 40 Z = Y 50 PRINT Z 60 X$\=„COMPU” 70 Y$=X$ 80 Z$=Y$ 90 PRINT Z$ 100 END RUN (20) (30) (40) (50) 5 (60) (70) (80) (90) COMPU TROFF Команда EDIT, после которой следует номер соответствую- щей строки, изменяет содержимое этой строки. Эту команду
Языки программирования высокого уровня — Бейсик 345 можно использовать для замены отдельных символов или уда- ления текста, а также для поиска текста или символов с целью их последующей обработки в программе. Строка, которую требуется обработать, выбирается по команде EDIT с последующим вводом номера строки и нажа- тием клавиши RETURN. Вводя затем команду L, т. е. нажи- мая клавишу с буквой L, можно вывести требуемую строку на экран дисплея и произвести необходимую обработку. Если нужно заменить какие-либо отдельные символы, то сначала курсор, т. е. световой индикатор, подводится к пози- ции, занимаемой первым заменяемым символом в строке. За- мена символа происходит после нажатия С-клавиши с после- дующим вводом требуемого символа в данную позицию. В этой же строке можно легко заменить и большее число символов, нажимая повторно С-клавишу и вводя новые символы. При вводе текста сначала с помощью команды EDIT п вы- зывается соответствующая строка текста, после чего к требуе- мой позиции подводится курсор. Затем нажимается 1-клавиша и вводится требуемый текст. Замена одного текста другим за- канчивается после нажатия клавиши RETURN. Таким образом, указанные операции выполняются следую- щим образом: Замена символов а) вводится команда EDIT п, после чего нажимается клавиша RETURN; б) курсор подводится под заменяемый символ; в) нажимается С-клавиша (при этом положение курсора не изменяется); г) вводится требуемый символ; д) нажимается клавиша RETURN. Ввод текста а) вводится команда EDIT п, после чего нажимается клавиша RETURN; б) под соответствующий символ подводится курсор; в) нажимается 1-клавиша (позиция курсора при этом не изме- няется) ; г) вводится требуемый текст; д) нажимается клавиша RETURN. После ввода EDIT п можно, если потребуется, нажать L-клавишу, что позволит увидеть всю строку и положение кур- сора. При удалении символов строка также выбирается с по- мощью команды EDIT п, а курсор подводится под позицию, за- нимаемую последним символом. Затем с помощью клавиатуры вводится число удаляемых символов, после чего нажимается D-клавиша. Удаление ненужных символов из выбранной стро-
346 Глава 6 ки заканчивается после нажатия клавиши RETURN. Если вме- сто D-клавиши нажать Н-клавишу, то исчезнут все символы, расположенные справа от курсора. Для выключения действия команды EDIT во время ввода данных с клавиатуры достаточно нажать Q-клавишу. В резуль- тате интерпретатор вернется в режим исполнения команд. На- жатие A-клавиши возвращает курсор в режим EDIT, например, в начало строки, т. е. в позицию, расположенную непосредст- венно после номера строки. Описанные здесь возможности EDIT реализуются, например, в рамках «расширенного Бей- сика» Microsoft. 6.8. Функции, определяемые пользователем При программировании часто оказывается, что определен- ные операции применяются многократно в самых различных частях программы. Можно ввести такую операцию как опре- деленную процедуру или же превратить ее в отдельную под- программу, которую при необходимости можно вызывать из разных частей данной программы. Бейсик позволяет реализо- вать эту возможность с помощью оператора DEF FN... (X, Y). После FN следует еще одна буква для обозначения данной определяемой функции. В основной программе будет осуществ- ляться обращение к этой функции с помощью например, опе- ратора LET X = FN... (D, Е), где D и Е обрабатываются функ- цией FN. Эта функция может состоять из одной или несколь- ких строк текста. В последнем варианте функция заканчивает- ся оператором FNEND, который отделяет ее от других частей программы. Если для описания функции требуется большое число строк, то говорят о «многострочной функции». Обычно же большинство формул удается разместить на одной строке и тогда говорят об «однострочной функции». Как уже отмечалось выше, определяемые функции разли- чаются с помощью буквы, следующей после FN. Иногда после этой буквы может следовать еще одна цифра. Переменные, заключенные в скобки, являются фиктивными параметрами. В ходе вычислений эти фиктивные параметры заменяются зна- чениями тех «реальных» переменных, которые появляются в подпрограмме или в соответствующих формулах. Поясним применение функции DEF FN с помощью ряда примеров. Пример «однострочной» функции: NEW Определение (одна строка) 10 DEF FNE(X)=EXP(—Xf2 + 5) 100 LET Y = FNE(.2)
Языки программирования высокого уровня — Бейсик 347 Выполнение (1) 110 PRINT Y Выполнение (2) 200 LET Z = FNE(3.45) 210 PRINT Z RUN 142.594 1.00527E-03 Функция описана здесь на одной строке 10 и затем приме- нена в строке 100, а также в строке 200 с другим значени- ем X. После вычисления результат можно распечатать, напри- мер, с помощью оператора PRINT Y, как это сделано в приве- денном примере. Пример «многострочной» функции: Определение (несколько строк) NEW 10 DEF FNM (X, Y) 20 R=3*X*Y—Y3f3 30 LET FNM=R|2 + EXP(R) 40 FNEND 100 READ D 110 READ E Выполнение 120 LET P = FNM(D, E) 130 PRINT P 140 DATA 7.8, 9765.4 270 RUN Отсутствие знака равенства в строке 10 показывает, что здесь используется «многострочная» функция. Сама функция определена в строках 20 и 30. Определение функции заверша- ется оператором FNEND. Результат выполнения этой «много- строчной» функции в строке 120 распечатывается оператором PRINT (строка 130). В строках 100 и 110 производится считы- вание чисел из DATA-файла (строка 140), которые вводятся затем в строку 120 для последующих вычислений. Ниже приведены еще два интересных примера применения, из которых следует, что подобная функция может включать не только арифметическую обработку. Пример: 10 DEF FNM(X, Y) 110 LET Z = FNM (А, В) Определение 20 LET FNM = X (несколько 30 IF Y<=X THEN GOTO 50 строк) 40 LET FNM = Y 50 FNEND
348 Глава 6 В этом примере в строке 20 определена функция FNM = X и если X больше или равно Y, то происходит переход програм- мы в строку 50. Если же указанное выражение ложно, то FNM = Y. Описанный здесь метод обработки можно использовать так- же и в других местах для программирования FNM с последую- щими переменными, которые требуется обработать в соответ- ствующей части программы. Такими переменными могут быть, например, А и В, и запрос на выполнение можно осуществить по команде LET Z = FNM(A, В). Во всех остальных подпро- граммах FNM можно применять, просто присваивая вычислен- ную величину FNM другим переменным. Следующий пример иллюстрирует цикл, при каждом повто- рении которого изменяется величина определенной переменной. Определение (несколько строк) 10 DEF FNF(N) 20 LET FNF=1 30 FOR K=1 TO N 40 LET FNF = K*FNF 50 PRINT FNF 60 NEXT К 70 END RUN 1 2 6 24 120 Эта программа производит следующие вычисления: цикл 1: 1X1 = 1 цикл 2: 2X1 = % цикл 3: 3X2 = 6 цикл 4: 4X4 = 16 цикл 5: 5X24 = 120 Если N = 5, то после окончания вычислений FNF=120. Следует отметить, что в большинстве Бейсик-диалектов мно- гострочные функции отсутствуют. Если же попытаться в них реализовать такую функцию, то система выдаст диагностику с указанием о синтаксической ошибке. Особое место занимают так называемые функции, опреде- ляемые пользователем, которые пользователь использует для связи между языком Бейсик и машинным языком. Такие функ-
Языки программирования высокого уровня — Бейсик 349 ции особенно необходимы при осуществлении связи через ши- ны адресов, данных и управления периферийными схемами, та- кими, как аналого-цифровой и цифро-аналоговый преобразо- ватели, а также сложными схемами управления исполнитель- ными устройствами при реализации различных процессов. Без использования DEF USR-функций такую связь реали- зовать невозможно, так как программист не знает, каким имен- но образом интерпретатор управляет ЗУ и где хранятся тре- буемые данные. Программируя DEF USR-функции с последую- щими номерами от 0 до 9 включительно, можно вызывать из Бейсик-программ подпрограммы, написанные на машинном языке. Если программа встречает DEF USR-оператор, то ее дальнейшее выполнение продолжается по адресу, который оп- ределяется заранее с помощью оператора, расположенного, на- пример, в начале программы. Если программируется DEF USR0 = &HF9F0, то в случае считывания в программе Х = = USR0(X) происходит переход в подпрограмму с номером О, написанную на машинном языке и имеющую первую команду, которая находится по адресу F9F0i6. В момент перехода X помещается в аккумулятор с плаваю- щей точкой, адрес которого находится в регистре HL. В ре- гистр А сообщается, какое числовое представление имеет X: в виде двухбайтового целого числа (А = 2), десятичного числа с одинарной точностью (А = 4) или десятичного числа с двой- ной точностью (А = 8). Если переменная представляет собой строку символов, то А = 3. Кроме того, имеется возможность ввести с помощью опера- тора РОКЕ на соответствующие места в подпрограмме данные, которые в дальнейшем, когда выполнение Бейсик-программы будет продолжено, считываются из подпрограммы с помощью оператора РЕЕК. Эти операторы более подробно будут рассмотрены в сле- дующем разделе, где пойдет речь об обработке байтовой ин- формации. Возврат из Бейсик-подпрограммы можно осуществить, по* мещая в конце ее команду возврата RET. При таком способе возврата подразумевается, что результат обработки попадет в регистр HL. После возврата Бейсик-программа считывает из HL соответствующие данные и присваивает числовое значение переменной, которая указана в операторе USR. Перед вводом подпрограммы следует зарезервировать тре- буемое количество ячеек в оперативном ЗУ. Это можно сде- лать с помощью оператора CLEAR п, ш, где первая ячейка ЗУ задается гл, а число ячеек — п. Оперативное ЗУ необходимо резервировать в области со старшими адресами, так как об- ласть с младшими адресами требуется для обеспечения работы
350 Глава 6 интерпретатора. Интерпретатор использует ЗУ оптимальным образом, поэтому для резервирования ЗУ под одну или не- сколько подпрограмм обычно применяется оператор CLEAR. Один из примеров связи Бейсик-программы с подпрограм- мой, написанной на машинном языке, выглядит следующим об- разом: 10 P=<SHFQFO: REM НАЧАЛЬНЫЙ АДРЕС 20 CLEAR 100 ?Р: REM РЕЗЕРВИРОВАНИЕ 30 REMX + 1 ВЫПОЛНЯЕТСЯ полпрограммой 40 DATA&H34:REM HL Н ^5 DAТАДНС9:REH RET SO F0R’,’=PT0P 90 REA DM 100 PORE'v'jW .110 NEXT 120 DEF USRO •= P 130 t=0 140 K=’J3R0( X> 150 PR IN Г X 1fc0 IF *< 100G0T0140 170 ENO Структурная схема этой программы приведена на рис. 6.6. В строке 10 для Р присваивается значение адреса первой ячейки ЗУ. В строке 20 для Р с помощью оператора CLEAR 100, Р ре- зервируется 100 байт. В строках 40—80 располагаются после- довательно отдельные команды подпрограммы, оформленные в виде файла данных. Эта подпрограмма производит кодирова- ние в шестнадцатеричном коде. Такое кодирование можно реа- лизовать и в восьмеричном варианте. Как показано в этом примере, при шестнадцатеричном вводе данных перед кодом необходимо помещать &Н. Команды записываются в требуемые ячейки ЗУ с помощью оператора READ, который считывает их одну за другой из файла данных. Оператор РОКЕ переписывает данные в ЗУ. Увеличение адреса на 1 происходит в строках 80—110. С по- мощью оператора FOR.. .NEXT переменная Y, начиная с Р, увеличивается каждый раз на 1 и достигает значения Р = Р+2. Переменная Y снова появляется в операторе РОКЕ в строке 100. При каждом прохождении цикла, которое совершает эта короткая подпрограмма, оператор READ считывает из файла данных последовательные байты, которые затем записываются оператором РОКЕ в требуемые ячейки ЗУ. В строке 120 ука- зано, что первая команда находится в ячейке ЗУ, заданной че- рез Р в строке 10. В данном примере подпрограмма является достаточно про- стой и состоит только из команды HL = HL + 1, после которой следует RET. Основная программа начинает выполняться со строки 130, где фиксируется Х = 0. В строке 140 оператор X=USR0(X)
Языки программирования высокого уровня — Бейсик 351 осуществляет переход в подпрограм- му, где X увеличивается на 1. После возвращения X распечатывается и, если Х< 100, в строке 160 происходит обратный переход в строку 120, отку- да затем осуществляется повторный переход в подпрограмму, где X снова увеличивается на 1. Следует отметить, что иногда по отношению к USR-оператору проявля- ется некоторое непонимание. В ряде диалектов Бейсика можно записывать результат в определенную ячейку ЗУ, куда по ходу выполнения программы интерпретатор передает данные. Мо- жет оказаться, что, перед тем как бу- дет совершен обратный переход, не- обходимые данные появятся в опреде- ленном регистре. Иногда оказывается невозможно совершить обратный пе- реход с помощью оператора RET, и этот переход подготавливается в под- программе с помощью оператора JMP. Адрес обратного перехода находится’ в определенной ячейке ЗУ, откуда его можно извлечь известными способа- ми. Руководство для пользователя по языку Бейсик, используемое для ра- боты на микроЭВМ, должно содер- жать всю необходимую информацию. Следует отметить, что USR-оператор имеется как в обычном варианте Бей- сика (4К), так и в его расширенной версии (8К). Рис. 6.6. Структурная схе- ма программы, связываю- щей Бейсик с машинным языком. 6.9. Обработка строк символов В предыдущих разделах уже рассматривалось понятие строки символов, являющейся группой буквенно-цифровых символов, которые представляют собой какой-либо текст, чис- ло или код. Символы, находящиеся в такой строке, обычно ко- дируются в коде ASCII (табл. 6.1). Если требуется использо- вать какой-либо текст многократно, то ему присваивается пере- менная в форме буквы с последующим знаком доллара ($). Переменная, которая представляет данные в коде ASCII, на- зывается текстовой переменной. Как уже указывалось в преды- дущих разделах, числовые переменные (цифры, выраженные в
352 Глава 6 Таблица 6.1. Коды ASCII ASCII (десятичн.) Знак ASCII (десятичн.) Знак 65 А 10 подача 66 В строки 67 13 возврат С 32 пробел 68 D 33 ! 69 Е 34 70 F 35 =# 71 G 36 $ 72 Н 37 % 73 I 38 & 74 J 39 / 75 К 40 ( 76 L 41 ) 77 М 42 * 78 N 43 + 79 О 44 80 Р 45 — 81 Q 46 82 R 47 / 83 S 48 0 84 Т 49 1 85 и 50 2 86 V 51 3 87 W 52 4 88 X 53 5 89 Y 54 6 90 Z 55 7 56 8 57 9 коде, отличном от ASCII) представляются только одной буквой или буквой и цифрой (от 0 до 9). Текстовые переменные можно обрабатывать с помощью опе- раторов READ, LET и PRINT, при этом программа существен- но упрощается, особенно в случае обработки административ- ных данных. Выше уже приводился пример с накладными, где при описании изделий такие параметры, как вес, единицы из-
Языки программирования высокого уровня — Бейсик 353 мерений, тип упаковки, имя и адрес клиента, обрабатываются наиболее эффективно именно с помощью текстовых перемен- ных. Максимальное число символов, из которых состоит текст, в общем случае равно 15. Если это число почему-либо нас не удовлетворяет, то следует сообщить об этом микроЭВМ с по- мощью оператора DIM (от английского слова Dimension — размерность). Этот оператор помещается в программе перед строкой символов и имеет вид: DIM А$ (5) В$(30). При та- кдй записи для А$ будет зарезервировано 5 символов, а для В$ — 30 символов. Для иллюстрации обработки строк символов можно приве- сти следующий пример: NEW 10 DIM А$ (19),В$ (7),Х$ (16), Z$ (20) 20 READ А$, В$, Х$ 30 PRINT А$, В$, Х$ 40 INPUT Z$ 50 PRINT Z$ 60 DATA „УМНОЖЕНИЕ”, „ДЕЛЕНИЕ” „ИЗВЛЕЧЕНИЕ КОРНЯ” 70 END RUN УМНОЖЕНИЕ ДЕЛЕНИЕ ИЗВЛЕЧЕНИЕ КОРНЯ ? ВОЗВЕДЕНИЕ В СТЕПЕНЬ ВОЗВЕДЕНИЕ В СТЕПЕНЬ Эта программа начинается с задания размерности различ- ных текстовых переменных. Длина текста указывается в скоб- ках после соответствующей переменной. Заметьте, что тексто- вые переменные, находящиеся в строке 10, разделены запя- той. Аналогичное разделение наблюдается также и для данных в строке 20, где оператор READ считывает соответствующие тексты из файла данных. В строке 30 происходит распечатка этих текстовых переменных по команде PRINT. В строке 40 программа выполняет команду INPUT, после которой она оста- навливается и в нее с помощью клавиатуры вводится пере- менная Z$. В данном примере вводятся слова «возведение в степень» и нажимается клавиша RETURN. После этого про- грамма продолжается и на следующей строке будут напечата- ны слова «возведение в степень». По команде INPUT програм- ма останавливается и система посылает запрос (?), в ответ на который с клавиатуры вводится требуемый текст. Переменная
354 Глава 6 Z$ не должна превышать 20 символов, включая пробелы, так как в строке 10 этой переменной присвоена размерность, рав- ная 20. Если ввести более длинный текст, то программа «об- режет» его после 20-го символа. Для обработки текстовых переменных существует ряд спе- циальных функций LEN, LEFTS, RIGHTS и MID$, которые отсутствуют в стандартном варианте Бейсика. Оператор LEN задает длину строки с символами, т. е. число символов в тек- сте, включая пробелы. Подобная функция требуется для того, чтобы принтер мог напечатать текст определенной длины. С помощью функции LEN задается длина текстовой строки, после распечатки строки длиной в LEN символов принтер пе- реходит на следующую строку. Функции LEFTS и RIGHTS можно использовать для того, чтобы наложить ограничение на какое-либо слово или текст. Функция LEFTS, после кото- рой указывается текстовая переменная и число символов (п), позволяет выбрать из соответствующего текста «левую» его часть длиной в п символов. Функция RIGHTS извлекает из текста его «правую» часть, а функция MID$—«среднюю». По- следнюю функцию можно применить в том случае, когда в се- редине строки находится переменная (например, цена изделия, зависящая от объема заказа), которую мы собираемся затем об- рабатывать на микроЭВМ. Другой пример (из области плате- жей) : «Вы еще можете купить на оставшиеся... рублей», где количество рублей зависит от величины денежного остат- ка. Величины подставляемых денежных сумм зависят от конк- ретных условий и для каждого клиента определяются отдель- но. При этом текст «Вы еще можете купить на оставшиеся... рублей» остается всегда неизменным. С помощью функции MID$ денежная сумма извлекается из строки и обрабатывается отдельно перед тем, как она бу- дет напечатана в тексте накладной. Применение этих операторов можно проиллюстрировать с помощью следующих примеров. Пример применения функции LEN: 100 READ А$ 110 LET X = LEN(A$) 120 PRINT X 130 DATA „ТРАНЗИСТОРЫ” 140 END RUN 12 С помощью оператора READ из файла данных считывается текст А$, в данном случае ТРАНЗИСТОРЫ. В строке НО длина текста определена символически в виде текстовой пе-
Языки программирования высокого уровня — Бейсик 355 ременной, в строке 120 этот текст распечатывается по коман де PRINT. Пример применения функции LEFT$: 100 READ А$ ПО LET X$=LEFT$(A$, 8) 120 PRINT Х$ 130 DATA „БУТЫЛКА ВИНА” 140 END RUN БУТЫЛКА В данном примере восемь символов выбираются из левой части текстовой строки и затем распечатываются. Эти символы (БУТЫЛКА ВИНА) образуют слово БУТЫЛКА. Как уже от- мечалось выше, таким же образом можно выбрать из текста некоторую его правую часть, используя для этой цели оператор RIGHTS Пример применения функции MID$: 100 READ А$ ПО LETX$=MID$ (А$,3, 5) 120 PRINT Х$ 130 DATA „В ASCII-КОДЕ” 140 END RUN ASCII В данном примере с помощью оператора MID$ из текста „В ASCII-КОДЕ” извлекается фрагмент ASCII. Первая цифра после А$ указывает позицию первого символа, который извле- кается из А$, а вторая цифра указывает число извлекаемых символов. Если требуется произвести цифровую обработку чисел, на- ходящихся в строке символов, то после вызова эти числа сна- чала преобразуются из ASCII-кода в десятичный код. Такое преобразование осуществляет оператор VAL (VALue — вели- чина). Обратную опрацию производит функция STR$, кото- рая превращает число в строку ASCII-символов. Пример применения функции VAL: 100 READ А$ ПО LET X$=LEFT$(A$,3) 120 LET Y=VAL(X|) 130 PRINT Y 140 DATA „159 ДИОДОВ”
356 Глава 6 150 END RUN 159 Здесь вызывается А$ и с помощью LEFT$ извлекается ASCII-число 159, которое находится в тексте «159 ДИОДОВ». В строке 120 получаются десятичные значения для символов 159 с помощью оператора LET Y$ =VAL(X$), в результате чего число 159, представленное в коде ASCII, преобразуется в десятичное число 159. Следующий пример: 100 LET X$=STR$ (159) 110 PRINT Х$ 120 END RUN 159 Здесь функция STR$ преобразует десятичное число 159 в строку ASCII-символов, которая состоит из символов 1, 5 и 9. Помимо операторов VAL и STR$, известны также операто- ры ASC и CHR$, предназначенные для преобразования како- го-либо символа в ASCII-число и ASCII-числа в символ соот- ветственно. Здесь ASCII-код задается в десятичных величи- нах, при этом преобразования относятся к одному символу. Если требуется преобразовать несколько символов, то для этого следует использовать циклическую процедуру. Если аргументом оператора ASC является строка симво- лов, то при каждом вызове будет преобразован только первый символ. Пример применения функции ASC: 10 READ А$ 20 LET Y = ASC(A$) •30 PRINT Y 40 DATA „BASIC” 50 END RUN 66 В данной процедуре ASCII-код для первой буквы слова «BASIC» преобразуется в десятичное число, а именно чис- ло 66, которое является числовым значением буквы В в ASCII- коде. Пример применения функции CHR$:
Языки программирования высокого уровня — Бейсик 357 10 LET Х = 65 20 Y$=CHR$(X) 30 PRINT Y$ 40 END RUN В этом примере десятичная величина (65) преобразуется в ASCII-символ, в данном случае в букву А. В следующей программе показано, как с помощью опера- тора CHR$ (X) можно напечатать таблицу ASCII-кода. В ко- лонках с цифрами представлены эквивалентные десятичные значения наборов битов в ASCII-коде, с помощью которых оп- ределяются символы, приведенные в таблице. 10 LPRINT"ASCII" .TAJBC10?' СИМВОЛ 7ТАВ (20 ) "ASCII" ЛАВ (30 > СИМВОЛ 7 0/ Х = б4 30 х=хн 40 ¥*=CHR$(X) 50 V^-33 Mt = CHR:5(V) '' 0 LРRI МТ X ’ ТАВ (10) ¥$ ? TAB (20 ) 'J i Т АВ (30) W* SO IFXC=9DG0TO3O •90 ENO ASCII СИМВОЛ А ASCI I символ А п В 33 С 34 ^8 D 35 о Е 36 $ ^0 1“ 37 % Ij 33 & -7 П н 39 I 40 -г4 •J 41 > к 42 Т'Ь 1. 43 +• м 44 78 N 45 - 7<? 0 46 - S0 Р 47 / .81 О •43 о О П R 49 1 •о о В 50 э S4 Г •51 3 S5 и 4 86 7 г53 5 07 N •54 6 38 X 55 7 39 Y 56 S 90 2 57 9 “91 ч 58 X В строке 20 переменной X присваивается значение 64, кото- рое в строке 30 увеличивается на 1. Затем в строке 40 опера- тор CHR$ (X) определяет символ У$. Далее X уменьшается
358 Глава 6 на 33 и это значение присваивается переменной V. Оператор CHR$ (X) определяет соответствующие символы для V. Наконец, в строке 70 напечатаются ASCII-цифры и симво- лы в колонках. Преобразование в десятичные цифры, равные Х+1, продолжается с помощью оператора IF.. .THEN GOTO, который обеспечивает обратный переход в строку 30. Этот цикл повторяется до тех пор, пока X не превысит величину 90, по- сле чего программа переходит к оператору END. 6.10. Обработка байтов данных Как уже отмечалось, в случае ввода и вывода данных с помощью клавиатуры, видеодисплея и принтера появляется возможность вывода данных через шины данных, адресов и управления, для того чтобы осуществлять связь с более изби- рательными средствами ввода и вывода данных. При этом под- разумевается управление процессами, обработка измеренных данных, а также такие операции, как управление игрушечной железной дорогой, системой центрального отопления и т. д. При использовании языка Бейсик управление работой ЗУ осуществляет система. Пользователь системы не знает, где именно в ЗУ хранится информация, которую он обрабатывает. Интерпретатор обеспечивает адресацию этой информации и с его помощью можно получить к ней доступ. Хотя пользователь и не имеет прямого доступа к ЗУ, он тем не менее может производить обработку байтов данных, используя для этой це- ли операторы РЕЕК и РОКЕ. Оператор РЕЕК, после которого следует десятичный адрес ЗУ, заключенный в скобки, обеспе- чивает считывание содержимого соответствующей ячейки ЗУ. Оператор РОКЕ с последующим десятичным адресом и соот- ветствующей переменной обеспечивает запись байта информа- ции в ЗУ. РОКЕ имеет сходство с командой STORE, а РЕЕК — с командой LOAD на машинном языке. Тот факт, что програм- ма обрабатывает байтовые данные в десятичной форме, явля- ется несущественным, так как результат оказывается в обоих случаях одним и тем же. При тестировании и отладке про- граммы это может приводить к затруднениям, если промежу- точные результаты требуются в десятичной форме, поэтому некоторые диалекты Бейсика обеспечивают возможность пе- чати данных в шестнадцатеричном коде. Такие данные можно* вводить и с клавиатуры, при этом для шестнадцатеричных пе- ременных и чисел необходимо использовать определенные ко- дирующие символы, такие, как &Н. РОКЕ и РЕЕК можно также применять для обмена данны- ми между программами, написанными на Бейсике и машинном языке.
Языки программирования высокого уровня — Бейсик 359 Для иллюстрации применения РОКЕ и РЕЕК можно приве- сти следующий пример: NEW 10 LET А=15 20 РОКЕ 35001,А 30 Х = РЕЕК(35001) 40 PRINT НЕХ$ (X) 50 END RUN F Число 15 с помощью команды РОКЕ передано в ячейку 35001. В строке 30 это число считывается из ЗУ, и в строке 40 оно выводится на печать оператором PRINT НЕХ$ (X) в шест- надцатеричной форме (F). Оператор НЕХ$ (X) преобразует переменную X в шестнад- цатеричный набор цифр, оператор ОСТ$ (X)—в восьмерич- ный набор цифр. Другой пример применения оператора НЕХ$ (X): NEW 10 INPUT X 20 PRINT НЕХ$ (X) 30 END RUN RUN ?255 ? 1023 00FF 03FF Еще один пример, в котором реализуется операция У= — NOT X: NEW 10 INPUT X 20 PRINT HEXS (X) 30 Y = NOTX 40 PRINT HEXS (Y) 50 END RUN RUN RUN ? 0 ? 7 ? 255 0 7 255 FFFF FFF8 FF00 X = 0000 0000 0000 0000 0000 0000 0000 0111 0000 0000 1111 1111 Y= 1111 1111 1111 1111 1111 1111 1111 1000 1111 1111 0000 0000
360 Глава 6 Если в этой программе X, Y и Z заданы в виде десятичных переменных, то результат будет выражен в дополнительном коде, т. е. в виде NOT Х= — (Х+1). NEW 10 INPUT X 20 PRINT X 30 Y = NOTX 40 PRINT Y 50 END RUN RUN RUN RUN ? 0 ? 7 ? 255 ? -1 0 7 255 -1 -1 -8 -256 0 Связь между программами, написанными на языке Бейсик и машинном языке, осуществляется с помощью специальных команд. В предыдущих разделах обсуждалась «функция, опре- деленная пользователем», USR(X), которая предназначена для решения этих проблем. В системах с дисковыми ЗУ или кассетными магнитофонами должна быть предусмотрена возмож- ность реализации связи с указанными устройствами. Как из- вестно, для связи с кассетным магнитофоном применяются, в ча- стности, операторы CSAVE (запись данных) и CLOAD (считы- вание данных). После этих операторов в скобках указывается имя файла. Первая буква имени является обычно идентифицирующим символом, который позволяет отыскать на ленте соответству- ющий файл в процессе считывания, поэтому на одной и той же ленте нельзя использовать имена файлов „ААР” и „ANTON”, так как они оба начинаются с одной и той же буквы А. 6.11. Индексированные переменные Кроме численных переменных, обозначаемых одной бук- вой (А) или буквой и цифрой (А1), и текстовых переменных, задаваемых одной буквой и знаком доллара (А$), использу- ются также индексированные переменные, которые представ-
Языки программирования высокого уровня — Бейсик 361 ляются в Бейсике одной буквой или буквой с цифрой, после которых в скобках помещается целое число (А1(2)). Эти пе- ременные являются элементами массива чисел; целое число, заключенное в скобки, указывает место индексированной пере- менной в данном массиве. Общее число элементов в массиве указывается с помощью команды DIM, например в виде DIM А (5), В (5), которая появляется до начала каких-либо опе- раций с этими элементами. Интерпретатор заказывает столько ячеек ЗУ, сколько тре- буется для размещения данного массива чисел в ЗУ. Когда используется оператор DIM, система резервирует определен- ное число ячеек ЗУ, например 10. Если заказать с помощью DIM число ячеек, превышающее размерность массива, то та часть ЗУ, которую можно было бы использовать для других целей, останется неиспользованной. Если число элементов мас- сива превышает размерность, указанную в DIM, и объем ЗУ„ зарезервированный системой, то те элементы, которые попа- дают за пределы этого объема, будут отброшены. Таким об- разом, по указанным выше причинам следует всегда с по- мощью команды DIM резервировать такой объем ЗУ, который точно соответствует размерности массива индексированных пе- ременных. На практике массивы индексированных чисел часто исполь- зуются для хранения таблиц в ЗУ. Возьмем в качестве приме- ра ценник для транзисторов разных типов с ценами, указанны- ми для партий по 10, 100, 500, 1000 и 2500 шт. В результате получим двумерную матрицу, в которой можно обозначить строки (тип транзистора) одной буквой и одной цифрой, а различные колонки — с помощью числа, заключенного в. скобки. При вычислении цен, когда требуется произвести оцен- ки на основе объема продажи, потребуется именно этот метод хранения информации, используемый в процедурах вычисления и оформления накладных соответствующих изделий, в данном случае транзисторов. С другой стороны, если потребуется об- работать данные в матричной форме в более широких мас- штабах, то в расширенном варианте Бейсика можно найти для этой цели ряд дополнительных команд, выполняющих дейст- вия над матрицами, которые отличаются от стандартных функ- ций приставкой МАТ..., означающей, что здесь мы имеем делс^ со специальной матричной функцией.
262 Глава 6 6.12. Многократное применение переменных Переменные можно использовать в любой программе мно- гократно, если при этом не возникают какие-либо осложнения. В частности, переменную N, которая используется в одном цик- ле, можно применить и в другом цикле при условии, что ее чис- ловое значение выбрано соответствующим образом. Эту опера- цию можно осуществить с помощью оператора LET:LET N = .... Пример: допустим, что из файла данных необходимо счи- тать последовательно пять элементов. С этой целью можно ис- пользовать следующую программу: 150 FOR N = 1 ТО 5 160 READ F(N) 170 NEXT N Если потребуется затем произвести считывание из того же массива с определенным числом Оставшихся элементов, то для этого придется переопределить N, например в виде FOR N=8 ТО 10: 200 FOR N = 8 ТО 10 210 READ F(N) 220 NEXT N 300 DATA 2,23,- 1,345, 01 и т. д. Можно использовать N и для другой цели, например в ка- честве переменной результата или входной переменной для какого-либо конкретного расчета. В последнем случае эту пе- ременную придется каждый раз переопределять так, как пока- зано в следующем примере: НО LET N=A 120 Z = N|5 130 PRINT Z
Языки программирования высокого уровня — Бейсик 363' 6.13. Представление чисел При обработке чисел используются следующие численные выражения: а) целые числа (положительные или отрицательные), пред- ставленные двумя байтами в диапазоне от —32768 до +32767; б) числа с десятичной точкой и одинарной точностью в диа- пазоне от —999999 до + 999999; в) числа с двойной точностью в диапазоне от —10,7+ 1 до» + 1017—1. г) числа в Е-представлении (с плавающей точкой), ман- тисса которых лежит в диапазоне между —999999 и +999999, а показатель степени (порядок) Е — от —37 до +37. д) числа в D-представлении (Е-представление с двойной точностью), мантисса которых лежит между —1017+1 и» + 1017—1, а показатель степени D — между —37 и +37. Эти формы представления чисел используются во многих диалектах Бейсика, в частности версии расширенного Бейсика. Microsoft. Численные выражения, указанные в пп. б и г, имеют дли- ну 4 байт, из которых 23 бит отведены под мантиссу и знак, а 8 бит — под экспоненту Е и знак. Для численных выраже- ний, указанных в пп. в и д, требуется 8 байт, из которых 55 бит (16 десятичных цифр) отводятся под мантиссу и знак, а 8 бит — под показатель степени D и знак. Если числа и переменные, указанные в п. а, требуется задать в явном виде как целые числа, то для этой цели после соответствующего числа или переменной ставится сим- вол %: NEW 10 INPUT А % 20 INPUT А % 30 END RUN RUN ?10000 ?32768 10000 ПЕРЕПОЛНЕНИЕ ЦЕЛОГО ДЕСЯТИЧ- НОГО ЧИСЛА После второй команды RUN происходит превышение чис- ленного диапазона +32767, что приводит к появлению диагно- стическрго сообщения «переполнение целого десятичного чис- ла». Если тип чисел или переменных явно не задан, то интер- претатор предполагает («по умолчанию»), что эти числа или
4364 Глава 6 переменные имеют одинарную точность, т. е. в числовом диа- пазоне от —999999 до +999999 для представления соответст- вующих десятичных чисел (б), а для чисел, значения которых оказываются вне указанных границ, применяется Е-представле- ние (г). Последняя значащая цифра в обоих случаях округля- ется, причем в диапазоне до 5 включительно — с недостатком, а между 6 и 9 — с избытком до 10. Если требуется явное представление переменных и чисел, как в пп. б и г (одинарная точность), то его можно указать с помощью восклицательного знака (!), поставленного после соответствующего числа или переменной. Следующая програм- ма иллюстрирует переход от чисел с десятичной точкой (б) к числам в Е-представлении (г): NEW 10 INPUT X 20 Y = X+1 30 X = Y 40 PRINT X 50 GOTO 20 END RUN (Y = X+1) RUN (Y = X- 1) ? 999999 ? -999999 (1000000) IE+ 06 — 1E + 06 (-1000000) IE+ 06 — 1E + 06 (1000005) 1.00001E + 06 — 1.00001E + 06 (-1000005) (1000015) 1.00002E + 06 — 1.00002E + 06 (-1000015) Задается число 999999, которое затем увеличивается на 1 в циклическом режиме повторения. После 999999 следует чис- ло 1000000 ( = 106), которое выражается как 1E-J-06, а в дей- ствительности как 1.00000Е+06, однако нули, стоящие после десятичной точки, обычно не приводятся. Число 1Е+06 появля- ется затем еще пять раз, после чего появляется 1.00001Е+06 (10 раз), затем 1.00002Е+06 (10 раз) и т. д. Появление 1Е+06 только пять раз связано с тем, что, на- чиная с 1000001 и кончая 1000005, каждый раз происходит округление в сторону уменьшения, т. е. первое округление при-
Языки программирования высокого уровня — Бейсик 365 водит к 1000000= 1Е +06, а между 1000005 и 1000015— к 1000010 ( = 1.00001 E-f-б) и т. д. Таким образом, численное выражение после 106 автомати- чески переходит из представления с десятичной точкой (б) в Е-представление (г). Если каким-либо числам или переменным требуется присво- ить двойную точность, то после соответствующего числа или переменной помещается знак (знак номера), например Z#=X#*Y*. Если числовые величины не определены, то интерпретатор обрабатывает их в некотором оптимизированном представле- нии либо как десятичные числа с одинарной точностью (б), либо как численные выражения в Е-представлении (г) с сохра- нением той точности, которая требуется для указанных чис- ленных выражений. Как уже отмечалось ранее, представление чисел с двойной точностью (используемое в научных расчетах) называется D-представлением. Следующий пример иллюстрирует переход от числа с десятичной точкой и двойной точностью к D-пред- ставлению: NEW 10 INPUT X# 20 Y# =X# + 1 30X#=Y# 40 PRINT X# 50 GOTO 20 END RUN ? 9999999999999995 '9999999999999999 1D + 16 =10000000000000000 ID +16 =10000000000000004 1.000000000000001D+ 16 = 10000000000000005 1.000000000000002D +16= 10000000000000015
366 Глава 6 В следующей программе переменные точно не определены. В программу вводятся три числа, которые обрабатывает и распечатывает микроЭВМ. Интерпретатор микроЭВМ обычно^ исследует представление чисел с десятичной точкой (б), а по- сле превышения численного диапазона (б) происходит пере- ход к Е-представлению (г): 10 INPUT A 20 PRINT A 30 END RUN RUN RUN ? 32768 ? 1000000 ? 999999 32768 IE+ 06 999999 В расширенной версии Бейсика могут быть использованью семь способов представления чисел: кроме названных выше- пяти добавляются представления в шестнадцатеричной и вось- меричной системах счисления. Чем выше точность представ- ления чисел, тем большее число байтов требуется для их хра- нения, в результате чего увеличивается объем ЗУ, используе- мый для хранения программы. В случае программ большого объема ЗУ необходимо использовать как можно более эконом- но, т. е.» другими словами, следует отдавать предпочтение двух- байтовому представлению целых чисел. Обработка чисел с более высокой точностью требует зна- чительно большего машинного времени. В частности, по этой причине при управлении каким-либо процессом заданные вре- менные ограничения могут быть не выполнены из-за того, что» требуемые данные будут обрабатываться слишком долго. В подобных ситуациях следует пытаться работать как можно больше с целыми числами. Еще один пример вычислений с использованием чисел э D-представлении: 10 INPUT X#, Y# 20 PRINT X#*Y# RUN ? 5555555555 ? 5555555555 3. 086419752746914D4-20
Языки программирования высокого уровня — Бейсик 367 По-видимому, здесь следует объяснить особенности Е- и D-представлений несколько подробнее. В представлении с пла- вающей точкой целые числа рассматриваются как числа с де- сятичной точкой справа от младшей цифры. Как уже отмеча- лось выше, при превышении диапазона этого представления автоматически происходит переход к Е-представлению и деся- тичная точка перемещается в позицию справа от старшей циф- ры. Иногда эта точка смещается также и в позицию перед старшей цифрой. Если переполнение возникает в случае целого числа из шести цифр, то правильная интерпрета- ция числового значения возможна только при помощи экс- поненты 4-06, располагаемой после Е, так как 1.00000-}-106 = =1000000. В ходе обработки десятичное число, содержащее десятич- ную точку, часто смещается вправо относительно десятичной точки, а уменьшение мантиссы компенсируется показателем степени Е по основанию 10. Десятичное число 123.4 превраща- ется при этом в 1.234Е + 02. Второе представление адекватно первому, так как 1.234ХЮ2 = 123,4. В случае десятичной дроби 0,00123456 старшая цифра, ко- торая не равна 0, перемещается влево, занимая позицию сле- ва от запятой, поэтому после Е указывается число разрядов, на которое запятая сдвинулась вправо. С другой стороны, при выполнении этой операции соответствующее число увели- чивается, поэтому нужно скорректировать это увеличение, используя отрицательный показатель степени по основа- нию 10. В данном примере представление вышеуказанной десятич- ной дроби с плавающей точкой имеет вид: 1.23456Е—03. Это вы- ражение эквивалентно предыдущему, так как 1.23456Х 10-3 = = 0.00123456. Перемещение цифр числа в сторону старших разрядов при- водит к тому, что в вычислениях, в которых участвуют числа, представленные с плавающей точкой, обычно производится обработка именно старших цифр, появляющихся затем и в ка- честве результата. Это связано с тем, что старшая цифра, ко- торая не равна 0, находится при переполнении в старшем раз- ряде соответствующей десятичной цифровой последовательно- сти. Это наблюдается как для целых чисел, так и для чисел с десятичной точкой. В младших разрядах цифры опускаются, после чего проис- ходит округление. При арифметической обработке представле-
368 Глава 6 ние чисел с использованием плавающей точки реализуется в программе наиболее простым способом. Сдвиг десятичной точ- ки и определение требуемой степени 10 как в Е-, так и в D-представлении обеспечивает интерпретатор. Пользователь должен только указать точность обработки, и, если отсутству- ет более подробное определение, интерпретатор использует представление с десятичной точкой и одинарной точностью, а при переполнении численного диапазона происходит автомати- ческий переход к Е-представлению. При выводе на печать числа с плавающей точкой необходи- мо преобразовывать в общепринятые представления прежде всего в тех ситуациях, когда необходимо выводить админист- ративные данные, например результаты оформления наклад- ных. Печать цены в 0,31 гульдена в виде F О.ЗЮООЕОО пред- ставляет собой численное выражение, с которым обычный по- купатель может быть незнаком и которое может привести к затруднениям при окончательном расчете. Обратное преобразование можно произвести с помощью оператора PRINT USING, в котором с помощью нескольких знаков типа заключенных в кавычки, задается формат чис- ла на выходе. То место, где должна находиться плавающая точка, указывается точкой в поле формата. Округление проис- ходит обычным образом, т. е. меньше 5 — в сторону уменьше- ния, а больше 5 — в сторону увеличения: NEW 10 PRINT X 20 PRINT USING „##.# #”;X 30 END RUN RUN RUN ? 0.31000E + 00 ? 3.10E + 01 ? 0.316 0.31 0.31 0.32 В Бейсике для представления десятичных чисел использу- ется не запятая, а точка, так как запятая служит здесь для другой цели, а именно для разделения чисел или переменных, находящихся на одной строке. Если при выводе административных данных потребуется запятая, то ее следует печатать как отдельный символ, для чего используются операторы, рассмотренные в разд. 6.9.
Языки программирования высокого уровня — Бейсик 369 6.14. Иллюстрация простых программ Для иллюстрации изложенного выше материала приведем в этом разделе несколько практических примеров коротких программ, показывающих, что в рамках Бейсика можно вы- полнять сложные вычисления, а также разнообразные опера- ции ввода и вывода с помощью простых операторов. Пример распечатки текста: 10 LETX=25 20 Y = X-*1.2’5 30 ’С$’0$?Е$ ;0 LPRINТTAB(0 ) X : 50 LPPINTTAB< 60 LPRINITAB(П* ^0 LPRINTTABt П) 30 LPR IN Г ГАВ ( 16 ) D$ ; °C LPRIN Г ГАВl23 'Е*; 100 LPRINГТА6(25Н? ПО DA ТА ”К5 " ’ ”KOFF IE ”; "А " ? ”F 1.25”,”F"? 120 END 2*5 KG K0FFIE A F 1.25 F 31.25 Этот пример дает представление о том, как выглядит про- грамма для вычисления цены товара и последующей распечат- ки этой цены в строке накладной ведомости. Чтобы понять, что именно делает программа при решении указанных выше задач, рассмотрим подробно используемые операторы. Оператор LET присваивает переменной X величину веса (25 кг), после чего эта величина умножается на цену 1 кг кофе (1,25 гульденов). В результате вычислений получается цена 25 кг кофе (переменная Y). Затем с помощью оператора READ текстовым переменным присваиваются те значения (фрагменты текста), которые нахо- дятся в файле данных (строка 110). Теперь известны все дан- ные, необходимые для оформления накладной и можно перей- ти к распечатке данных на бумаге. Для вывода данных ис- пользуются семь операторов LPRINT, после которых поставле- ны точки с запятыми, т. е. все данные будут напечатаны в од- ной строке. Оператор TAB указывает, где именно должны быть напечатаны соответствующие текстовые переменные. Позиции этих переменных указываются в скобках после операторов TAB. Файл данных вводится последним в строке 110. Програм- ма заканчивается оператором END. Если ввести команду RUN, то программа напечатает одну строку, показанную вни- зу под текстом программы. Следующий пример относится к вычислению и распечатке таблицы X, X2, X3 и ех:
370 Глава 6 10 LPRINT" ТАБЛИЦА Х1, Х2J; 20 LPRINI"X3 и ЕХР(Х>" 30 READA«bB$,C$?D$ 40 LPRINTAt; 50 LPRINГТАВ(5 )B$ ; 60 LPRINT7AB(10)C$; 70 LPRINГТАВ(15)D$ 80 DATA"X'S "X2"7*X3"»"EXP(X ) * 90 LETX=0 100 FORK=110100 110 Y-Xa? 120 Z=XA3 130 R=EXP(X) 140 LPRINTX? 150 LPRINTTAB(5)Y? 160 LPRINTTAB(10)Z; 170 LPRINTTAB(15)R 180 NEXTX 190 END ТАБЛИЦА X1, X2, ХЗ и EXP (X) X X2 X3 EXP(X) 1 1 1 2 4 8 3 9 27 4 16 64 5 25 125 6 36 216 7 49 343 8 64 512 9 81 729 10 100 1000 11 121 1331 12 144 1723 13 169 2197 14 196 2744 15 225 3375 16 256 4096 17 239 4913 18 324 5332 19 361 6859 20 400 3000 21 2.71328 7.33906 20.0355 54.5982 143.413 403.429 1096.63 2930.96 3103.03 22026.5 59874.1 162755 442413 1.2026ЕЮ6 3.26902E+06 3.33611E+06 2.4155ЕЮ7 01 6.56599ЕЮ7 01 1.73432E+03 4.Э5165Е+03 Выполнение программы начинается с команды распечатки текста (заголовка таблицы): ТАБЛИЦА XI, Х2, ХЗ и ЕХР(Х). Хцтя текстовые переменные располагаются в программе в двух строках, на выходе они появляются в одной строке, так как строка 010 заканчивается точкой с запятой (;). В строке 030 считываются текстовые переменные A$...D$, после чего происходит их вывод на печать. В строке 080 нахо- дится файл данных с соответствующими фрагментами текста, которые выводятся на печать. Оператор LPRINT TAB обеспе- чивает расположение соответствующих текстовых фрагментов в колонках с названиями X, X2, X3 и ех. В строке 090 происхо- дит присвоение Х = 0, а в строке 100 указывается, что таблица будет вычислена для значений Х=1—100. Далее в строках 110, 120 и 130 происходит вычисление X2, X3 и ех и полученные результаты присваиваются переменным Y, Z и R.
Языки программирования высокого уровня — Бейсик 371 После окончания вычислений производится печать Y, Z и R в таблице с использованием опе- раторов LPRINT, находящихся в строках 140—170. В строке 180 переменная X увеличивается на 1, после чего происходит обратный переход в строку 100. Эта про- цедура повторяется 99 раз, по- сле чего программа заканчива- ется в строке 190. Структурная схема данной программы приведена на рис. 6.7. Следующая программа фор- мирует таблицу децибел, т. е. вычисляет отношения мощностей и напряжений, которые соответ- ствуют определенным значениям децибел (DB) в диапазоне от 0 до 120 DB. Рис. 6.7. Структурная схема прог* раммы «таблица X, X2, X3 и ех». 5 LPRINTTABC5) "ТАБЛИЦА ДЕЦИБЕЛ" :LPR INT 10 PRINTTAB(1)"DB"; - 20 LPRINTTAB(1)"DB"; 30 PRINTTAB(10)"W2/W1"; 40 LPRINTTAB(10) "W2/W1"; 50 PR INTTAB (20) "U2/U1" 60 LPRINГТАВ(20)"U2/U1"; 70 PRINTsLPRINT SO X=0 90 Y -Юл ( X/10 ) 100 Z=10a(X/20) 110 PRINTTAB(1)X> 120 LPRINTTAB(1)X? 130 PR INTTAB(10)Y? 140 LPRINTTAB(10)Y; 150 PRINTTAB(20)Z 160 LPRINTTAB(20)Z 170 X=X+1 ISO IFXC--120G0T090 190 END ТАБЛИЦА ДЕЦИБЕЛ DB W2/W1 U2/U1 0 1 1 1 1.25393 1.12202 1.58439 1.25393 3 1.99526 1.41254 4 2.51139 1.58489 5 3.16223 1.77323 6 3.93107 1.99526 7 5.01137 2.23872 S 6.30957 2.51189 9 7.94328 2.31333 10 10 3.16228 11 12.5893 3.54313 12 15.8489 3.98107 13 19.9526 4.46684
312_________Глава. 6 _ _______________ В строках 5—70 находятся операторы LPRINT, с помощью которых печатаются заголовки колонок таблицы. В строке 80 переменная X, которая представляет собой число децибел, по- лучает числовое значение 0, в строке 90 вычисляется отношение Y(=W2/W1), а в строке 100: Z = U2/U1. Отношение мощно- стей W2/W1 = 10DB/1°, а отношение напряжений U2/U1 = 10DB/2. После вычисления обоих отношений происходит их вывод, который обеспечивают операторы в строках ПО—160. Вывод осуществляется как на экран дисплея (PRINT), так и на прин- тер (LPRINT). В строке 170 переменная X увеличивается на 1, а в строке 180 происходит обратный переход в строку 90. Затем вычисле- ние повторяется для нового значения X. После того как X становится больше 120 (120 DB), програм- ма переходит к оператору END. Блок-схема алгоритма приве- дена на рис. 6.8. На примере приведенной ниже программы будет показано, как выполняется короткая подпрограмма, используемая в ос- новной программе. Эта подпрограмма формирует цикл в ос- новной программе. В данном случае программа печатает группы, состоящие из текстовых и числовых переменных длиной по 5 слов, которые представляют собой обозначения ТТЛ- схем, после которых следуют значения четырех фиктивных цен. Число строк ограничено в данном случае тремя. Трем группам присвоены текстовые пе- ременные А$, В$ и С$. Строки рас- полагаются в файле данных одна за другой. Для разделения групп пере- менным А$, В$ и С$ присвоены оп- ределенные размерности. Первые пять текстовых фрагментов в кавычках от- носятся к А$, вторые пять — к В$ и третьи пять фрагментов — к С$. Из текста программы следует, что она состоит из основной программы (строки с 10 по 160) и коротких под- программ (строки 170—190 и 200— 220). Файл данных находится в строке 230. Г START Y 1Напечататъ1 I.заголовокI 6U | X(dBj-0 ~] 80 I Y=10x/l° I 90 | Z= 10x/2o| 100 / PRINT X,Y,Z/ 110-170 | X>X+1 | 170 </«l20>^-------- во [Нет Рис. 6.8. Структурная схема программы «напе- чатать таблицу децибел».
___________Языки программирования высокого уровня — Бейсик________________373 Печать данных проводится следующим образом: 10 DINA*(5):DINB*(5):DIMC*(5) 20 Y=0 30 G0SUB170 35 READA*(X) 40 LPR IN ГА*(О; 50 G0SUB200 60 G0T035 70 LPRINT SO GOSUB 170 S5 READBVX) 90 LPRINret(X)? 100 GOSUB2OO 110 G0T035 120 LPRINT 130 GOSUB170 135 READC*(X) 140 LPRINTCt(X)5 150 G0SUB200 160 GO TO 13*5 170 X=0 180 X=X + 1 190 RETURN 200 IF «'5THENG0 TO ISO 210 Y = Y+1 220 0N< GO 1070» 120.‘END 230 DATA "SN7400"," F 1.50%" F 1.40";" F 1.30";" F 1.20">"SN7401"," F 1 6C" " 1.50";" F 1.40";" F 1.30 ", "SN74 10 " ? " F 1.70"," F 1.60"," F 1.50"," F 1.40" SN740D F 1.50 F SN7401 F 1.60 F SN7410 F 1.70 F Сначала 1.40 F 1.30 F 1.20 1.50 F 1.40 F 1.30 1.60 F 1.50 F 1.40 обрабатывается строка символов A$, т. e. соот- ветствующие текстовые элементы считываются один за другим оператором READA$(X) и затем печатаются с использовани- ем оператора LPRINT А$(Х). При этом X представляет собой номер текстового элемента и пробегает значения 1...5, в ре- зультате печатаются все текстовые элементы из файла дан- ных. Таким образом, здесь для определения последовательных значений X используется отдельная подпрограмма. После пе- чати первых пяти текстовых элементов происходит переход к обработке В $, а затем — к С $. Величины X формируются в подпрограмме следующим об- разом. В строках 170 и 180 с помощью операторов Х = 0 и Х= = Х+1 переменной X присваивается значение 1. После этого, следует оператор RETURN, т. е. происходит обратный переход в основную программу для выборки и распечатки текста, а затем реализуется переход в строку 50, где находится опера- тор GOSUB 200. В строке 200 подпрограмма «выясняет», не является ли Х<5, и, если ответ оказывается положительным (Да), проис- ходит обратный переход в строку 180. Таким образом, X каж- дый раз увеличивается на 1 и с использованием операторов READ А$ (X) и LPRINT А$ (X) в основной программе печата- ются пять текстовых элементов из строки символов А$. При Х>5 программа переходит в строку 210 и переменная Y увели-
374 Глава 6 чивается на 1. Эта переменная используется для того, чтобы с помощью следующего оператора в строке 220 инициировать переходы в строки 70 и 120, в которых находятся отправные точки тех частей программы, которые обеспечивают выборку и распечатку текстовых переменных В$ и С$. При Y=3 про- грамма переходит к оператору END. В строке 10 основной программы указана размерность тек- стовых переменных. Операторы, находящиеся в этой строке, сообщают программе, что каждая переменная состоит из пяти отдельных текстовых элементов. В строке 30 с помощью опера- тора GOSUB 170 реализуется переход, после которого вычис- ляется значение X. Из подпрограммы в строке 190 происходит обратный переход в строку 35 (при использовании оператора RETURN строка, в которую возвращается программа, не ука- зывается), за которым следуют выборка и распечатка соответ- ствующего текста. Заметим, что в строке 50 инициируется переходе подпрограм- му для того, чтцбы увеличить X на 1. Далее с использованием оператора RETURN происходит возврат в основную программу, однако теперь уже в строку 60, что вызвано действием опера- тора GOSUB в строке 50. Для печати следующего текста сначала с помощью опера- тора GOTO 35 осуществляется переход обратно в строку 35. В строке 50 снова инициируется переход в подпрограмму, и эта •операция повторяется до тех пор, пока не будут распечатаны все пять текстов. Отсюда видно, что эта часть программы формирует с по- мощью подпрограммы цикл, который повторяется пять раз, т. е. до тех пор, пока в подпрограмме (см. строку 220) не про- изойдет переход в строку 70, где находится «пустой» оператор LPRINT, обеспечивающий печать «пустой» строки без всякого текста. Текстовые переменные В$ и С$ обрабатываются в ходе дальнейшего выполнения программы по аналогии с переменной А$, и, наконец, при У > 2 в строке 220 оператор END произво- дит останов. Структурная схема данного алгоритма приведена на рис. 6.9. Здесь имеются два цикла, один для X и другой для Y. Пример простой программы, в которой определяются такие величины, как коэффициент усиления AV и входное сопротив- ление RIN для транзисторной схемы с заземленным эмиттером, будет проанализирован ниже. Программа предназначена для изучения влияния коэффициента усиления по току HFE и соп- ротивления эмиттера RE на коэффициент усиления по напря-
Языки программирования высокого уровня — Бейсик 375- Рис. 6.9. Структурная схема программы распечатки строк символов и чисел?. жению и входное сопротивление. Сначала программируются* HFE и RE, и затем вычисляются величины AV и RIN. Из текста программы следует, что строки 10—70 использу- ются для записи с помощью операторов REM формул, необхо- димых для вычисления величин AV и RIN, указанных на рис. 6.10. Эти формулы определяют порядок вычисления AV и RIN в ходе дальнейшего выполнения программы. Строки‘ 90—145 содержат операторы для печати заголовков колонок искомой таблицы, а строки 150—191—входные операторы, с помощью которых вводятся параметры схемы после команды RUN. Введенные величины распечатываются как первые значе- ния в соответствующих колонках с использованием операторов LPRINT, расположенных в строках 200—250. Затем вычисляют- ся AV и RIN с помощью операторов, находящихся в строках 270—315. Вычисленные величины округляются до целых чисел оператором INT(X). В строке 340 переменная HFE увеличивав
10 REM R1 (Н 11E+HFE.RE)/(R 1+H 11E+HFE.RE) 1 2D REM AV = HFE.RC ------------------------------------X----------- 30 REM RI+R1(Н11E+HFE.RE)/(R1+H 11E+HFE.RE) H11E+HFE.RE • 40 LPRINT 50 REM R1(Hl1E+HFE.RE) • 60 REM RIN = -------------- 70 REM R1+H11E+HFE.RE • 30 LPRINT 90 LPRINTTAB(1)"HFE"> 100 LPRINTTAB(6)*RC"? 110 LPRINTTAB(13)"RE"; 120 LPRINTTAB( 13 ) "H1 IE " ; 130 LPRINTTAB(24)"R1" ; 135 LPRINTTAB(31) "RI": 140 LPRINTTAB(38)"AV*: 142 LPRINTTAB(47) "RIN" 145 LPRINT 150 INPUT "HFE " : 2 160 INPUT"RC”:C 170 INPUT "RE * ;Y 180 input"hiie";h 190 INPUT "R1’:R1 191 INPUT"RI"-,R 192 E-Y 193 A=Z 194 LPRINT ‘200 LPRINTTAB(0)A: 210 LPRINTTAB(05)C? 220 LPRINTTAB(12)E; 230 LPRINT TAB(17)H: 240 LPRINTTAB(22>R1? 250 LPRINT TAB(29)R? 270 P=H+A*E 280 Q^R1+H*A»E 290 X=A*C*R1»P/G/(R+(R1*P/G)*P) 295 X=INT(X+0.5) 300 LPRINTTAB(36 IX; 310 I=R1*P/(R 1+P ) 315 1 = IN T (I+0.5 ) 320 LPRINTTAB(45)I 340 A=A+3O 350 IFA<300G0T0200 360 E=E+400 370 IFE<5O00G0T0 193 3S0 END HFE P.C RE HUE R1 RI AV RIN 10 10000 500 1000 20000 10000 17 4615 40 10000 500 1000 20000 10000 19 10244 70 10000 50J3 1000 20000 10000 19 12857 100 10000 500 1000 20000 10000 20 14366 130 10000 500 1000 20000 10000 20 15349 160 10000 500 1000 20000 10000 20 16040 190 10000 500 1000 20000 10000 20 16552 220 10000 500 1000 20000 10000 20 16947 250 10000 500 1000 20000 10000 20 17260 230 10000 500 1000 20000 10000 20 17516 10 10000 900 1000 20000 10000 10 666'7 40 10000 900 1000 20000 10000 11 1293 2 70 10000 900 1000 20000 10000 11 15238 100 10000 900 1000 20000 WOOD 11 16396 130 10000 900 1000 20000 10000 11 17101 160 10000 900 1000 20000 10000 11 17576 190 10000 900 1000 20000 10000 11 17917
Языки программирования высокого уровня — Бейсик 377 220 10000 900 1000 20000 10000 и 13174 250 10000 900 1000 20000 10000 11 13374 280 10000 900 1000 20000 10000 11 13535 10 10000 1300 1000 20000 10000 7 3235 40 10000 1300 1000 20000 10000 о 14521 70 10000 1300 1000 20000 10000 3 16429 100 10000 1300 1000 20000 10000 8 17351 130 10000 1300 1000 20000 10000 з 17895 1-60 10000 1300 1000 20000 10000 я 13253 190 10000 1300 1000 20000 10000 я 18507 220 10000 1300 1000 20000 10000 8 18697 250 10000 1300 1000 20000 10000 о 18844 280 10000 1300 1000 20000 10000 8 13961 10 10000 1700 1000 20000 10000 6 9474 40 10000 1700 1000 20000 10000 6 15506 70 10000 1700 1000 20000 10000 6 17143 100 10000 1700 1000 20000 10000 6 17906 130 10000 1700 1000 20000 10000 6 13347 160 10000 1 700 1000 20000 10000 6 18635 190 10000 1700 1000 20000 10000 6 13837 220 10000 1700 1000 20000 10000 6 18987 250 10000 1 700 1000 20000 10000 6 19103 280 10000 1700 1000 20000 10000 6 19195 10 10000 2100 1000 20000 10000 С- 10476 40 10000 2100 ется на 30, в строке 350 происходит обратный переход в стро- ку 200. Рис. 6.10. Схема с общим эмиттером, для которой AV и RIN вычисляются в зависимости от HFE и RE. Переменные AV и RIN вычисляются для новых значений HFE; эта процедура повторяется до тех пор, пока HFE не пре- высит 300, после чего программа продолжается в строке 360, где сопротивление эмиттера увеличивается на 400. После этой операции в строке 370 производится обратный переход в стро- ку 193. Затем происходит распечатка таблицы величин AV и RIN с различными значениями HFE до тех пор, пока HFE не превысит 300, после чего программа снова увеличит RE на 400 Ом и, после того как RE превысит 5000 Ом, программа бу- дет закончена.
378 Глава 6 (start-) | INPUT I /Напечатать / / заголовок / | RE-RE(INPUT) | Рис. 6.11. Структурная схе- ма программы вычисления AV и RIN для схемы, по- казанной на рис. 6.10. На рис. 6.11 приведена структур- ная схема соответствующего алгорит- ма. После старта производится ввод переменных и печатаются заголовки колонок. Далее в строках 192 и 193 RE и HFE присваиваются введенные значения. После вычисления и печати AV и RIN HFE увеличивается на 30 и выясняется, не превышает ли пере- менная HFE величину, равную 300. Если HFE>300, то RE увеличивается на 400 Ом. Затем снова выясняется, не стала ли переменная RE>5000 Ом. Если ответ отрицательный, происхо- дит обратный переход в точку «HFE = = HFE (INPUT)». При утвердитель- ном ответе программа переходит к. оператору END. Анализируя полученные таблицы,, можно увидеть, что как AV, так и RIN увеличиваются по мере роста HFE. Если величина RE растет, то- коэффициент усиления AV уменьша- ется, а входное сопротивление увели- чивается. Чем выше RE, тем слабее- AV зависит от HFE. В схемах с общим эмиттером раз- личные параметры влияют друг на друга и если присвоить какому-либо параметру или параметрам опреде- ленные значения, то для получения конечного результата потребуется подобрать остальные параметры. С помощью схемы усилителя, показанной на рис. 6.12, мож- но вычислить RE и HFE исходя из известных параметров RL, RIN, AV и UPIEK. Однако для настройки этого усилителя не- обходимо также использовать делитель, образованный сопро- тивлениями R1 и R2, который в первом приближении в расче- те не учитывается. На практике сначала определяются значе- ния RE и HFE, и на основе этого расчета находятся величины R1 и R2. При этом величина RIN, которая первоначально оп- ределяется только значением HFE, изменяется и требуется скорректировать HFE. Тот факт, что производится изменение HFE, приводит к то- му, что R1 и R2 подбираются; этот процесс многократно пов- торяется до тех пор, пока RIN не достигнет определенного зна- чения в пределах некоторого допустимого интервала.
Языки программирования высокого уровня — Бейсик 379 Операция, которая в численном анализе называ- ется итерацией, требует большого объема вычисли- тельной работы. В данном случае нужно создать такую программу, которая бы за- менила человека при итера- тивной обработке перемен- ных. Текст одной из таких .программ приведен на стр. 380. Если еще раз рассмот- реть структуру программы для вычисления AV и RIN в схеме, представленной на рис. 6.12, то можно увидеть, что наряду с теми элемен- тами, которые обеспечива- Рис. 6.12. Схема, для которой програм- ма вычисления RE, HFE, R1 и R2 про- изводится при заданных значениях RIN и AV и максимальной величине переменного напряжения на выходе Upieit <от печать входных данных, вычисления и выдачу результатов, в этой программе имеется часть, которая содержит итерационную процедуру. При выполнении данной программы вводятся требуемые ве- личины сопротивления нагрузки RL, входного сопротивления RIN, коэффициента усиления AV и максимального выходного напряжения UPIEK и определяются значения эмиттерного соп- ротивления RE, коэффициента усиления по току, а также под- бираются входные сопротивления R1 и R2. Ввод и печать данных производят операторы (строки 10— 80). Вычисление требуемых параметров производится в той части программы, которая занимает строки 140—320, а итера- ционную процедуру обеспечивают строки 330—487. При выпол- нении той части программы, которая занимает строки 10—315, сначала предполагается, что величины RE, HFE, R1 и R2 из- вестны. Однако в действительности выбор этих величин носит приближенный характер, поэтому подставляются разные значе- ния HFE и вычисляются R1 и R2. В самом начале расчета не- обходимые решения в отношении Rl, R2 и RIN не получаются, так как начальное значение HFE оказывается слишком низким. Поэтому на первом шаге итерационного процесса необходимо увеличить HFE и исследовать величины наблюдаемых отклоне- ний в вычисленных параметрах. Если эти отклонения выходят за допустимые пределы, то снова увеличивается HFE, и такая •операция повторяется до тех пор, пока вычисленное входное сопротивление RINB не станет равно или больше RIN. Так как величина HFE увеличивается шагами, то наиболее
САПР-СХЕМА "rl”?l 5 REM 10 INPUT 20 INPUT "RIN'Si 30 INPUT"AV"?A 40 INPUT"UPIEK"?U 50 LPR I NT "RL'S TAB (40) L 60 LPR IN I"R IN'STAB (40) I 70 LPRINT"AV'STAB (40)A 80 LPR IN Г"UPIEK"iTAB(40)U 90 K=0 140 X=L/A 150 LPRINT"RE’STAB(20)X 160 H-I/X-l 170 LPRINT "HFE"jTAB(20) H ISO C=U/L 190 LPRINT"!CP IEK'STAB(20)C 200 B:=2*C* (X+L ) +1 210 LPRINT"US'S TAB(20)В 213 LPRINT"R1"?"R2"•"HFE"?"S/1 * 220 Y=C/H 240 Z=Y*( 1000HH+1) *X) .260 Q = Z/B 230 R2« 3*(1000KH+l)*X) 300 Rl= 1/4 *R2*(1-Q)/Q 315 LPRINTR1?R2’H?S/I 320 S-l/(l/RlH/R2H/(in00+(HH)*XH 330 IF S:=< (1.01*1 )ANDS=> (0.99*1 > THENG0T049U 335 0NKG0T0330 .’410 : 4 40 14 70 •350 IF-S:=<I THEN H=H*50 360 IF S=<ITHENG0T022O 370 IF SOI THEN K=K*1SG0T0335 380 IF SOI THEN H=H-10 390 IF S=>ITHENGOT0220 400 IF S==<ITHEN K=K* 1SG0T0335 410 IF S^CITHEN H=H+5 420 IF S«<IG0T0220 430 IF SOITHEN K=K+.l SG0T0335 440 IF SOITHEN H=H-1 450 IF SOITHENG0T0220 460 IF S=<ITHEN К-K+1:GOTO335 470 IF S=<ITHEN H=H+0.5 436 IF S-<ITHENG0T0220 437 LPRINT^RINB вне допустимых пределов 490 LPRINT"IB'S TAB(20?У 500 LPRINT"!C=HFE . IВ S TAB(20) H » Y 510 LPR INT"UB'’S TAB (20 ) В 520 LPRINT "UC ’STAB (20) В -H » Y »L 530 LPRINT"UE"j TAB(20'H » Y » X 540 LPRINT"UCE" ?TAB( 20)В - (H » Y *X +H*Y*L > 542 LPRINT"RINB'S TAB(20)S 550 END RL 5000 RIN 50000 AV 20 UPIEK RE 250 5 HFE 199 ICPIEK IE-03 UB 11.5 R1 . R2 HFE S/I 1.67813E+06 153000 199 0 2.1E+06 190500 249 .747952 2.52138E+06 228000 299 .931373 2.4375ЕЮ6 220500 289 1.1148 2.35313E+06 213000 279 1.07812 2.26875E+06 205500 269 1.04143 IB 3.71?47E-06 IC=HFE.IB IE-03 UB 11.5 UC 6.5 UE .25 UCE 6.25 RINB 50237. .4
Языки программирования высокого уровня — Бейсик 381 вероятным результатом будет значение RINB, превышающее значение RIN, и придется повторить процесс вычислений, од- нако теперь уже с меньшим шагом, взятым в отрицательном (обратном) направлении. Если при этом мы опять «проско- чим», то HFE придется снова увеличивать, однако теперь уже с меньшим шагом. В данном примере величины соответствую- щих шагов по HFE задаются равными 4-50, —10, 4-5, —1 и 4-0,5. На рис. 6.13 ход итерационного процесса представлен в Рис. 6.13. Ступенчатое приближение для RIN. виде временной диаграммы. В данном случае каждый раз, когда повторяются вычисления с разными значениями HFE, ко- нечный результат оказывается в пределах допустимого диапа- зона. В принципе здесь идет речь о ступенчатой отрицательной обратной связи, т. е. о законе, который также находит приме- нение и при управлении процессами с помощью цифровых ЭВМ. На рис. 6.14 приведена структурная схема итерационного процесса. В этой схеме имеется несколько переменных, кото- рые требуют более подробного пояснения. Переменная А пред- ставляет входное сопротивление RIN, a RINB — приближенное значение RIN, которое вычисляется в программе, К является коэффициентом, который увеличивается на 1 каждый раз, ког- да происходит переход от RIN<RINB к RIN>RINB и наобо- рот. После обнаружения такого перехода требуется изменить
( END ) 550 Рис. 6.14. Структурная схема итерационного процесса в программе «САПР-СХЕМА» (САПР — система автоматизированного проектирования).
Языки программирования высокого уровня — Бейсик 383 шаг приращения HFE. Для этого необходимо выйти из цикла увеличения HFE с определенной величиной шага и перейти в следующий цикл, который обеспечивает другую величину уве- личения (уменьшения) HFE. Вычисления в программе продол- жаются до тех пор, пока приближенное значение RINB не ста- нет равным RIN. Теперь рассмотрим структурную схему. Каждый раз, когда вопрос В<А? или В>А? получает утвердительный ответ, про- исходит увеличение К на 1 и после каждого вычисления HFE выясняется, не увеличилась ли величина К. Если ответ на воп- рос «увеличился ли коэффициент К на 1?» утвердительный, то программа переходит в следующий цикл; при этом шаг HFE уменьшается и одновременно изменяется его знак. После каждого вычисления RIN с новым значением HFE в строке 330 проверяется, не попадает ли отношение RIN/RINB в допустимые пределы ±1%. Если ответ оказывается положи- тельным, то программа переходит прямо в строку 490 и печа- таются конечные значения вычисленных параметров. Если от- вет оказывается отрицательным, то в строке 335 в зависимости от величины К происходит переход в циклы с Н+50, Н—10, Н+5, Н—1 или Н+0,5. Допустим, что К=0, тогда происхо- дит переход в строку 350 и Н увеличится на 50. В строке 360 осуществляется переход в строку 220 и вычисление повторяет- ся с новым значением HFE. При этом изменяются значения IB, UBE, R1 и R2. Еще раз вычисляется отношение RIN/RINB и затем в строке 330 снова выясняется, находится ли это от- ношение в допустимых пределах. При отрицательном ответе и RINB<RIN величина HFE увеличивается снова на 50 до тех пор, пока RINB не станет больше RIN и не произойдет услов- ный переход из строки 360. В этом случае программа перехо- дит к следующему циклу в строке 370. Первым действием здесь будет увеличение К на 1, для того чтобы теперь осу- ществлялся переход из строки 335 в строку 380 и программа не попадала больше в первый цикл. В строке 380 переменная Н уменьшается на 10 ив строке 390 происходит обратный переход в вычислительную процедуру для нового определения RINB. Программа выполняет вычисления до тех пор, пока не бу- дет достигнут последний шаг, равный 0,5, если, конечно, про- грамма не будет закончена раньше при проверке условия в строке 330. С другой стороны, если вычисление с шагом 0,5 не приведет к величине RINB, находящейся в пределах допу- стимого диапазона, то будет осуществлен переход в строку 487 и напечатано следующее сообщение: RINB вне допустимых пре- делов. Наконец, конечный результат будет напечатан в строках 490—542 с использованием операторов LPRINT.
384 Глава 6 Из результатов вычислений, напечатанных под текстом про- граммы, видно, что в качестве начального значения HFE взято 199. В дальнейшем это число два раза увеличивалось на 50 и затем три раза уменьшалось на 10, так что в конце концов по- лучилось HFE = 269, причем величина RINB оказалась в допу- стимых пределах. Наконец, в следующей программе вычисляется неизвестная функция у и ее производная dy/dx для выражения y=f(x) = —х3—Зх при значениях х, лежащих между —2 и +2. В этой программе также определяются минимумы и максимумы функ- ции у, т. е. точки, в которых ее производная становится равной нулю. Такие точки соответствуют либо максимуму, либо минимуму кривой y = f(x), и их значения указываются в таблице. В строке 20 функция определяется с помощью оператора DEF FNF. В строке 30 подготавливается заголовок таблицы, а в строке 40 определяются границы, в которых будет вычис- лена функция f(x)=Y. Шаг по х принят равным 0,2. В стро- ке 50 значение Y определяется посредством N, причем эта пе- ременная изменяется в интервале —2 и 4-2 с шагом 0,2, как и было указано в предыдущей строке. В строках 60 и 70 прово- дится проверка, не проходит ли производная через нуль, т. е. не происходит ли переход от Y—Z>0 к Y—Z<0, так что в ре- зультате А=1 изменяется на А=0. Если изменение величины Y—Z произойдет в обратном направлении, то А=0 превратит- ся в А=1. Переменная В на первом этапе вычислений приравнивается к А и в результате сохраняет «старое» значение А. После то- го как в строке 90 или 100 будет установлено, что перемен- ная А изменилась по сравнению со своим «старым» значени- ем В, это приведет к выводу на печать либо MIN, либо МАХ. Если значение А не изменилось, то в соответствующем месте таблицы будет напечатана точка (строка 105). В строке ПО В приравнивается к А, тогда как в строке 120 переменной Z присваивается значение Y. Это связано с тем, что при определении dy/dx требуется запоминать «старое» зна- чение Y. Тот факт, что производная проходит через нуль, фиксирует- ся в печати на одну строку ниже (см. колонку MAX/MIN на стр. 385). Таким образом, сначала устанавливается факт пе- рехода через нуль и только затем печатается соответствующее сообщение. Первое сообщение MIN является фиктивным, так как в са- мом начале вычислений начальные значения Z неизвестны. С помощью оператора FOR.. .NEXT определение величин Y, dy/dx и MAX/MIN проводится до тех пор, пока X не превы-
Языки программирования высокого уровня — Бейсик 385 10 REM ВЫЧИСЛЕНИЕ DY/ОХ И ОПРЕДЕЛЕНИЕ i MAX/MIN 20 DEF FNF(X)=Xa3-3*X 30 LPR I NT" X " »T Afi (5 ) " Y " ; TAB (20) "DY /D X " 51 AB \ 35) "MAX/MIN'* 40 F0RN=-2T0+2STEP0.2 50 Y=FNF(N):LPRINTN;TAB(5)Y; 60 IFY-Z>OTHENA=1 70 IFY-Z(OTHENA-O SO LPRINTTAB(20)(Z-Y); РО IFA>BTHENLPRTNTTAB(35)"MIN" 100 IFA< 3IHENLPRIN ITAR(35)"MAX" 105 IFA-.6THENLPR IN Г ГАВ (35) ". " 110 LET8-A 120 LETZ-Y 130 NEXT 140 EMO X V -2 -2 *1.8 -.432 -1.6 .704001 -1.4 1.456 -1.2 1.372 -1 2 -.8 1.338 -.6 1J584 -.4 1.136 -.2 .592 DY/DX 2 -1.568 -1.136 -.752 -.416 -. 123 .112 .304 .443 .54 4 MAX/MIN MIN MAX 1.49012E-07 -4.47035E-07 .592 .2 -.592 .592 .4 -1.136 .544 .6 -1.534 .448 .8 -1.833 .304 1-2 .112 1.2 -1.372 -.123 1.4-1.456 -.416 1.6 -.703999 -.752001 1.8 .432002 -1.136 MIN сит величины 2, после чего программа переходит к оператору END. Структурная схема алгоритма приведена на рис. 6.15. Разумеется, здесь можно задать вопрос, насколько хорошо обоснован этот способ решения дифференциального уравнения, так как для таких вычислений обычно применяются методы высшей математики. Как известно, ЭВМ можно использовать гораздо более эффективно при вычислениях с более сложными функциями с большим числом неизвестных и особенно тогда, когда неизвестные величины изменяются в зависимости от ко- нечного результата вычислений. Как уже указывалось в преды- дущем примере, это своего рода обратная связь, которая мо- жет быть в принципе как положительной, так и отрицатель- ной. Функции часто нельзя описать с помощью обычных мате- матических формул, так как не известно, каким образом, бу- дут изменяться переменные. Например, то, что больший объем производства продовольствия приведет к большему удовлетво- рению потребности населения в пищевых продуктах, является известным фактом, который определяет программу улучшения снабжения продовольствием. Однако в ходе решения этой за- дачи могут потребоваться коррективы, связанные, например,
386 Глава 6 f start) ]def fnf] 20 7 Напечатать! 30 / заголовок / I B=A |//0 | Z=Y |/20 | NEXT N | 130 ( END )/40 A=1 ]60 ] A=Q 170 -/ printmin/oo -j PRINT MAX /100 -/ PRINT POJNt/105 с изменениями в потребно- сти продовольствия и кли- матических условий. При этом неизвестная перемен- ная включается в решение, что приводит к модифика- ции основного алгоритма, используемого в данной программе. В ходе решения такой задачи может воз- никнуть дополнительная трудность, связанная со слишком быстрым ростом населения. Этот фактор не поддается точному измере- нию, из-за чего его нельзя включить в исходную мо- дель. Он может быть учтен после получения промежу- точного результата. Еще один пример: при вычислении мощности рас- сеяния в компонентах и схемах, в которых исполь- зуются переменные напря- жения, оптимизированное решение часто оказывается возможным только в рам- ках интегрального исчисле- ния. В таких расчетах в ка- честве параметра обычно используется коэффициент усиления по току HFE. С другой стороны, этот коэф- фициент зависит от темпе- ратуры, а температура ИС зависит в свою очередь как от требуемой мощности пи- Рис. 6.15. Структурная схема алгоритма тания, так и от мощности вычисления f(x)=x3—3x. рассеяния. В вычислениях такого рода коэффициент усиления по току приходит- ся изменять, исходя из вычисленных значений мощности рассея- ния и температуры. Так как эти изменения в величине HFE влияют в свою очередь на мощность рассеяния и температуру, то в ходе вычислений снова приходится вводить коррекции в
Языки программирования высокого уровня — Бейсик 387 Рис. 6.16. Система SME фирмы Siemens. Данные вводятся с клавиатуры, показанной на переднем плане, а вывод данных производится на экран ви- деодисплея. Справа внизу виден дисковод для гибких дисков. эти параметры. В результате возникает уже знакомая нам ите- рационная процедура. В предыдущих разделах на примерах использования раз- личных команд и операторов иллюстрировалось применение языка программирования Бейсик. Однако хорошо известно, что существуют различные диа- лекты этого языка, в которых отсутствуют одни команды и опе- раторы и добавлены другие. В дальнейшем этот язык програм- мирования будет постоянно расширяться за счет новых команд, упрощающих программирование и отладку программ. По этой причине имеет смысл начинать программирование на Бейсике с изучения его основ, используя руководство для пользователей и разрабатывая как можно более короткие программы, кото- рые позволяют выявить все реальные возможности отдельных команд и операторов. В данной главе, посвященной языкам высокого уровня с Бейсиком в качестве примера, были рассмотрены некоторые средства, относящиеся скорее к операционной системе, чем к са - мому языку Бейсик. В наибольшей степени это замечание ка-
388 Глава 6 сается таких средств, как программы редактирования, трасси- ровки и связи (ввод-вывод) с лентой, диском и принтером. В большинстве персональных компьютеров Бейсик и мони- тор образуют единое целое, а это означает, что такой «инстру- мент», как пакет EDIT, предназначен скорее для ввода и обра- ботки Бейсик-программ и данных и гораздо меньше подходит для других форм обработки текстов. Так, в частности, обычно можно вводить только прописные буквы, что не создает ника- ких затруднений при вводе текстов Бейсик-программ, однако приводит к известным ограничениям при обработке текстов. Системы с ОС более высокого уровня, такими, как UNIX, имеют более явно выраженную модульную структуру, обеспе- чивая работу монитора, редактора, программ ввода-вывода для периферийных устройств и компиляторов для языков высокого уровня как автономных средств («инструментов») в рамках данной ОС. Указанные средства приводятся в действие с по- мощью специальных команд. Использование этих автономных средств обычно приводит к короткой программе, состоящей из ряда последовательно рас- положенных команд. Такие программы, которые реализуются, используя принцип интерпретации, называются макрокоманда- ми. Интерпретатор обращается с ними как с обычными коман- дами. 6.15. Команды и операторы на языке Бейсик Команды BREAK (клавиша) Клавиша, служащая для срочного прерывания программы. Одновременное нажатие клавиш CLEAR BREAK и SHIFT приводит к останову (STOP). Команда для очистки рабочих секторов ЗУ, пред, назначенных для хранения переменных. В неко- торых диалектах Бейсика команду CLEAR мож- но использовать для резервирования рабочих секторов ЗУ: например CLEAR 1000 (=1000 CR {клавиша) байт). См. RETURN (клавиша), CR является сокраще- нием от слов Carriage Return (возврат каретки), т. е. специального термина, который используется DELETE п—m для описания работы принтера. Удалить строки, начиная со строки п и кончая строкой ш. LIST Команда для вывода программы на экран дисп- лея или на принтер, во время которой программа не выполняется LIST n LIST n—m Вывести текст строки п программы Вывести текст программы, начиная со строки п и кончая строкой ш PAGE n Команда для более точного указания элементов оперативного ЗУ. С помощью этой команды пе-
Языки программирования высокого уровня — Бейсик 389 NEW PURGE RETURN (клавиша) EDIT n RUN GOTO n TRON TROFF Операторы ввода INPUT A DATA 1,2„,«PIET> LET A=25 A=PEEK (1245) READ A, В RE ADA I, Bl REM.,. ред вводом программы можно указать те страни- цы ЗУ, на которых будет записана программа Команда для стирания текста программы См. NEW.PURGE означает «стирать, очистить» Эта клавиша нажимается в конце строки. В ре- зультате происходит возврат каретки и вводится новая строка, после чего в новой строке появля- ется знак «подсказки». Каждая команда, введен- ная с клавиатуры, используется только после нажатия клавиши RETURN. В некоторых си- стемах знак «подсказки» отсутствует и его роль выполняет курсор Команда вызова строки п для последующего ре- дактирования. С помощью последующих суб- команд (клавиш) можно осуществить следующие операции со строками: L — вывести выбранную строку на экран дисплея Сх — заменить символ 1х — ввести текст xD — удалить х символов Н — удалить все символы, расположенные справа от курсора Q — отменить команду EDIT А — возвратить курсор в начало строки Команда запуска программы на исполнение в микроЭВМ. Команда выполняется после нажатия клавиши RETURN Команда перехода в строку п. Команда выпол- няется после нажатия клавиши RETURN Команда распечатки номеров строк в ходе вы- полнения программы. Требуется при отладке программы. Номера строк печатаются между ка- вычками или скобками Отмена команды TRON Оператор, указывающий, что в ходе выполнения программы необходимо ввести переменные. Встре- тив этот оператор, программа останавливается и печатает знак (?), после которого необходимо ввести соответствующие значения переменных Оператор ввода данных, указываемых после име- ни оператора. Данные — числа или текст — отде- ляются друг от друга запятыми. Данные, заклю- ченные в кавычки, закодированы в ASCII-коде Оператор присвоения. Переменной А присваива- ется числовое значение 25 Команда считывания байта из ЗУ. Десятичный номер заключен в кавычки Оператор чтения; присваивает А и В значения из файла данных Присвоить А| и В? данные из текстовых строк. Определенная строка (текст) заключена в файле данных в кавычки и при этом закодирована в коде ASCII Оператор ввода в программу комментариев. Комментарии выводятся на экран дисплея или
390 Глава 6 печатаются после появления LIST. При выпол- нении программы REM опускается RESTORE Восстановить управление данными. После появ- ления оператора RESTORE вызов данных иэ файла данных происходит, начиная с начала списка данных Операторы вывода PRINT... Оператор вывода данных на принтер или экран» дисплея LPRINT... После оператора PRINT указываются данные,, которыми могут быть переменная, число, выра- жение или текст. При выводе текста соответству- ющие данные необходимо заключить в кавычки^. Оператор PRINT, в котором отсутствуют пара- метры данных, рассматривается как оператор» вывода новой строки Если операторы PRINT размещены в последова- тельно расположенных строках, каждая из кото- рых заканчивается точкой с запятой (;), то рас- печатка данных на выходе производится в одной строке. То же самое происходит и в случае ис- пользования запятой (,) РОКЕ А, В Оператор записи В-байта информации в десятич- ной форме в ячейку памяти А, адрес которой указывается также в десятичной форме Операторы перехода и ветвления GOTO... Оператор перехода в строку, номер которой ука- зывается после GOTO. Этот оператор можно при- менять также и в комбинации с оператором» условного перехода IF...THEN GOSUB... Оператор перехода в подпрограмму. После этого» оператора указывается номер строки, в которую» происходит переход. COSUB следует использо- вать в комбинации с оператором RETURN RETURN Оператор, который обеспечивает обратный пере- ход из подпрограммы в исходную программу. Адрес возврата можно не указывать. RETURN следует использовать в комбинации с COSUB IF...THEN... Оператор условного перехода. Для выполнения оператора, помещенного после THEN, необходи- мо, чтобы выражение, находящееся сразу после IF, было «истинным». Если поместить после THEN оператор GOTO, после которого следует номер строки, то в результате произойдет пере- ход в эту строку. После THEN можно указать также операцию, которая будет выполнена толь- ко тогда, когда будет «истинным» выражение, по- мещенное после IF FOR...ТО Оператор управления циклом. После FOR ука- NEXT... зываются начальное и конечное значения опре- деленной переменной, которая задает число цик- лов (повторений). Оператор NEXT должен нахо- диться в конце цикла и обеспечивать приращение циклической переменной на 1. Величина шага за- дается оператором STEP
Языки программирования высокого уровня — Бейсик 391 STEP Оператор, указывающий величину шага в коман- де FOR...NEXT (FORN = 1 TO10STER2) DO...UNTIL Процедура, которая следует после DO, выполня- ется до тех пор, пока не станет «истинным» условие, записанное после UNTIL Обработка текстовых переменных DIMAS (16) DIM Al (2) LEN (Al) Оператор задания размерности элементам масси- ва или числа символов в строке символов Оператор задания числа символов, указывающих LEFT! (AS,5) длину текстовой переменной Оператор выбора левой части текста, состоящей из указанного числа символов (5) RIGHT! (AS,8) Операторы выбора правой части текста длиной в 8 символов MID! (AS4,5) Оператор выбора из средней части текста сим- волов, число которых указывает вторая цифра после А$. Первая цифра указывает позицию VAL(XS) первого символа в тексте Оператор определения десятичной величины чис- ла в коде ASCII STR! (10) Оператор преобразования десятичного числа в ASC (AS) строку цифр в коде ASCII Оператор преобразования первого символа из текстовой строки, записанной в коде ASCII, в де- сятичное число CHRS (65) Оператор преобразования десятичного числа в символ, записанный в коде ASCII SWAP X,Y Оператор обмена величинами X и Y. Эти пере- менные могут быть и текстовыми Операторы останова INPUT... Этот оператор, после которого следует фиктивная переменная, можно использовать в качестве опе- ратора останова. После ввода фиктивной пере- менной и нажатия клавиши RETURN программа будет продолжена. STOP Этот оператор прекращает выполнение програм- мы в той строке, где он находится. Для продол- жения программы достаточно нажать клавишу RETURN END Оператор, который указывает конец программы Арифметические действия А+В А—В А*В А/В AfB SIN(X) COS(X) TAN(X) ATN(X) EXP(X) Сумма А и В Разность А и В А, умноженное на В А, деленное на В А в степени В sin X cos X tgX arctg X ex (e=2,71828)
392 Глава 6 ABS(X) LOG(X) SQR(X) INT(X) SGN(X) Абсолютное значение X 10ge|X|=ln|X| VIX| Наибольшее целое число, меньшее или равное X Знак X (1, если X положительное; 0, если Хв0; —1, если X отрицательное) RND(X) Генератор случайных чисел, распределенных меж- ду 0 и 1. Для выбора режима генерации X мож- но приравнять значения +1, 0 или —1 XAND Y XORY NOTX HEXS (X) OCT$(X) Функция И Функция ИЛИ Функция НЕ Преобразование X в шестнадцатеричное число- Преобразование X в восьмеричное число Функции, определяемые пользователем DEF FNF(X, Y)«X*Y Функция, определяемая пользователем (одност- рочная). Буква, стоящая после FN, уточняет на- звание функции; DEF FNF(X,Y) (X, Y) являются фиктивными переменными, ко- торые связаны с помощью соотношения, указан- ного после знака «=>, в данном случае X*Y Функция, определяемая пользователем (много- строчная). Буква, стоящая после FN, уточняет название функции. (X,Y) являются фиктивными FNEND переменными, которые связаны с помощью соот- ношения, записанного в последующих строках. Заметьте: после многострочной функции знак «=> отсутствует Окончание многострочной функции, определяемой пользователем Значение символов и специальных знаков X х$ (X) XI (2) Переменная X Текстовая переменная X Аргумент Обозначение нескольких элементов в массиве чи- сел (2), максимальное число которых может быть равно 10. Для обозначения размерности в случае большего числа элементов служит оператор DIM Х$ (16) « Обозначение числа символов в строке (16) Знак разделения между операторами в одной строке Знак разделения между числами, переменными,, выражениями и текстовыми элементами в одной строке В конце строки запятая означает RETURN (CR) и ввод новой строки, так что в случае операторов PRINT, размещенных в последовательных строках и оканчивающихся запятыми, соответствующие данные будут напечатаны в одной строке. Дан- ные печатаются блоками по 15 символов 1 Точка с запятой в конце строки означает подав- ление RETURN (CR) и ввод новой строки, так
Языки программирования высокого уровня — Бейсик 393 «DIODE* <> или >< > < <= &п ЛНп что в случае операторов PRINT, расположенных в последовательных строках и оканчивающихся точками с запятой, соответствующие данные бу- дут напечатаны на одной строке. Данные печата- ются последовательно, друг за другом Данные в кавычках образуют строку символов в- коде ASCII (текст, переменные, числа и выра- жения) Равно Неравно Больше, чем Меньше, чем Больше, чем или равно Меньше, чем или равно Число п, восьмеричное Число п, шестнадцатеричное
Глава 7 НОВЫЕ РАЗРАБОТКИ В ОБЛАСТИ МИКРОЭВМ 7.1. Введение Разработка микропроцессоров в начале 70-х годов и при- вела к созданию МП 4004 и 8008 американской фирмой Intel. В разработке новой техники приняли активное участие боль- шое число фирм, специализирующихся в производстве полупро- водниковых приборов и устройств. Появилось также много но- вых фирм, которые занимаются в основном проектированием МП и вопросами обработки данных. Разработка МП 4004 и 8008 вскоре привела к созданию МП 8080, т. е. МП с 8-разрядной шиной данных и ЗУ на 64 Кбайт. МП 8080 работает при трех напряжениях питания. Для обеспечения нормального функционирования этого МП в микроЭВМ потребовалось использовать ряд дополнительных ИС, таких, как ИС 8224 и 82281}. В конце 70-х годов МП 8080 был заменен на МП 8085, ко- торый функционально почти идентичен МП 8080, однако рабо- тает с одним напряжением питания +5 В и используется в мик- роЭВМ без дополнительных ИС типа 8224 и 8228. МП можно использовать в качестве системы обработки дан- ных только в том случае, когда он работает совместно с ЗУ и портами ввода-вывода. Отсюда возникает необходимость в функциональном элементе, который объединяет МП с ЗУ и портами ввода-вывода в единое целое. Решение этой проблемы привело к созданию однокристальных микроЭВМ с большим объемом ЗУ и портами ввода-вывода, из которых наиболее из- вестными являются ИС 8048/8748 фирмы Intel. ИС 8048 снабжена ПЗУ, а ИС 8748 — СППЗУ. Эти МП име- ют ППЗУ объемом 1К8 бит и ЗУПВ на 64 байт. Они имеют ог- раниченные возможности, однако снабжены всеми необходимы- ми функциональными элементами, которые размещены на од- ном кристалле, и особенно хорошо подходят для применений в автоматах, предназначенных для специальных целей, таких, как цифровое управление станками, или же в контроллерах, управ- ” ИС типа 8224 — это генератор тактовых сигналов, а ИС типа 8228 — системный контроллер и шинный формирователь. — Прим. ред.
Новые разработки в области микроЭВМ 39& ляющих режимом связи между системами и периферийными схемами, а также различными аппаратами. В настоящее время такие однокристальные МП поставляются в продажу самыми разными фирмами. В некоторых схемах СППЗУ на кристалле отсутствуют, т. е. разработку и оценку системы приходится осу- ществлять с помощью отдельного ППЗУ, вместо которого по окончании разработки и переходе к массовому производству используется ПЗУ, размещаемое на кристалле. Очевидно, что развитие однокристальных МП будет продол- жаться по мере того, как на кристалле удастся размещать все большее число различных компонентов. Этот процесс связан с улучшением технологии изготовления ИС. Производство со- ответствующего технологического оборудования требует все- больших капитальных затрат и возникает вопрос о том, смогут ли их обеспечить небольшие фирмы, специализирующиеся в производстве МП, которые в начале 70-х годов росли как. грибы. По-видимому, в настоящее время многие изготовители уже не в состоянии поспевать за быстрым развитием технологии ИС; этот темп смогут выдержать только фирмы с достаточно* мощной финансовой поддержкой. Аналогичное явление наблю- далось и в начале развития транзисторной техники, когда про- изводством новых полупроводниковых элементов занялось мно- жество небольших предприятий, которые позже исчезли почти полностью. В предыдущей главе мы уже обращали внимание на ряд пе- риферийных схем, которые имеют прямое отношение к обсуж* даемым практическим разработкам в области аппаратурного и программного обеспечения микроЭВМ. Появляется все больше новых типов схем, связывающих с МП самые разнообразные средства ввода и вывода информа* ции. В частности, в настоящее время известны разработки, в которых, программируя надлежащим образом универсальный периферийный интерфейс, можно обеспечить требуемые режи- мы связи между МП и соответствующими устройствами ввода- вывода. Эти интерфейсные схемы выполняют функции микроЭВМ и состоят из МП с ограниченным набором команд, ЗУ, схем вво* да-вывода и таймера. ЗУ состоят из ПЗУ или СППЗУ, а так* же ЗУПВ, выполняющего роль программного и оперативного ЗУ. Все указанные функциональные элементы размещаются на одном кристалле. При разработке программного и аппара- турного обеспечения можно использовать вначале микроЭВМ с СППЗУ или автономным ППЗУ, а затем ПЗУ, которое сов- местимо по выводам с корпусом СППЗУ. После этого можно пе- рейти к массовым заказам микроЭВМ с ПЗУ, которые обеспе-
396 Глава 7 чит соответствующая фирма. Можно назвать в этой связи серию 8041 фирмы Intel, которая поставляется в продажу специально для этих целей. Что касается универсальных МП, то в настоящем десяти- летии следует ожидать появления 16- и 32-разрядных МП, при этом быстродействие микроЭВМ будет увеличиваться за счет применения методов конвейерной обработки данных, которые позволяют извлекать данные из ЗУ во время выполнения команд в МП. Увеличение длины слова означает, что МП будет работать быстрее. Если, кроме того, удастся совместить операции вы- борки команд из ЗУ и обработку команд, которые выполнялись ранее в последовательном режиме, то получится еще больший выигрыш во времени, прежде всего в МП, осуществляющем более сложные арифметические операции, такие, как умноже- ние и деление, на которые затрачивается относительно боль- шое время. В таких МП в конвейерном режиме будет обработа- но большинство команд, которые считываются при выполнении программы. Кто касается набора команд, то все, даже самые новые ти- пы МП, имеют команды умножения и деления, так что для выполнения этих операций уже не требуется использовать ка- кое-либо специальное программное обеспечение. Число более сложных операций такого типа будет расти, при этом появится и дополнительное специализированное аппаратурное обеспече- ние, которое обеспечит прямое программирование на языках высокого уровня. Набор команд МП будет играть роль само- стоятельного языка высокого уровня. Что касается передачи данных из оперативного ЗУ и в оперативное ЗУ, то предпола- гается, что она будет проходить в прямом режиме, т. е. ре- гистры не будут заполняться до тех пор, пока не произойдет переход к реальному выполнению соответствующих операций. Новые МП имеют большой диапазон адресации, вплоть до 16 Мбайт, при этом ЗУ делится на сегменты. Выбор сегментов обеспечивается по команде блока управления ЗУ, т. е. перифе- рийной схемы, которая осуществляет выбор сегментов или участков ЗУ и решает такие дополнительные задачи, как защи- та различных частей ЗУ при записи и считывании данных. До сих пор мы упоминали периферийные схемы как отдель- ную структуру, которая разрабатывается для обслуживания микроЭВМ. Если первоначально эти схемы ввода-вывода были исключительно цифровыми, то сейчас на кристаллах размеща- ются и аналоговые схемы, такие, как аналого-цифровые преоб- разователи (АЦП) и цифро-аналоговые преобразователи (ЦАП). Периферийная схема бывает иногда настолько слож- ной, что мы говорим о ней, как об аналоговой ЭВМ. При этом
Новые разработки в области микроЭВМ 397 имеется ввиду ЭВМ с аналоговым вводом и выводом информа- ции, которая управляется в цифровом режиме с помощью спе- циальных программ. Как известно, разработка сложных периферийных схем тре- бует больших затрат. Поэтому, как уже отмечалось, сейчас наблюдается тенденция выполнять сложные операции с по- мощью отдельной микроЭВМ, которая программируется спе- циально для этих целей. Одной из известных разработок в этом направлении является серия 8041, которую поставляет фирма Intel. Пользователь, которому требуется реализовать определен- ную функцию ввода или вывода, программирует такую мик- роЭВМ, а затем, после перехода на массовое производство, за- казывает эту схему вместе с ПЗУ соответствующей фирмы. Универсальные периферийные схемы, которые вызывают боль- шой интерес, фирма программирует самостоятельно и затем поставляет их в продажу как специальные схемы для опреде- ленных применений. При этом потребитель часто и не подозре- вает, что покупает микроЭВМ, запрограммированную для ре- шения данной задачи. В следующем десятилетии для микроЭВМ откроются новые области автоматизации, которые 20 лет назад казались совер- шенно неподходящими для этой цели. Мы полагаем, что сущест- венно расширится применение микроЭВМ в автомобилях и во всех бытовых приборах. В частности, в автомобилях с помощью микроЭВМ будет усовершенствована регулировка подачи горючего в бензиновом двигателе, что приведет к уменьшению количества СО в выхло- пе и расхода горючего. Кроме того, наряду с дальнейшим раз- витием автомобильных радаров окажется возможным внедрить систему управления, которая позволит избежать аварий в тумане и в условиях плохой видимости. Появится также воз- можность надежно выдерживать необходимые безопасные ин- тервалы между автомобилями с помощью микроЭВМ, которая будет установлена в каждом автомобиле в обязательном по- рядке. 7.2. МП 80-х годов Развитие универсальных МП идет в направлении разра- ботки систем 16- и 32-разрядных МП и ЗУ емкостью в несколь- ко мегабайт. Как следует из специальной литературы, конкрет- ные работы в этом направлении уже начаты. Такие ведущие фирмы, как Intel, Motorola и Zilog, уже поставляют МП, кото- рые имеют большее количество разрядов, больший набор команд и большую емкость ЗУ порядка нескольких мегабайт.
398 Глава 7 Высокие цены на новые схемы свидетельствуют о том, что из- готовление этих ИС налажено еще не полностью. Цены на МП 8080, 6800 и Z80 после перехода к массовому производству снизились до нескольких долларов за экземпляр. Разработка более совершенных МП не означает, впрочем,, что спрос на 8-разрядные МП будет снижаться. Мы уже ука- зывали ряд областей применения микроЭВМ, например массо- вое производство автомобилей, где, по-видимому, не потребу- ются более совершенные системы и где необходимо автоматизи- ровать управление процессами с относительно невысоким быст- родействием. С другой стороны, 8-разрядные микроЭВМ, особенно одно- кристальные, постоянно совершенствуются. В этих микроЭВМ на одном кристалле, кроме ЗУПВ, СППЗУ и схем ввода-выво- да, размещается также ряд периферийных схем, которые по- зволяют существенно упростить аппаратурное обеспечение микроЭВМ. Очевидно, что для таких разработок имеется обширный ры- нок сбыта, потому что они обеспечивают автоматизацию самых различных бытовых приборов, таких, как радио-, телевизион- ная и видеоаппаратура, стиральные машины, швейные машины и т. д., а также более специализированные устройства, начиная? с бензинового насоса и кончая сложной электронной аппарату- рой. В этих применениях быстродействие и ограниченный объ- ем ЗУ часто несущественны. Гораздо большее значение имеют* цена и те дополнительные схемы, которые требуются для ис- пользования подобной микроЭВМ в качестве управляющего ав- томата. Если учесть, что цена подобной микроЭВМ составляет несколько долларов, то в настоящее время вполне оправдано* использование этих микроЭВМ для решения задач автоматиза- ции и в более сложной игральной и бытовой аппаратуре. 7.3. 16-разрядные МП Как уже отмечалось выше, 16-разрядные МП поставля- ются несколькими фирмами. Кроме фирмы Intel, которая выпускает МП 8086 и 8088, МП такого же типа выпускают фирмы Motorola и Zilog под назва- ниями МС680000 и Z8000 соответственно. Эти МП по аналогии с МП 8086 обеспечивают средства для программирования на самом высоком уровне. МП 8086 помещен в корпусе с 40 выводами и может рабо- тать в двух режимах, минимальном — с ЗУ на 64 Кбайт и мак- симальном — с ЗУ на 1 Мбайт. Хотя для этого МП можно при- менять стандартные периферийные схемы из семейства МП 8080, фирма разрабатывает периферийные схемы, предна-
Новые разработки в области микроЭВМ 399 злаченные специально для МП 8086. В настоящее время уже выпускается специальный процессор типа 8089 для обеспечения ввода-вывода данных, который упрощает разработку систем на базе МП 8086. МП Zilog Z8000 также имеет два режима, однако реали- зован с двумя различными МП. МП типа Z8002, находящийся в корпусе типа DIP с 40 выводами, обеспечивает прямую адре- сацию ЗУ емкостью 64 Кбайт в одном из 6 секторов ЗУ. МП Z8001, помещенный в корпус типа DIP с 48 выводами, име- ет систему выборки с большим числом сегментов. Этот МП обеспечивает адресацию ЗУ емкостью около 8 Мбайт в каждом из шести секторов ЗУ. В качестве периферийных используются схемы из семейства Z80, так как соответствующие специализированные схемы на- ходятся пока в стадии разработки. МП МС680000 фирмы Motorola находится в корпусе типа DIP с 64 выводами и имеет раздельные шины адресов и дан- ных. Этот МП обеспечивает адресацию ЗУ емкостью 16 Мбайт без использования специальных методов, таких, как сегмента- ция и разбиение на страницы. МС680000 является микропро- граммируемым МП, в который можно довольно просто ввести новые команды, не прибегая к помощи аппаратурного обеспе- чения, что существенно отличает его от ИС 8086 и Z8000, где соответствующие функции реализуются аппаратурными средст- вами. В качестве периферийных схем можно применять схемы, разработанные для семейства МС6800. Фирма NS поставляет 16-разрядный МП типа NS16000. NS-семейство МП состоит из трех типов ИС, а именно ИС 16008, 16016 и 16032. МП NS16008 и NS16016 имеют два набора команд, один из которых идентичен набору команд МП 8080А, а другой дополнительный набор содержит ряд усо- вершенствованных команд, обеспечивающих более оптималь- ное программирование. В связи с этим наблюдается 20-крат- ное увеличение быстродействия по сравнению с МП 8080А. Архитектура МП 16008 включает 8-разрядную внешнюю ши- ну данных и 16-разрядную внутреннюю шину данных. В отличие от МП 16008, как внутренняя, так и внешняя шины данных МП 16016 являются 16-разрядными. Наиболее совершенным МП в этом семействе считается NS 16032 с 32-разрядной внутренней шиной данных и 16-разрядной внешней шиной данных. МП этого типа обеспечивает адресацию ЗУ емкостью 16 Мбайт. Как МП 16008, так и МП 16016 имеют два набора команд, а именно набор команд МП 8080А и дополнительный набор, который был разработан фирмой NS. Фирма TI объявила о создании новых МП, так называемых псевдо-16-разрядных МП. Эти МП имеют внешнюю 8-разряд-
400 Глава 7 ную шину данных с ограниченными возможностями адресации ЗУ и портов ввода-вывода по крайней мере по сравнению с 16-разрядными МП TMS9900. Новый МП размещается в корпу- се типа DIP с 40 выводами вместо корпуса с 64 выводами, как это имеет место в TMS99007. МП 9980 и 9981 являются минимальными вариантами упо- мянутого выше 16-разрядного МП TMS9900 с ограниченными возможностями адресации ЗУ на уровне 8К слов вместо 16К. С другой стороны, МП 9985 — это эквивалент МП TMS9940, однако без ППЗУ. На кристалле МП 9985, кроме МП, ЗУПВ,, ПЗУ и схем ввода-вывода, размещено так называемое сверх- оперативное ЗУ, которое применяется для временного хранения промежуточных результатов вычислений. Этот МП выпускает- ся в двух вариантах; один с СППЗУ и другой — с ПЗУ, при этом вариант с СППЗУ используется для разработки программ и систем, а вариант с ПЗУ запущен в массовое производство. 12-разрядные МП выпускаются фирмами Harris, Intersil, и Toshiba. Фирмы Harris и Intersil изготавливают МП этого типа в КМОП-исполнении с набором команд PDP-8, перво- начально разработанных фирмой DEC. Тот факт, что набор команд PDP-8 довольно широко известен в связи с широким использованием ЭВМ PDP-8 и является, вероятно, причиной появления этих 12-разрядных МП. 7.4. МП 1АРХ432 фирмы Intel Из предыдущих глав следует, что МП работают в основ- ном с простыми наборами команд. С подобными МП можно «разговаривать» на языке высокого уровня только в том слу- чае, если этот язык «переводится» в простые команды МП. Та- кой процесс носит название компиляции (трансляции). Компиляция выполняется с помощью специальной програм- мы, т. е. компилятор реализован на программном уровне. Оче- видно, что если мы сумеем создать МП, работающий на языке более высокого уровня, то компиляция существенно упростится. С увеличением ширины шины данных МП можно переда- вать все больший объем информации, или, другими словами, МП будет переходить на более высокий интеллектуальный уро- вень, так что можно будет обращаться к системе на языке все более высокого уровняя. Вполне реально поднять этот уровень настолько, чтобы с МП можно было общаться непосредственно на языке высокого уровня без посредничества компилятора. Возможен также вариант промежуточного решения с более ин- теллектуальным МП и компилятором, который располагается на том же кристалле, так как многие языки программирования имеют несколько диалектов. В области языков программирова-
Новые разработки в области микроЭВМ 401 ния нет своего «эксперанто», поэтому соответствующие системы должны быть приспособлены для работы с многими языками и диалектами, так что комбинация компилятора с ограничен- ными возможностями и языка высокого уровня является весь- ма рациональным вариантом. МП iAPX432 является системой с высоким интеллектуаль- ным уровнем в отношении машинного языка. При этом цент- ральный процессор рассматривается как черный ящик. Мы не можем получить извне доступ к внутренним регистрам, а также управлять работой других внутренних элементов, как это име- ет место в стандартных 8- и 16-разрядных МП. Интерфейс с системой на уровне аппаратурного обеспече- ния можно осуществить только через магистральную шину. При управлении системой нельзя выполнять какие-либо опера- ции с битами в регистре, зато можно осуществлять операции с программируемыми объектами вроде ОС, которые имеют более высокий уровень сложности и с которыми могут общаться про- граммисты, более опытные и квалифицированные, чем простые схемотехники. МП iAPX432 состоит из трех корпусов типа DIP, которые содержат вместе около 200 000 МОП-компонентов. Ширина ши- ны данных равна 32 бит. МП может обращаться к сегментиро- ванному ЗУ емкостью 240 байт. В данном случае речь идет о так называемом «структурированном» ЗУ. Для эффективного применения МП iAPX432 в распоряжении пользователя имеется большое число специальных «инструментов» как на программ* ном, так и аппаратурном уровне обеспечения.
ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ Автоматизация 12 Адрес рестарта 298 Адресация относительная 162 Алгоритм в анализе структурных схем 30 Анализ системный 8 Архитекрура производственного предприятия 55 — ЭВМ 68 База данных 14 — * — программа управления 17 ----система управления 18, 22 Бейсик, язык высокого уровня 315 Бит флажковый 116 Блок-схема программирования СППЗУ 233 — программируемого интерфейса ти- па 8255А 235 — радиоприемника 25 — таймера/счетчика 98 — УСАПП 266 Ввод данных 335, 338 — программ в ЗУ 299, 342 — текста 345 Ветвление в программе 56 Временная диаграмма, применяемая при программировании ИС 2708, 247 Вывод данных на магнитную ленту 263 Выводы на корпусах ИС 213—218 Деятельность управленческая 12 Замена символов 345 Запоминающее устройство (ЗУ) 195 Значение контрольное 23 Индикатор шестнадцатеричный 227 Инициирование прерывания 151 Интерфейс пользовательский 41 — программируемый типа 8255, 234 Использование ПРУ 218 Ключ 23 Код команды 59 — Морзе 317 Кодирование фонемное 304 Команда арифметическая 128 — ввода/вывода 157 — логическая 128 — микроЭВМ 99 — операционная 56 — • останова 159 — передачи данных 53 — пересылки 117 — перехода и ветвления 142, 329 — приращений 138 — прямого ввода данных 138 — пустая 161 — сдвига 136 — сравнения 128 — элементарная 101 Комплекс отладочный 87 Массив 23, 361 Микропроцессор (МП) в микроЭВМ 190 — минимальная конфигурация 78 — АРХ 400 — 16-разрядный 398 — 80-х годов 397 — 8085А 70 МикроЭВМ, новые разработки 394 — однокристальная, блок-схема 92 — с МП 8085А 79 Многократное применение перемен* ных 362 Монитор, программа 90
Предметный указатель 403 Набор команд МП 8085А 178 Обеспечение аппаратурное 63 — программное 63 Обработка байтов данных 358 — данных, средства 39 — сигналов прерывания 205 — строк символов 351 Операция арифметическая 322 Оператор и команда 319 Переменная индексирования 361 Питание микроЭВМ и ПРУ 212 Поиск дихотомический 23 Представление чисел 363 Прерывание, инициирование 151 Программа возведения в степень 323 — вывода данных на ленту магнито- фона 278 — вычисления параметров электрон- ной схемы 374 -*• вычисления таблицы децибел 371 *- вычисления функции и ее произ- водной 384 — вычисления X2, X3 и ех 369 — вычисления цены 369 — вычисления эффективного значе- ния тока 325 — загрузка СППЗУ 249 — проверки данных в СППЗУ 259 Пользовательские операции 27 Программатор СППЗУ 232 Пульт ручного управления (ПРУ) 188, 197 -------- практическая реализация 204 Разложение в ряд, метод 31 Распознавание речи 312 Регистр входной 230 — выходной 231 Символы 108, 330 Символика, используемая в струк- турных схемах, 26 Синтаксис 105 Синтез и распознавание речи 304 Синтезатор МЕА8000 311 Система операционная (ОС) 41 — проектирования 187 Слово данных 105 Список сигналов 226 Схема ввода и вывода 228 — операций на ЭВМ 44 — специальная микроЭВМ 200 — структурная 27, 313 — функциональная 25 Счетчик декадный 37 — со сквозным переносом 29 — с предварительным просмотром переноса 30, 36 Тактирование 75 Терминал персональной ЭВМ 50 Указатель 23 Управление ИС 8251А 270 — МП ручное 85 УСАПП типа 8215А 265 Фабрика по изготовлению бумажных мешков 12 Фильтр RC 305 Функция И 9, 28 — ИЛИ 9, 30 — НЕ 9 — определяемая пользователем 346 — сравнения 30 Циклы вложенные 332, 333 Цифры десятичные, восьмеричные и шестнадцатеричные 110 ЭВМ, архитектура 68 — однокристальная 91 — персональная 49 Эмуляция схемная 87
ОГЛАВЛЕНИЕ Предисловие редактора перевода.................................... 5 Предисловие автора ............................................... 7 Глава 1. Системный анализ.......................................... 8 1.1. Введение............................................. 8 1.2. Автоматизация управленческой деятельности............12 1.3. Функциональные схемы.................................25 1.4. Структурные схемы последовательных операций .... 27 1.5. Построение структурной схемы.........................32 1.6. Структурные схемы, применяемые на практике .... 33 1.7. Средства, применяемые при обработке данных...........39 1.8. Пользовательский интерфейс — операционная система ... 41 1.9. Персональные ЭВМ.....................................49 Глава 2. ЭВМ.......................................................53 2.1. Введение..................................................53 2.2. Команды передачи данных.............................. . 53 2.3. Операционные команды......................................56 2.4. Ветвления в программе.....................................56 2.5. Коды команд...............................................59 2.6. Аппаратурное и программное обеспечение....................63 2.7. Прерывание — вмешательство в процесс последовательного выполнения программы...........................................66 2.8. Архитектура ЭВМ...........................................68 2.9. Микропроцессор 8085А......................................70 2.10. Тактирование.............................................75 2.11. Минимальная конфигурация МП..............................78 2.12. Ручное управление........................................85 2.13. Монитор..................................................90 2.14. Однокристальные микроЭВМ.................................91 2.15. Блок-схема однокристальной микроЭВМ......................92 Глава 3. Набор команд микроЭВМ..........................99 3.1. Введение.................................................99 3.2. Элементарные команды для управления ЭВМ .... 101 3.3. Структура команд........................................103 3.4. Флажковые биты..........................................116 3.5. Команды пересылки......................................117 3.6. Арифметические, логические команды и команды сравнения 128 3.7. Команды сдвига.........................................136 3.8. Команды приращений (инкремент и декремент) . 138
Оглавление 405 3.9. Команды прямого ввода данных (команды с непосредственной адресацией).......................................................13& 3.10. Команды перехода и ветвления . 142 3.11. Инициирование прерывания.................................151 3.12. Команды ввода и вывода...................................157 3.13. Команда останова.........................................159 3.14. Изменение значения флажкового бита переноса .... 159 3.15. Команда СМА (Complement Accumulator — инвертировать со- держимое аккумулятора)........................................160 3.16. Команда DAA (Decimal Adjust Accumulator — десятичная кор- рекция содержимого аккумулятора)..............................160 3.17. команда NOP..............................................161 3.18. Команды EI и DI (разрешение прерывания и запрещение пре- рывания) .....................................................162 3.19. Относительная адресация ячеек ЗУ................162 3.20. Простые примеры программ.................................164 3.21. Некоторые общие аспекты ввода и вывода информации . . 173 Глава 4. Система проектирования на базе микропроцессора . . . 187 4.1. Введение . ... . * 187 4.2. МикроЭВМ с МП 8085А....................................190 4.3. Запоминающее устройство................................195 4.4. Пульт ручного управления...............................197 4.5. Специальные схемы микроЭВМ.............................200 4.6. Практическая реализация ПРУ............................204 4.7. Системы питания микроЭВМ и ПРУ......................212 4.8. Использование ПРУ......................................218 4.9. Шестнадцатеричный индикатор для ПРУ....................227 Глава 5. Схемы ввода и вывода..................................228 5.1, Введение..................................................228 5.2. Программатор СППЗУ....................................... 232' 5.3. Программируемый интерфейс типа 8255А......................234 5.4. Операции в режимах 1 и 2..................................241 5.5. Временная диаграмма, применяемая при программировании ИС 2708 ...................................................... 247 5.6. Программа загрузки СППЗУ..................................249 5.7. Программа проверки данных в СППЗУ.........................259 5.8. Вывод данных на магнитную ленту...........................263 5.9. УСАПП типа 8251А..........................................265 5.10. Управление ИС 8251А......................................270 5.11. Программа вывода данных на ленту кассетного магнитофона 278 5.12. Адреса рестартов.........................................298 5.13. Ввод программ в ЗУ.......................................299 5.14. Синтез и распознавание речи..............................304 Глава 6. Языки программирования высокого уровня — Бейсик . . . 315 6.1. Введение..................................................315 6.2. Команды и операторы.......................................319 6.3. Арифметические операции...................................322 6.4. Команды перехода и ветвления..............................329 6.5. Ввод данных . 335 6.6. Вывод данных на экран дисплея и при помощи принтера 338 6.7. Ввод и тестирование программ.......................«... 342 6.8. Функции, определяемые пользователем.......................346
406 Оглавление 6.9. Обработка строк символов.................................351 6.10. Обработка байтов данных.................................358 6.11. Индексированные переменные..............................360 6.12. Многократное применение переменных......................362 6.13. Представление чисел.....................................363 6.14. Иллюстрация простых программ............................369 6.15. Команды и операторы на языке Бейсик.....................388 Глава 7. Новые разработки в области микроЭВМ......................394 7.1. Введение..................................................394 7.2. МП 80-х годов.............................................397 7.3. 16-разрядные МП...........................................398 7.4. МП 1АРХ432 фирмы Intel....................................400 Предметный указатель..............................................402
УВАЖАЕМЫЙ ЧИТАТЕЛЬ! Ваши замечания о содержании книги, ее оформ- лении, качестве перевода и другие просим присылать, по адресу: 129820, Москва, И-1,10, ГСП, 1-й Рижский, пер., д, 2, издательство «Мир».
УЧЕБНОЕ ИЗДАНИЕ Й. Янсен КУРС ЦИФРОВОЙ электроники В 4-х томах Том 4 МИКРОКОМПЬЮТЕРЫ Старший научный редактор Л. П. Якименко Младший редактор М. Ю. Григоренко Художник А. И. Чаузов Художественный редактор Н. М. Иванов Технические редакторы Н. И. Манохина, Е. В. Алехина Корректор С. А. Денисова ИБ № 6007 Сдано в набор 06.04.87. Подписано к печати 27.08.87. Формат 60X90’/ie. Бумага типографская № 1. Печать высокая. Гарни- тура литературная. Объем 12,75 бум. л. Усл. печ. л. 25,50. Усл. кр.-отт. 25,50. Уч.-изд. л. 25,67. Изд. № 6/4901. Тираж 40 000 экз. Зак. 974. Цена 2 р. 20 к. ИЗДАТЕЛЬСТВО «МИР» 129820, ГСП, Москва, И-110, 1-й Рижский пер., 2. Московская типография № 11 Союзполиграфпрома при Го- сударственном комитете СССР по делам издательств, поли- графии и книжной торговли. 113105, Москва, Нагатинская ул., д. 1.