Машинное ассемблирование и программа-ассемблер

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

Простым примером подобного использования ЭВМ является работа восьмеричного или шестнадцатиричного монитора. Очевидно, что программы на машинном языке проще писать, если воспользоваться восьмеричной или шестнадцатиричной системой счисления вместо двоичной. При этом соответственно втрое или вчетверо уменьшается объем вводимых данных и существенно сокращается количество ошибок. Получаемые в результате ассемблирования программы становятся более короткими и простыми с точки зрения контроля. Но как заставить ЭВМ воспринимать информацию в восьмеричной или шестнадцатиричной системе счисления? Это можно сделать, написав для ЭВМ программу, которая преобразует восьмеричные и шестнадцатиричные числа в двоичные. Эта задача проста; можно написать программу самим (иа машинном языке) или использовать готовую программу, поставляемую изготовителем. Написав программу преобразования 1 раз, можно использовать ее для упрощения составления других программ. Фактически большинство изготовителей ЭВМ поставляют простой восьмеричный или шестнадцатиричный монитор (обычно размещаемый в ПЗУ), который избавляет пользователя от необходимости вводить информацию в двоичном виде.

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

Электронно-вычислительная мащниа: никогда, не выбере? неверный код команда, не перепутает числа и не ошибется ар» преобразовании адреса или данных в двои ч ную форм у. Она не забудет, сколько дополнительных слов адреса или данных требуется задать в команде или в каком формате этот адрес нда даннме.должны быть представлены. Как будет показало далее, ассемблер может обладать также и другими полезными. свойствами*. Ассемблер — это программа, воспринимающая исходный текст на языке ассемблера в качестве входных данных и выдающая на выходе программу в объектном коде на машинном языке.

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

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

Главная (основная) проблема при составлении программ состоит в том, что язык ассемблера более тесно связан со структурой ЭВМ, чем с особенностями инженерных задач. Программируя на языке ассемблера, программист затрачивает больше времени на манипулирование регистрами и продумывание порядка выполнения команд, чем решение этой задачи. Программист должен хорошо знать систему команд, архитектуру и методы адресации ЭВМ. Чтобы написать простую программу, подобную той, которая показана на рис. 4.2, необходимо знать Intel 8080. Таким образом, программирование на языке ассемблера требует много дополнительных усилий, которые непосредственно не направлены на решение поставленной при проектировании задачи.

Система команд ЭВМ отражает недостатки технологии ее изготовления. Изготовитель создает систему команд, которая может быть легко.и недорого реализована аппаратными средствами. Таким образом, пользователь редко находит отдельную команду, которая будет выполнять содержательную операцию. Даже такие простые операции, как суммирование чисел, сравнение или поиск символов, реализуются последовательностями команд. Поэтому программирование на язьгаге ассемблера требует много времени. Большое число команд увеличивает возможность появления ошибок и затрудняет документирование программ. Производительность программиста* пишущего на языке ассемблера, низка, а полученные, в конце концов, программы имеют мало общего с инженерным описанием системы.