Сборщик данных Norsk - Norsk Data Assembler

Сборщик данных Norsk
Разработчики)Norsk Data
ПлатформаНОРД-1, НОРД-10, НД-100
ТипМакроассемблер
ЛицензияКоммерческий проприетарное программное обеспечение

MAC был Макроассемблер для компьютеров НОРД-1, НОРД-10, и НД-100 строки из Norsk Data.

Ограничения

У ассемблера было несколько загвоздок, которые сегодня можно было бы считать экзотическими или странными.

Длина идентификатора

Как и многие ассемблеры, 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). Вскоре кто-то, имея байты в некоторых других регистрах, создал новую функцию для вывода из этих регистров. Это оставило программисту целый ряд функций вывода, выполняющих почти одно и то же. В последние дни СИНТРАН тогда проблема заключалась в том, чтобы найти доступные коды для этих системных вызовов, поскольку все 256 из них уже были заняты несколькими такими почти идентичными функциями. Таким образом, расширенные вызовы многофункционального монитора вошли в сцену, где один вызов монитора мог выполнять ряд функций с кодом функции, указанным в регистре, определяющем, какая из его подпрограмм будет выполняться.