MAC был ассемблером макросов для компьютеров линейки NORD-1 , NORD-10 и ND-100 от Norsk Data .
Разработчики) | Norsk Data |
---|---|
Платформа | НОРД-1 , НОРД-10 , НД-100 |
Тип | Макроассемблер |
Лицензия | Коммерческое проприетарное программное обеспечение |
Ограничения
У ассемблера было несколько загвоздок, которые сегодня можно было бы посчитать экзотическими или странными.
Длина идентификатора
Как и многие ассемблеры, MAC установил ограничение на длину имен переменных, однако вместо того, чтобы просто запретить имена, превышающие максимальную длину, он сохранил только последние пять букв идентификатора , игнорируя первую часть имени. Причина сохранения последних 5 заключалась в том, чтобы такие переменные , как MY_ARRAY1 и MY_ARRAY2, были различимы. В результате внутреннее хранилище некоторых имен было очень странным и иногда трудным для понимания, поскольку имена были идентичны таким именам, как RRAY1 и RRAY2 соответственно. Такое поведение заставило некоторых программистов принять практику написания только последних пяти букв имени в своем программном коде, поскольку ассемблер все равно проигнорирует остальные. Из-за трудностей, с которыми сталкивается человеческий читатель в понимании того, что подразумевается под названием, код стало намного труднее понять. Это привело к меньшему количеству повторного использования кода в системе.
Перевод в машинный код
Еще одна особенность заключалась в том, что ассемблер работал, складывая «значения» всех символов в инструкции, чтобы сформировать настоящий машинный код. Например, чтобы скопировать содержимое регистра X в регистр A, вы должны написать:
КОПИРОВАТЬ SX DA
Внутренне ассемблер имел числовое значение для «COPY», другое значение для «SX» и третье значение для «DA». Их сложение дало настоящую машинную инструкцию. Однако, если программист ошибся и ввел (обратите внимание, что оба регистра являются "исходными" регистрами):
COPY SX SA
машина не будет делать то, что действительно было задумано программистом, и не выдаст ошибку. Вместо этого ассемблер примет программу, но она не будет преобразована в инструкцию COPY. Часть SX + SA, скорее всего, приведет либо к значению какого-то третьего регистра, либо к переполнению, так что операционная часть инструкции была изменена, изменив ее с копии на какую-то другую непреднамеренную операцию.
Стандартная библиотека вызовов
Еще одна проблема для программистов на ассемблере - это список так называемых вызовов монитора (MON). Инструкция MON эквивалентна инструкции INT в процессорах Intel . Однако, хотя изначально у них был хороший набор функций для записи в файл, чтения из файла и т. Д .; он быстро превратился в специальный набор функций. Примером является функция, изначально предназначенная для вывода 8 байтов, хранящихся в 4 регистрах (A, D, T и X). Вскоре кто-то, имея байты в других регистрах, создал новую функцию для вывода из этих регистров. Это оставило программисту целый ряд функций вывода, выполняющих почти одно и то же. В последние дни SINTRAN проблема заключалась в том, чтобы найти доступные коды для этих системных вызовов, поскольку все 256 из них уже были заняты несколькими такими почти идентичными функциями. Таким образом, расширенные вызовы многофункционального монитора вошли в сцену, где один вызов монитора мог выполнять ряд функций с кодом функции, указанным в регистре, определяющем, какая из его подпрограмм будет выполняться.