Правильная ссылка на эту страницу
http://az-design.ru/Support/SoftWare/Lng/D19790118Elc028.shtml

Программирование микрокомпьютерных систем на языках высокого уровня

Поса
Редакция Electronics

J.G.Posa. Programming microcomputer systems with high-level language, pp. 105—112.

Для решения самых разнообразных производственных и других самостоятельных задач требуются языки, которые могут соперничать с программированием в кодах ассемблера. В этой первой статье серии, посвященной использованию языков высокого уровня для программирования микрокомпьютеров, изложены адаптированные варианты таких языков и рассмотрены их сравнительные достоинства и недостатки.

Микрокомпьютерные программы начинают требовать слишком больших затрат. Чем длиннее и сложнее они становятся, тем менее выгодно кодировать их на языке ассемблера и тем настоятельнее делается потребность применения языков более высокого уровня.

Исследования показывают, что написание программы стоит около 10 долл. в расчете на строку — цифра непомерно большая по сравнению со стоимостью микросхемы, при помощи которой в конце концов будет выполняться программа. Еще хуже то, что стоимость сопровождения программ может превысить первичные затраты в три раза. В то же время известно также, что программисты пишут одно и то же число строк в день, независимо от того, каким языком они пользуются, и если для языка ассемблера обычно генерируется одна строка машинного кода на инструкцию, то для языков высокого уровня генерируется несколько таких строк.

Учитывая это, языки высокого уровня следует считать более рациональными, поскольку они обеспечивают более эффективное использование труда программиста. Прежде всего, они более непосредственно представляют тот логический путь, который имел в виду программист, когда он разрабатывал первоначальный алгоритм и составлял для него блок-схему. Кроме того, их команды и ключевые слова более близки к элементам естественного английского языка, что опять-таки помогает в написании программ. Еще важнее то, что такое сходство с естественным языком позволяет и автору и другому специалисту легче читать закодированную программу, поэтому ее можно более безболезненно модифицировать, обновлять и исправлять в ней ошибки. Это так называемое сопровождение программ упрощается при работе со структурированными программами, поскольку их функциональные блоки или модули можно изменять индивидуально, не затрагивая системы в целом.

Другая сторона проблемы

Однако в сравнении с языком ассемблера языки высокого уровня снижают эффективность использования компьютера. Как правило, программы, написанные на языках высокого уровня, требуют большего времени для исполнения и увеличенной емкости памяти, а в микрокомпьютерных системах оба этих фактора являются зачастую наиболее важными. И несмотря на то что стоимость памяти постоянно снижается, а частоты системных синхросигналов растут, проблемы экономии объема памяти и времени не утратят своего значения, поскольку существует и другая тенденция — создание однокристальных микрокомпьютеров, имеющих встроенную и поэтому ограниченную по емкости постоянную память (ПЗУ). Кроме того, микрокомпьютеры начинают сейчас все более широко применяться для обработки данных в реальном времени, когда на счету каждая микросекунда.

С точки зрения программиста, язык высокого уровня также имеет тот недостаток, что трансляция исходного кода на машинный язык в случае длинных программ может занять весьма большое время, вплоть до часа. Практически единственный способ ускорить этот процесс — кросс-компиляция программы при помощи более дорогостоящего компьютера; при этом, однако, пользователям зачастую приходится ожидать доступа к более крупным машинам, а на этапе отладки это может оказаться неприемлемым.

Объект. Компьютер или система проектирования с хорошим обеспечением имеет многоуровневую иерархию программных средств. Аппаратные средства окружены оп
Рис.1. Объект. Компьютер или система проектирования с хорошим обеспечением имеет многоуровневую иерархию программных средств. Аппаратные средства окружены операционной системой, которая обеспечивает управление ресурсами. Трансляторы вместе с другими служебными программами располагаются на следующем уровне.

Очевидно поэтому, что идеальный язык высокого уровня для микрокомпьютерной системы должен был бы иметь ряд исключительных свойств. Этот язык должен позволять генерировать компактные, исключительно эффективные машинные коды и при этом быть достаточно универсальным, чтобы на нем можно было программировать с использованием апробированных практических приемов, и пригодным для разных типов машин, а эти требования, как правило, противоречат друг другу. Кроме того, если программы на этом языке будут компилироваться, то компилятор должен быть резидентным. Это значит, что он должен работать на том же самом микрокомпьютере, для которого разрабатываются данные программные средства, чтобы избежать дополнительных затрат и неудобств кросс-компиляции, т.е. перевода программ с одной машины на другую (см. «Два типа трансляторов»). Время компиляции тоже должно быть как можно меньшим, а это требование также жесткое для микрокомпьютера.

Один из способов избежать подобных проблем — остановиться на языке макроассемблера, который по уровню организации выше, чем язык ассемблера, но ниже, чем языки высокого уровня. В подобном языке присваиваются символические имена целым последовательностям или индивидуальным операторам языка ассемблера, которые затем выполняются при вызове по этим именам. Такие макроинструкции незаменимы для многих приложений, поскольку они позволяют получать программы, почти столь же компактные и быстрые, как и программы, закодированные на языке ассемблера, но при этом ускоряют и облегчают написание программ. Для решения некоторых задач библиотека отработанных макроинструкций фактически может оказаться более ценной, чем язык высокого уровня (см. «Готовые макроинструкции»).

Оптимизация

Другой подход состоит в том, чтобы перерабатывать программные коды, генерируемые трансляторами с языков высокого уровня. Способ, наиболее доступный программисту, — это ручное кодирование на языке ассемблера наиболее ответственных разделов программы. Изготовители систем проектирования знают о том, что без ручной оптимизации обойтись зачастую просто невозможно, поэтому языки высокого уровня, которые они предлагают для своих машин, предусматривают возможность сочетать в программе модули высокого и низкого уровней или же позволяют включать подпрограммы на языке ассемблера в объектные коды низкого уровня. Следующая статья настоящей серии, публикуемая в первом февральском выпуске журнала, будет посвящена оптимизации программ при помощи языка ассемблера.

Подобные высокоуровневые языки системного программирования являются сейчас неотъемлемой частью пакетов обширных программных средств, поставляемых вместе со всеми основными системами проектирования. В некоторых случаях программные средства, предоставляемые изготовителями полупроводниковых приборов, приближаются теперь к программному обеспечению мини-компьютеров.

На рис.1 показана иерархическая структура программных средств, поставляемых для типичной хорошо обеспеченной системы проектирования. Диаграмму такого типа можно нарисовать для микрокомпьютерной системы проектирования Intellec фирмы Intel, системы Starplex фирмы National Semiconductor и системы ZDS фирмы Zilog, а также некоторых других. Концентрические круги не неподвижны — их можно мысленно поворачивать таким образом, чтобы от оборудования пользователя к объектным (рабочим) аппаратным средствам вели различные возможные пути. Центральный круг представляет аппаратные средства системы проектирования: центральный процессор (ЦП), оперативную и массовую памяти, а также различные периферийные устройства. Средства следующего уровня, обеспечивающие управление памятью, заданиями и вводом-выводом (ВВ), называются обычно операционной системой.

Принято классифицировать языки высокого уровня по их пригодности либо для прикладного, либо для системного программирования. Языки прикладного программирования, например КОБОЛ, применяются для научно-технических или экономических вычислений, для обработки математической или текстовой информации. Языки системного программирования служат для реализации таких более близких к аппаратным средствам машины функций, как управление задачами, управление памятью и распределение памяти, а также определение приоритетности процессов.

Следует отметить, однако, что для микрокомпьютеров эта граница между высокоуровневыми языками прикладного системного программирования практически отсутствует. В микрокомпьютерах такие языки, как С и ПАСКАЛЬ, можно одинаково успешно применять для обеих целей. Язык БЕЙСИК, хотя он и считается прикладным, можно также занести в ПЗУ и использовать для управления действиями микропроцессоров во всякого рода «смышленных» (программируемых) устройствах, т.е. придавать ему функции системного языка.

Один из языков высокого уровня, нашедший широкое распространение в микрокомпьютерных системах, — это язык ПЛ/1 фирмы IBM Corp. Фирмы Intel Corp. (Санта-Клара, шт.Калифорния), Zilog Inc. (Купертино, шт.Калифорния) и отделение электронных приборов фирмы Rockwell International Corp. (Анахайм, ант. Калифорния) предлагают языки системного программирования микрокомпьютеров ПЛ/М, ПЛ/3 и ПЛ/65 соответственно, чтобы пользователь мог разрабатывать программные средства для микросистем этих фирм. Эти языки выполнены как варианты языка ПЛ/1, они похожи друг на друга, однако несовместимы. Все три варианта сочетают в себе идеи структурного программирования языков АЛГОЛ и ПЛ/1, ориентированы на модульное программирование и позволяют тем или иным способом включать подпрограммы на языке ассемблера для оптимизации.

Языки типа ПЛ/1

Язык ПЛ/М фирмы Intel предоставляется сейчас в виде резидентного компилятора для микропроцессоров 8080, 8085 и с недавнего времени 8086. Первоначальный его вариант, который разработал Килдолл в 1974г., был впервые реализован в виде двухпроходного кросс-компилятора, который генерировал загружаемые «сверху вниз» коды для микропроцессора 80081{Электроника, 1974, №13, с.33}. Этот язык предоставляется сейчас как резидентный с системами проектирования Intellec, включая новую «Серию II».

