Загрузить в аккумулятор (LoaD Accumulator) байт из памяти данных.
Ida #data
Загрузить в аккумулятор (LoaD Accumulator) константу.
sta memory
Сохранить содержимое аккумулятора (STore Accumulator) в памяти данных.
tst memory
Проверить (TeST) байт памяти данных на нулевое значение.
tsta
Проверить аккумулятор (TeST Accumulator) на нулевое значение.
Напишите соответствующие макроопределения. Как вы думаете, почему такой подход является не слишком хорошей идеей?
Глава 9
Язык высокого уровня
Для написания всех программ в последних шести главах мы с вами использовали язык ассемблера. Хотя ассемблерные программы достаточно сильно отличаются от чистого машинного кода (см. стр. 239), тем не менее между любой машинной инструкцией и соответствующей командой ассемблера сохраняется однозначное соотношение. То есть программист вынужден мыслить объектами внутренней структуры микроконтроллера — регистров и памяти, а не объектами реализуемого алгоритма. Несмотря на то что большинство ассемблеров поддерживают макрорасширения, благодаря которым несколько машинных команд могут быть сгруппированы в виде псевдокоманды высокого уровня, это не более чем попытка обойти недостаток машинно-ориентированного языка. В чем же выражается этот недостаток? А в том, что для улучшения эффективности, качества и увеличения степени повторного использования программ кодирующий язык должен быть максимально независим от архитектуры процессора и должен иметь синтаксис, более ориентированный на решение задач.
Разумеется, не стоит и пытаться выучить какой-либо язык высокого уровня в одной короткой главе. Тем не менее, прочитав эту главу, вы:
• Поймете необходимость использования языка высокого уровня.
• Оцените преимущества, предоставляемые языком высокого уровня.
• Поймете, какие проблемы связаны с использованием языка высокого уровня для встраиваемых приложений на базе микроконтроллеров.
• Научитесь писать коротенькие программы на Си.
Уже в первые годы после появления коммерческих программных систем люди осознали, что писать большие программы на родном для компьютера языке очень сложно. Дело в том, что помимо всего прочего компьютеры начали периодически устаревать, и для каждой новой модели программы приходилось переписывать. Большие же программы даже в то время состояли из многих тысяч строк кода. Программисты встречались так же редко, как зубы у курицы, и ценились на вес золота. Поэтому, чтобы компьютеры были коммерчески выгодными, следовало найти средство, позволяющее сохранить инвестиции в дефицитное время программистов. При разработке универсального языка, независимого от аппаратной платформы, основное внимание было уделено тому, чтобы программист мог записывать код более естественным образом, в терминах, соответствующих решаемой задаче, а не на уровне памяти, регистров и флагов.
Разумеется, существует множество различных классов задач, требующих программирования, поэтому с тех пор было разработано большое количество языков программирования[118]. Одними из первых языков были Fortran (FORmula TRANslator) и COBOL (Common Business Oriented Language) в начале 50-х. Первый из указанных языков имел синтаксис, ориентированный на решение научных и инженерных задач, а второй — на решение бизнес-приложений. Несмотря на более чем 40-летний возраст этих языков, многие приложения до сих пор пишутся на них — сказывается инерция многих миллионов строк кода. Другими популярными языками были Algol (ALGOrithmic Language), BASIC, Pascal, Modula, Ada, C, C++ и Java — последние три языка относятся к одному семейству.
Хотя, с точки зрения программиста, написание программ на языке высокого уровня может быть легче и продуктивнее, процесс трансляции с языка высокого уровня в конечный машинный код представляет собой гораздо более сложную задачу по сравнению с процессом ассемблирования, описанным в главе 8. Пакет предназначенных для этого программ называется
Сложность компиляторов и их стоимость были приемлемыми при разработке программ для относительно мощных и чрезвычайно дорогих универсальных ЭВМ (мэйнфреймов) того времени. Однако в области микропроцессорных устройств языки высокого уровня практически не использовались вплоть до середины 80-х годов, т. е. до появления достаточно мощных и сравнительно недорогих персональных компьютеров и рабочих станций, на которых могли запускаться компиляторы. Повсеместное распространение таких компьютеров в сочетании с постоянно увеличивающейся вычислительной мощностью микроконтроллерных и микропроцессорных устройств, а также экономической значимостью этого сектора рынка привело к тому, что большинство программ для данных устройств тоже стали писаться на языке высокого уровня.
Если вы собираетесь описать задачу на языке высокого уровня для встраиваемой микроконтроллерной системы, например контроллера стиральной машины, то этот процесс условно можно разбить на следующие этапы: