Бытовая ЭВМ «Электроника БК-0010» поставляется пользователям оснащённой интерпретатором одного из языков высокого уровня - ФОКАЛ или БЕЙСИК. Эти языки служат очень хорошим инструментом для разработки различного рода программного обеспечения - игр, научно-технических расчётов, демонстрационных и обучающих программ и т.п. Однако существует область приложения, в которой эти языки использовать весьма сложно и неэффективно: создание системных программ (копировщиков файлов, новых интерпретирующих и компилирующих систем), программ с динамической графикой, текстовых редакторов, машинно-независимых программ (работающих как на БК-0010, так и на БК-0010-01). Поэтому практически одновременно с появлением БК-0010 возникла острая необходимость в средствах, покрывающих этот пробел.

АССЕМБЛЕР ДЛЯ ЭВМ «ЭЛЕКТРОНИКА БК-0010»

Встроенные средства программирования низкого уровня. Некоторые, хотя и очень слабые, возможности программирования БК-0010 на уровне машинных команд предоставлял зашитый в ПЗУ отладочный монитор Он позволял записывать и читать в ячейках памяти ЭВМ машинные команды и данные и запускать введённую программу. Этого было явно недостаточно. Работать с таким средством могли только очень опытные пользователи, хорошо владеющие программированием в машинных кодах. Вводимая и впоследствии распечатываемая программа представляла собой ряд восьмеричных цифр, что во много раз снижало эффективность труда программиста Организация ветвлений представляла одну из самых больших трудностей при разработке программы. В довершение всего, практически полностью отсутствовали средства обнаружения ошибок. Все эти проблемы привели к тому, что появилось средство, существенно облегчавшее разработку программ в машинных кодах, - семейство программ типа ОТЛАДЧИК.

Язык АССЕМБЛЕРа и его интерпретаторы. Одно из главных достоинств программы типа отладчик в том, что она перестала представлять собой последовательность малопонятных восьмеричных чисел. Для каждой машинной команды появился свой символьный код, для каждого типа операндов команды - своё условное обозначение. Появился первый язык АССЕМБЛЕРа для БК-0010.

Что такое язык АССЕМБЛЕРа и как он соотносится с другими языками программирования? Когда мы пишем программу на языке высокого уровня, мы не задумываемся о «мелочах» - работаем ли мы с целыми числами или с вещественными, готова ли ЭВМ вывести очередной символ на экран или нет. Мы просто пишем «+» или «-» или оператор WRITE. Строки исходного текста программы попадают затем на обработку специальной программе - компилятору. Компилятор вместо одной нашей исходной строчки порождает целую программу. Когда потребуется, эта программа преобразует к одинаковому виду различные числа, соединённые операцией «+». К тому же она сама будет проверять, можно ли выводить очередной символ на экран. В итоге из каждой строчки программы на языке высокого уровня получаются многие машинные команды (порождаются десятки, а то и сотни машинных команд).

После обработки строчки программы на языке АССЕМБЛЕРа специальной программой-ассемблером получается тоже машинная команда, но только одна! Каждая строчка программы языка АССЕМБЛЕРа превращается в одну машинную команду. Конечно, написать программу вычисления синусов на языке АССЕМБЛЕРа для БК-0010 очень сложно - ведь эта ЭВМ на уровне машинных команд умеет только складывать и вычитать. А вот для подсчёта контрольной суммы файла, например, АССЕМБЛЕР очень удобен.

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

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

Сегодня известно более десятка программ семейства ОТЛАДЧИК. Принцип действия всех их одинаков, они различаются предоставляемым набором услуг и количеством невыявленных ошибок. Как правило, чем больше номер, указанный в названии программы, тем эти показатели лучше. Последняя известная автору программа этой серии - ОТЛАДЧИК12

АССЕМБЛЕР МИКРО10. Другой подход к созданию программ в машинных кодах воплощают АССЕМБЛЕРЫ семейства МИКРО. Этот более традиционный подход заключается в том, что исходный текст программы на языке АССЕМБЛЕРа просто преобразуется в машинные команды программой-ассемблером, а затем получившаяся последовательность машинных команд загружается в память ЭВМ и самостоятельно выполняется, без участия какого-либо контроля со стороны АССЕМБЛЕРа. В таком варианте у нас отсутствует возможность осуществлять замедленный или пошаговый прогон программы, невозможно также в ходе отладки изменить текст программы. Какие же преимущества даёт такой подход?

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

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

Эти существенные трудности позволяет преодолеть программа-ассемблер. Правда, преодолевает их она не совсем обычным способом просто во время работы программы пользователя самого АССЕМБЛЕРа в памяти машины нет, потому-то ничто не мешает занимать программе всю память, вызывать прерывания и вообще делать всё, что угодно.

Ещё один положительный эффект от применения АССЕМБЛЕРа состоит в том, что пользователь может применять для написания программ очень богатый язык. В язык АССЕМБЛЕРа в таком случае входят не только коды для обозначений машинных команд и их операндов, но также метки, которые позволяют обозначить ячейки памяти машины именами для более удобного их использования, специальные директивы, организующие размещение в памяти текстов, чисел, таблиц; комментарии, делающие программу несравненно более понятной окружающим и даже самому автору; многие другие полезные вещи, превращающие написание программы в достаточно приятный процесс.