Версия ПЛ/М-80, предназначенная для 8-разрядных ЦП, предусматривает данные двух типов: байт и адрес. Байтовые данные принимают 8-разрядные значения без знака, а адресные — 16-разрядные значения без знака. Версия ПЛ/М-86 ориентирована на пять типов данных: байт, слово (16-разрядное без знака), целое (16-разрядное со знаком), действительное число (32-разрядное с плавающей запятой) и указатель (либо 16-, либо 32-разрядный указатель адреса памяти).

Система программирования ПЛ/М компилирует исходный код, написанный программистом, формируя перемещаемые объектные модули (рис.2). Исходные модули языка ПЛ/М содержат описания данных и процедуры (описания переменных и выполняемые операторы), которым могут быть присвоены атрибуты PUBLIC (ОБЩИЕ) и EXTEPNAL (ВНЕШНИЕ), чтобы упростить организацию связи между модулями. Другими словами, некоторый модуль может использовать описание данных ВНЕШНИЕ, чтобы обратиться к ОБЩЕЙ информации в другом модуле.

Язык ПЛ/М и др. Трансляторы с языков высокого уровня для микропроцессора 8086 генерируют перемещаемые объектные модули, которые связываются между собо
Рис.2. Язык ПЛ/М и др. Трансляторы с языков высокого уровня для микропроцессора 8086 генерируют перемещаемые объектные модули, которые связываются между собой для выполнения. Для 8-разрядных микропроцессоров 8080 и 8085 программы, написанные на языке ФОРТРАН-80 фирмы Intel, будут также генерировать объектные модули, в дополнение к модулям, закодированным на яз ыке ПЛ/М и ассемблере.

Язык ПЛ/М критикуют за то, что он генерирует неэффективные объектные коды, а компилятор, как говорят, работает медленно. В то же время, однако, этот язык и операционную систему ISIS-II высоко оценивают за то, что они обладают многими полезными для программиста возможностями.

Для разработки программного обеспечения на микрокомпьютерах серии MCZ и системе проектирования серии ZDC фирма Zilog предлагает два тесно связанных языка ПЛЗ (PLZ). Высокоуровневый язык ПЛЗ/СИС (PLZ/SYS) — это процедурно-ориентированный язык, в котором сочетаются элементы языков ПАСКАЛЬ, АЛГОЛ, ПЛ/1 и С и который реализован таким образом, что не зависит от архитектуры какой-либо конкретной машины. Он выполнен в виде резидентного компилятора. Низкоуровневая версия ПЛЗ/АСМ (PLZ/ASM) — это фактически структурированный язык ассемблера для объектной машины, но с некоторыми операциями управления языка ПЛЗ/СИС.

В настоящее время язык ПЛЗ/АСМ предоставляется для микрокомпьютеров Z80 и Z8, но в первом квартале 1979г. будет готов также компилятор для микрокомпьютера Z8000. Язык ПЛЗ/СИС предлагается для Z80 и примерно в середине года будет готов в варианте для Z8000. Для прибора Z8, который является однокристальным микрокомпьютером с встроенным ПЗУ и поэтому почти всегда требует только низкоуровневого языка ПЛЗ/АСМ, версии высокоуровневого языка ПЛЗ/СИС не существует.

Язык ПЛЗ удовлетворяет многим требованиям, предъявляемым к хорошему языку программирования для микрокомпьютерных систем. Он является структурированным и быстро генерирует эффективные программные коды. При этом язык ПЛЗ/АСМ, который в сильной степени зависит от машины, может быть оптимизирован с точки зрения скоростных характеристик и использования минимального объема памяти.

Программа, написанная на языке ПЛЗ, состоит из модулей, которые, как и в языке ПЛ/М, содержат описания данных и процедуры. Символы модулей бывают внутренними, внешними или глобальными. Связь между модулями осуществляется следующим образом: конкретный символ описывается как глобальный в одном модуле, а затем к нему обращаются как к внешнему в другом модуле (опять-таки как в языке ПЛ/М). Процедуры языка ПЛЗ содержат описания локальных переменных и выполняемые операторы.

Условные операторы в языке ПЛЗ имеют вид IF-THEN (если — то), причем их можно использовать также с оператором SELECT (выбрать), чтобы обеспечить избирательное выполнение различных операторов, подобно оператору языка ПАСКАЛЬ CASE (в случае). Язык ПЛЗ предусматривает возможности итерации, реализуемые при помощи оператора DO. Операторы, находящиеся в границах от DO до OD, выполняются до тех пор, пока не встретится оператор EXIT (выйти), REPEAT (повторить) или RETURN (вернуть). Рис.3 иллюстрирует, каким образом модули языков ПЛЗ/СИС и ПЛЗ/АСМ связываются между собой, образуя объектный модуль, при работе под управлением операционной системы RIO фирмы Zilog.

«Основная черта языка ПЛЗ заключается в том, что он был разработан как два языка и предусматривает оптимизацию по модульному принципу, а не оператор за оператором, — говорит Гиббоне, заведующий маркетингом фирмы Zilog. — Благодаря разработке двух языков системного программирования ПЛЗ/СИС удалось сделать действительно высокоуровневым и машинонезависимым».

Для разработки программ микропроцессоров семейства 6500 фирма Rockwell International поставляет компилятор для языка ПЛ/65 на дискете. Этот компилятор является резидентным, причем не требуется никакой дополнительной оперативной памяти на ЗУПВ сверх стандартных 16 кбайт, поставляемых с «Системой 65». Кроме того, фирма предлагает компилятор ПЛ/65 и кросс-ассемблер 6500 для работы на мини-компьютере PDP-11 под управлением операционной системы RT-11.

Этот компилятор ПЛ/65 генерирует программы на языке ассемблера для «Системы 65», что дает возможность усовершенствовать или отлаживать программу на уровне ассемблера.

Язык ПЛ/65 обеспечивает также проектирование модульных программ, поскольку предусмотренные этим языком условные операторы и операторы управления итеративными циклами можно использовать для структурирования программ. Другими особенностями этого языка являются средства целочисленной арифметики, избирательного и коллективного выполнения операторов, а также средства обработки массивов.

Кроме языков ПЛ/М, ПЛЗ и ПЛ/65, для других приборов имеются некоторые другие языки с компиляторами, напоминающие язык ПЛ/М. Фирма Motorola Semiconductor предлагает язык МПЛ (MPL), который также является упрощенной модификацией языка ПЛ/1. Компилятор МПЛ является резидентным в системе проектирования Exorcicer фирмы Motorola для ЦП 6800. В 1979г. появится вариант этого языка для ЦП 6809 и 68000. Компилятор МПЛ генерирует коды ассемблера, что позволяет усовершенствовать программу с точки зрения объема занимаемой памяти и времени выполнения, а также предусматривает включение операторов языка ассемблера на уровне исходной программы. Фирма National Semiconductor имеет язык под названием СМПЛ (SMPL) для разработки программных средств микропроцессоров IMP-16 и Расе. Фирма Signetics предлагает язык ПЛµС (PLµS) для микропроцессора 2650 (также разработанный Килдоллом). Наконец, существуют еще два варианта языка ПЛ/М для микропроцессора 6800, под наименованиями ПЛ/М 6800 и ПЛ/У (PL/W) их предоставляют фирмы Intermetrics (Кеймбридж, шт.Массачусетс) и Wintek Corp. (Лафайет, шт.Индиана) соответственно. Фактически фирма вскоре будет, по-видимому, иметь несколько комплексов программных средств для микропроцессоров. «Сейчас мы рассматриваем вопрос о том, чтобы перестать заниматься только семейством компиляторов и действительно присоединиться к тем, кто разрабатывает общее программное обеспечение для микропроцессоров,— говорит Вайсберг, ответственный за выпуск системы программирования ПЛ/М 6800, добавляя:— Мы пока не знаем, будем ли мы по-прежнему ориентироваться на язык ПЛ/М или начнем использовать ПАСКАЛЬ».

ПАСКАЛЬ входит в моду

Язык ПАСКАЛЬ был высоко оценен в академических кругах с самого начала и сейчас начинает входить в моду в промышленности1{Электроника, 1978, №21, с.70}. Сейчас, кажется, все фирмы, от American Microsystems до Zilog, рассматривают возможности его внедрения.

Популярность языка ПАСКАЛЬ объясняется весьма вескими причинами. Оказалось, во-первых, что он пригоден как для системного, так и для прикладного программирования. Во-вторых, это язык относительно новый, он разработан всего 10 лет назад и потому имеет много ценных особенностей, которые отсутствуют в прежних языках. Например, перечень возможностей управления структурированными программами, предоставляемых языком ПАСКАЛЬ, — один из наиболее исчерпывающих по сравнению с любым другим языком программирования.

Серьезной проблемой в настоящее время является то, что не существует стандартного варианта языка ПАСКАЛЬ, приемлемого для промышленных пользователей, хотя работы в этом направлении проводятся достаточно активно. Вариант, предложенный разработчиком языка Виртом в его книге «Сообщение о языке ПАСКАЛЬ и руководство для пользователя» (Pascal User Manual and Report), явно непригоден для промышленных приложений, поскольку каждому новому пользователю приходится быстро вводить различные дополнения или модификации. Если так будет продолжаться и далее, то для языка ПАСКАЛЬ может сформироваться целое семейство вариантов, как это произошло с БЕИСИКом, причем пользователю нельзя будет без достаточно серьезного анализа считать эти варианты полностью совместимыми. Однако в декабре 1978г. для обсуждения языка ПАСКАЛЬ впервые собрался комитет, образованный по инициативе Американского национального института стандартов, и в Европе тоже проводятся подобные работы.

3. Языки ПЛЗ. Низкоуровневые ПЛЗ-программы пишутся не на чистом языке ассемблера, а на языке ПЛЗ/АСМ, который позволяет получить код ассемблера при по
Рис. 3. Языки ПЛЗ. Низкоуровневые ПЛЗ-программы пишутся не на чистом языке ассемблера, а на языке ПЛЗ/АСМ, который позволяет получить код ассемблера при помощи программы-фильтра. Кроме того, с модулем промежуточного кода можно связать модуль интерпретации Zinterp, чтобы выполнить полученный код в режиме интерпретации.

Двумя наиболее активными сторонниками языка ПАСКАЛЬ в США являются, по-видимому, Калифорнийский университет (КУ) (Сан-Диего) и фирма Texas Instruments Inc. (Даллас). Компилятор языка ПАСКАЛЬ Калифорнийского университета генерирует программы на промежуточном языке, часто называемом псевдокодом или П-кодом (P-code), для интерпретации объектной (рабочей) машиной. Благодаря этому расширяются возможности перенесения программ с одной машины на другую. Если интерпретатор написан на машинном языке, программу на языке ПАСКАЛЬ-КУ можно компилировать для выполнения на этой машине. Благодаря этому язык уже удалось приспособить для многих различных микропроцессоров.

Некоторые специалисты говорят, что, поскольку в главную машину необходимо включать тот или иной интерпретатор, связанные с этим накладные расходы делают язык ПАСКАЛЬ-КУ малопривлекательным для применения в промышленных задачах, ориентированных на использование постоянной памяти. Тем не менее некоторые фирмы приспосабливают ПАСКАЛЬ-КУ для этих целей, реализуя интерпретатор аппаратным способом. Недавно, например, фирма Control Systems Inc. (Канзас-Сити, шт.Канзас), сообщила о своей универсальной системе проектирования 470, в которой интерпретатор КУ записан в ПЗУ1{Электроника, 1978, №26, «Методы, схемы, аппаратура»}. После тога как пользователь разработает свою программу, ее можно снова ввести в систему для решения самостоятельных промышленных задач. Кроме того, фирма Western Digital Corp. разработала комплекс микросхем на базе языка ПАСКАЛЬ-КУ2{Электроника, 1978, №21, с.70}. Предполагается, что при помощи этого набора приборов можно построить аппаратные блоки, выполняющие программы на псевдокоде КУ в автономной машине.

Фирма Futuredata Computer Corp. (Лос-Анджелес) планирует предлагать язык ПАСКАЛЬ-КУ для своей новой микрокомпьютерной системы проектирования2{Электроника, 1978, №21, с.70}. Глэдстоун, вице-президент фирмы, говорит: «Мы постоянно выслушиваем требования заказчиков о предоставлении им системы программирования на языке ПАСКАЛЬ, поэтому мы собираемся сейчас сделать это для них». Фирма планирует впервые предложить ПАСКАЛЬ-КУ к концу первого квартала 1979г., предназначая его вначале для прикладного программирования. Для системного программирования фирма Futuredata представит собственный вариант языка ПАСКАЛЬ с компилятором в третьем квартале. Этот вариант позволит получать коды, записываемые в ПЗУ и предназначающиеся для системных приложений. «Мы пока не знаем, будем ли мы транслировать псевдокоды в машинные коды или вообще откажемся от этого промежуточного кода»,— говорит Глэдстоун.

Фактически многие изготовители систем проектирования сейчас оценивают возможности внедрения ПАСКАЛЯ, так что в этом году будет, по-видимому, представлен ряд компиляторов с языка ПАСКАЛЬ. Фирма Motorola, например, разрабатывает такой компилятор для микрокомпьютера 6809; этот компилятор должен быть готов для системы проектирования Exorciser к концу второго квартала. Он будет генерировать оптимизированный промежуточный код под названием Z-код. Фирма планирует также создание ПАСКАЛЬ-компилятора, способного генерировать программы в машинных кодах.

Фирма Texas Instruments (Даллас) с апреля 1978г. предоставляет систему программирования на ПАСКАЛЕ для своего мини-компьютера DS990 с внешней памятью на жестких магнитных дисках. Основой этого мини-компьютера является устройство 990/10, которое моделирует набор команд 16-разрядного микропроцессора 9900 фирмы при помощи транзисторно-транзисторной логики. Язык ПАСКАЛЬ фирмы TI, или ТИП (TIP), можно применять при кросс-компиляции машинных кодов для всего семейства 9900.

Перечислим некоторые из программных средств, которые сейчас включены в систему ТИП: средства организации рабочей библиотеки; служебная программа (утилит) для организации вложенных модулей —она автоматически преобразует исходный код согласно стандартному формату; процессор-конфигуратор, обеспечивающий раздельную компиляцию вложенных программных модулей; и оригинальный обратный ассемблер, который генерирует объектный ПАСКАЛЬ-код из кода, написанного на языке ассемблера машины 990.