Известен целый ряд АССЕМБЛЕРОВ семейства МИКРО, разработанного С.В. Шмытовым и А.Н. Сомовым (Москва) Рассмотрим подробнее одну из последних программ - АССЕМБЛЕР МИКРО10.

МИКРО10 представляет собой законченную систему для создания программ в машинных кодах. Эта система содержит три основные компоненты: редактор текста, ассемблер (компилятор языка АССЕМБЛЕР) и редактор связей. В принципе это три совершенно самостоятельные программы, которые в условиях БК-0010 оказалось выгодным собрать воедино, чтобы исключить по возможности работу с магнитофоном при переходе от одной стадии разработки программы к другой.

Обычно сеанс работы с МИКРО10 начинается с того что с помощью специальной команды пользователь запускает текстовый редактор. Эта программа служит для ввода исходного текста программы в ЭВМ. Текстовый редактор МИКРО10 построен на базе широко известного текстового редактора EDASP. Поэтому исходные тексты программы доступны также для работы в редакторе EDASP. После ввода исходного текста пользователь обычно осуществляет специальной командой его компиляцию, или ассемблирование. При этом запускается другая программа системы - компилятор (ассемблер). Компилятор просматривает последовательно строку за строкой, преобразуя символьные коды пользователя в машинные команды. При этом он создаёт специальную таблицу, куда записывает все ячейки памяти, которым пользователь присвоил имена, а также имена из других программ. С одной стороны, наличие таких имён может говорить об ошибке, а с другой, возможно, вы хотели обратиться к ячейке, расположенной в программе, которую написали вчера (или только собираетесь написать). Имена ячеек, находящихся в других программах, называют неразрешёнными ссылками. Для того чтобы указать действительный адрес неразрешённой ссылки, используется третья компонента системы - редактор связей.

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

Система МИКРО10 занимает в памяти около 4,5 К байта и позволяет создавать программы, занимающие до 16,5 К байта, т.е. всю доступную в нормальном режиме память. Если объём создаваемой программы не слишком велик, всю разработку можно произвести без записи на магнитофон промежуточных результатов. То есть после ввода программы, компиляции и пробного запуска допускается снова войти в систему с так называемого адреса «теплового пуска», исправить редактором текста найденные ошибки и снова повторить компиляцию, запуск и т.д.

Нужен ли вам язык АССЕМБЛЕРа? Язык АССЕМБЛЕРа, бесспорно является очень мощным и сложным средством, поэтому его применение не случайно называют «высшим пилотажем программирования». Но, как и всё в нашем мире, он имеет свои слабые стороны и ограничения.

Во-первых, неверно широко распространённое мнение о том, что программы, написанные на языке АССЕМБЛЕРа, короче и быстрее программ, написанных на языках высокого уровня. Интерпретирующие системы дадут сто очков вперёд АССЕМБЛЕРам по компактности исходного текста. Напишите на БЕЙСИКе команду PRINT SIN(.33) - эта коротенькая программа в исходном виде занимает у вас всего несколько байт. Попробуйте же написать эквивалентную программу на языке АССЕМБЛЕРа - трудно сказать, сколько сотен строк она будет иметь. Кроме того, удачно написанные трансляторы языков высокого уровня создают программы, улучшить которые практически невозможно, так что человек, средне владеющий языком АССЕМБЛЕРа, создаст программу наверняка менее эффективную, чем транслятор.

Во-вторых, писать на языке АССЕМБЛЕРа намного дольше, чем на языках высокого уровня - ведь пользователю приходится собирать более или менее осмысленные действия из самых элементарных машинных команд.

Наконец, ввиду вышесказанного язык АССЕМБЛЕРа как ни один другой язык с готовностью предоставляет вам возможность сделать самые разнообразные ошибки, выловить которые довольно сложно.

Вот почему не следует думать, что АССЕМБЛЕР - панацея и, познакомившись с ним, вы будете уметь всё. Немногие могут сейчас доказать теорему Пифагора (не столь уж и сложную) - а ведь аксиомы геометрии помнят почти всё.

Для чего же нужен язык АССЕМБЛЕРа? Прежде всего он позволяет создавать программы, работающие быстрее, чем написанные на любом интерпретируемом языке - ФОКАЛе, БЕЙСИКе, ФОРТе и пр.

Во-вторых, для создания программ, требующих хитроумных приёмов (для повышения эффективности).

В-третьих, для написания самоизменяющихся программ, что отчасти позволяет преодолеть ограниченность набора команд.

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

Наконец, язык АССЕМБЛЕРа нужен тем, кто хочет до конца понять устройство и принципы работы своей ЭВМ, ибо в этом деле профессионализм особенно необходим, даже если он проявляется в свободное от работы время.

 

В.В. СЛОБОДЧУК

Performed by © gid, 2012-2022.