Ключевым элементом системы программирования на языке ТИП является микропроцессорная исполнительная программа фирмы TI, или TIMPX, представляющая собой набор программ, которые создают операционное окружение для одновременного выполнения нескольких ТИП-программ. Операционная система планирует протекание процессов при помощи одного микропроцессора 9900 в соответствии с многоуровневой приоритетной схемой, используя сигналы двустороннего обмена и аппаратные прерывания для синхронизации процессов и устройств.

Прежде чем был создан теперешний вариант ТИП, фирме TI пришлось расширять вариант ПАСКАЛЯ, разработанный Виртом, в различных направлениях. Некоторые из модификаций языка — это файлы прямого доступа, более гибкие стандартные типы данных ввода-вывода, а также переменные многократной длины (повышенной точности).

В фирме TI язык ПАСКАЛЬ действительно любят и широко применяют для разработки различных программных средств. Сам ТИП-компилятор и несколько системных модулей написаны на языке ПАСКАЛЬ фирмы TI. Фирма планирует продолжать усовершенствование языка ТИП и сделать его доступным более широким кругам пользователей. В частности, в этом году (быть может, уже в первом квартале) фирма TI представит язык МПП (МРР), или микропроцессорный ПАСКАЛЬ. Это будет упрощенная версия языка ТИП, разработанная специально для работы на системе FS990, с внешней памятью на гибких магнитных дисках.

Поскольку система FS990 выполнена на базе мини-компьютера 990/4, который содержит микропроцессор 9900, МПП-компилятор будет резидентным. Он будет генерировать промежуточный код из исходного кода ТИП примерно так же, как компилятор КУ. Однако этот промежуточный код можно будет либо интерпретировать, либо пропускать через кодовый генератор для формирования реальных машинных кодов микропроцессора 9900.

Нетипичный язык ФОРТ

В языке под названием ФОРТ (Forth) принят оригинальный подход, который позволяет исключить недостатки, присущие высокоуровневым языкам микрокомпьютерных систем. Это один из немногих языков, в которых практически реализована концепция, называемая цепной программой с косвенной адресацией малых модулей (indirect-threaded code). В нем использована запись в обратной бесскобочной форме (как в калькуляторах фирмы Hewlett-Packard Со.) и двухстековая архитектура.

Язык ФОРТ обеспечивает высокую компактность программ в основном благодаря компиляции словаря в цепочки адресов. Эти адреса являются ссылками на ячейки памяти, которые содержит определения для каждого слова данного словаря. Благодаря такой схеме косвенной адресации ФОРТ позволяет обойтись без обычной последовательности вызовов подпрограмм.

Программные средства системы ФОРТ включают ассемблер (написанный на том же языке), ФОРТ-компилятор и два уровня интерпретаторов, а кроме того — служебные программы управления виртуальной памятью и файлами. Язык имеется в двух вариантах: мини-ФОРТ для мини-компьютеров и микро-ФОРТ для микрокомпьютерных систем проектирования. Язык предусматривает возможность включения в программы подпрограмм на языке ассемблера, что обеспечивает дополнительный выигрыш во времени и в объеме памяти.

Язык микро-ФОРТ требует менее 6 кбайт памяти в микропроцессорных системах проектирования. Рабочие системы, выполняющие ФОРТ-программы, должны содержать небольшую (512 байт) размещаемую в ПЗУ сокращенную версию операционной системы. Типичное распределение памяти при работе на языке ФОРТ показано на рис.4.

Карта памяти для системы программирования на языке микро-ФОРТ. Язык микро-ФОРТ с компилятором может располагаться в системе пользователя либо в операт
Рис.4. Карта памяти для системы программирования на языке микро-ФОРТ. Язык микро-ФОРТ с компилятором может располагаться в системе пользователя либо в оперативной памяти, либо в комбинации ЗУПВ и ПЗУ. В данном примере прикладной словарь и стандартное ядро объемом 512 байт размещены в постоянной памяти.

Средства программирования микро-ФОРТ в настоящее время поставляются для К/МОП-микропроцессора 1802 фирмой RCA Corp. в составе ее системы проектирования Cosmac и фирмой Diversified Technology Inc. (Риджленд, шт.Миссури) в составе системы проектирования под наименованием DTM 145-DH. Фактически система проектирования модели 145-DH была разработана с ориентацией на язык микро-ФОРТ, и в ней применяется микрокомпьютер DT/µMOS, выполненный на базе микропроцессора SCP1802 фирмы Solid State Scientific Inc. (Монтгомеривилл, шт.Пенсильвания). Различные варианты языка микро-ФОРТ предоставляются также в системах проектирования фирм Intel, Zilog и Motorola для микропроцессоров 8080, Z80 и 6800. В конце января или в начале февраля язык ФОРТ будет предлагаться для микропроцессора 8086 фирмы Intel и 9900 фирмы TI.

И БЕЙСИК, и ФОРТРАН

Во многих системах проектирования сейчас применяется язык БЕЙСИК или ФОРТРАН. Некоторые фирмы предлагают ФОРТРАН строго как прикладной язык, в то время как другие предусматривают возможность связывать объектные модули ФОРТРАНа с другими модулями для программирования ПЗУ. То же справедливо и для языка БЕЙСИК, поскольку для него сейчас имеются как компиляторы, так и интерпретаторы, причем интерпретаторы применяются главным образом для прикладного программирования, а компиляторы, как правило, позволяют получать программы в машинных кодах для автономных приложений. Фирма Tektronix, например, только что объявила о языке БЕЙСИК-компилятор для получения объектных кодов микропроцессоров 8080, 8085, а также для той части набора команд Z80, которая совпадает с набором команд МП 80801{Электроника, 1979, №1, «Новости производства»}.

Три ступени. Существует много вариантов языка БЕЙСИК; фирма TI выпустила свой, под названием Мощный БЕЙСИК. Хорошо представляя себе важность экономии
Рис.5. Три ступени. Существует много вариантов языка БЕЙСИК; фирма TI выпустила свой, под названием Мощный БЕЙСИК. Хорошо представляя себе важность экономии объема памяти для контроллерных приложений с использованием ПЗУ, фирма TI предусмотрела конфигуратор, обеспечивающий сокращение необходимой емкости ПЗУ (выделено штриховкой).

Фирма Futuredata Computer Corp. предлагает со своими универсальными системами проектирования как интерпретатор, так и компилятор для языка БЕЙСИК. Интерпретатор можно использовать для прикладного программирования и для диалоговой отладки программ, а компилятор позволяет генерировать коды для микропроцессоров 8080, 8085, Z80, 6800, а уже в первом квартале 1979г. те же возможности будут предусмотрены для МП 8086 и 6802.

Фирма TI в настоящее время предлагает три варианта языка БЕЙСИК для своих микропроцессоров 9900 и мини-компьютеров 990. Два из интерпретаторов этого языка под названием Мощный БЕЙСИК (POWER BASIC) поставляются в виде ПЗУ. Третий вариант под названием Мощный БЕИСИК-конфигуратор поставляется на дискете для использования с системой проектирования FS990. Как показано на рис.5, эта программа-конфигуратор отличается от предыдущих вариантов отсутствием редактора, что уменьшает объем требуемой постоянной памяти в системе пользователя.

Специалисты расходятся во мнениях относительно того, насколько велика должна быть программа, чтобы стало целесообразным применять язык высокого уровня2{Электроника, 1975, №16, с.45}. Некоторые говорят, что если объем исходной программы требует более 4 кбайт памяти, то следует переходить на язык высокого уровня. Однако ответ не может быть столь категоричным, поскольку он зависит от таких факторов, как число строк исходной программы и число подлежащих поставке машин, а также от выбранного языка и аппаратных средств.

Точка перехода

Один из инженеров, недавно переключившихся с произвольных логических схем на микропроцессоры,— Руссо из фирмы Ann Arbor Terminals Inc. (Энн-Арбор, шт.Мичиган). «Я могу представить себе, что буду использовать язык высокого уровня, однако пока еще я этого не сделал,— говорит он.— Эти языки обеспечивают легкость специализации систем, так что если вам действительно необходимы сложные пакеты программ для математических расчетов, то такие языки имеют смысл. Но если вы применяете микропроцессор просто для замены логических вентилей с целью обеспечения наибольшей экономической эффективности, то вовсе нет серьезных оснований, оправдывающих переход на язык высокого уровня. Это все равно, что пытаться заменить несколько вентилей сложной большой интегральной схемой,— вы не можете себе позволить такую роскошь и поэтому оставляете вентили».

Шварц, вице-президент фирмы Mark Williams Со. (Чикаго, шт.Иллинойс), сказал бы, что Руссо и другие подобные ему специалисты работают в той области, где языки высокого уровня нельзя использовать эффективно. «Почти все языки высокого уровня являются адаптациями языков, применяемых для обработки данных,— они не разрабатывались специально для микрокомпьютеров. Поэтому они не содержат эффективных средств управления, необходимых для решения промышленных задач, например не предусматривают операций над отдельными битами и обработки прерываний»,— говорит Шварц. А на более низком уровне существует программирование на языке ассемблера, которое все еще доминирует в большинстве промышленных приложений. «Между этими уровнями сохраняется большой разрыв, причем никто, по-видимому, не спрашивает инженеров, что им необходимо», — говорит он.

Он считает также, что применение компиляторов является ошибкой многих пользователей микрокомпьютеров. «Компиляторы имеют реальный смысл только для крупных машин, где они окупаются благодаря тому, что используются все время. Практически наиболее целесообразно идти по пути «разумных» интерпретаторов. В этом случае вы можете проводить различные доработки, подключать новые устройства и отлаживать и сопровождать программы в условиях эксплуатации». Фирма Mark Williams Co. в настоящее время предлагает БЕИСИК-интерпретатор под названием ХУ-БЕИСИК, который ориентирован на промышленных пользователей1{Электроника, 1978, №19, с.99}.

Еще одним дискуссионным вопросом является вопрос о том, следует ли при разработке программных средств для промышленных приложений использовать интерпретатор или компилятор. Многие соглашаются со Шварцем в том, что для малых проектов диалоговая природа интерпретатора является исключительно ценной. Гейтс, президент фирмы Microsoft Co. (Бельвю, шт.Вашингтон), считает, что компилятор, способный генерировать реальные машинные коды,— это самое лучшее, по крайней мере, для крупных промышленных проектов. «В малых системах сам интерпретатор иногда будет занимать такой же большой объем, как программа пользователя, причем работа с ним идет в 3—5 раз медленнее»,— говорит он.

Гейтс отмечает также недостаточность программного обеспечения для микрокомпьютеров: «Для промышленных приложений нужны улучшенные операционные системы реального времени, улучшенные системы управления базами данных, и здесь явно недостаточно программ-утилитов».

Стремясь заполнить этот разрыв, фирма Microsoft в будущем году планирует дополнить программное обеспечение 8-разрядных машин четырьмя новыми изделиями. Фирма представит АПЛ-интерпретатор1{Электроника, 1978, №26, «Сообщения»}, БЕИСИК-компилятор, систему управления базой данных и расширенный вариант языка ПАСКАЛЬ, причем все эти программные средства будут ориентированы на пользователя микрокомпьютера. «ПАСКАЛЬ хорош как для системного, так и для прикладного программирования, однако большинство вариантов этого языка предусматривает использование псевдокода, что делает их непригодными для промышленного программирования»,— говорит Гейтс. ПАСКАЛЬ фирмы Microsoft будет вместо этого генерировать реальные коды, причем он будет в значительной степени напоминать язык С, разработанный фирмой Bell Labs. «Нотация языка С не только компактна — она, наряду с этим, обеспечивает легкость проектирования компилятора,— говорит Гейтс.— Я надеюсь, что нам удастся распространить этот язык и среди других разработчиков систем — фирм Zilog, Mostek и т.д.».

Гейтс заинтересован также в новых 16-разрядных машинах и предполагает разработать системы программирования на КОБОЛе и БЕЙСИКе для микропроцессоров 8086 и Z8000. «Новые процессоры отличаются гораздо большим быстродействием, и на их базе будет гораздо легче создавать многопрограммные системы,— говорит он.— Кроме того, для микрокомпьютеров все шире применяются накопители на жестких магнитных дисках. Микропроцессор настолько универсален, что все труднее и труднее провести грань между системой проектирования, малой системой для экономических расчетов и программируемым терминалом».

Килдолл, кторый является сейчас президентом собственной фирмы Digital Research Inc. (Пасифик-Гроув, шт.Калифорния), утверждает: «Языки системного программирования в общем на голову выше языка ассемблера. Но на практике необходим доступ к таким средствам машины, как управление прерываниями и порты ввода-вывода. Поэтому вы должны иметь возможность генерировать машинные коды, соперничающие с написанными вручную программами. Работая с интерпретаторами, вы можете получить действительно компактную программу, однако вам приходится платить за это увеличенным временем выполнения. В системах, базирующихся на ПЗУ, вы просто не можете полностью использовать истинное быстродействие машины. Интерпретаторы связаны с накладными затратами, от которых вам не удастся избавиться».

Гиббоне (фирма Zilog) добавляет: «Если разработчик использует в качестве программной памяти ПЗУ, а не магнитное запоминающее устройство, то он, конечно, озабочен размером своей программы. Я не уверен, что такого разработчика когда-либо удовлетворяли языки высокого уровня, и не думаю, что это когда-нибудь случится. Он почти определенно заинтересован в ручном написании своих программ. Наша цель и цель других специалистов в области программирования заключается в том, чтобы в конечном счете удовлетворить такого разработчика. Однако, когда вы просматриваете список пользователей, которым необходимы программные средства, то оказывается, что это как раз те пользователи, которые получат их в последнюю очередь, поскольку их требования наиболее жесткие».

Дочерние статьи:

Готовые макроинструкции

Два типа трансляторов

Выходные данные:

Журнал "Электроника" том 52, No.02 (554), 1979г - пер. с англ. М.: Мир, 1979, стр.22

Electronics Vol.52 No.2 January 18, 1979 A McGraw-Hill Publication

J.G.Posa. Programming microcomputer systems with high-level language, pp. 105—112.

Раздел: МЕТОДЫ, СХЕМЫ, АППАРАТУРА

Тема:     Микрокомпьютеры





Дата последнего изменения:
Thursday, 21-Aug-2014 09:10:44 MSK


Постоянный адрес статьи:
http://az-design.ru/Support/SoftWare/Lng/D19790118Elc028.shtml