Norsk Data Assembler

Norsk Data Assembler
Deweloperzy Norsk Dane
Platforma NORD-1 , NORD-10 , ND-100
Typ Asembler makr
Licencja Komercyjne oprogramowanie własnościowe

MAC był asemblerem makr dla komputerów linii NORD-1 , NORD-10 i ND-100 firmy Norsk Data .

Ograniczenia

Asembler miał kilka problemów, które dziś można by uznać za egzotyczne lub dziwne.

Długość identyfikatora

Podobnie jak wiele asemblerów, MAC nałożył ograniczenie na długość nazw zmiennych, jednak zamiast po prostu zabronić nazw większych niż maksymalna długość, zachował tylko pięć ostatnich liter identyfikatora, ignorując pierwszą część nazwy . Powodem zachowania ostatnich 5 było to, że zmienne takie jak MY_ARRAY1 i MY_ARRAY2 byłyby rozróżnialne. W rezultacie wewnętrzne przechowywanie niektórych nazw było bardzo dziwne i czasami trudne do zrozumienia, ponieważ nazwy byłyby identyczne z nazwami takimi jak odpowiednio RRAY1 i RRAY2. To zachowanie spowodowało, że niektórzy programiści przyjęli praktykę pisania tylko pięciu ostatnich liter nazwy w swoim kodzie programu , ponieważ asembler i tak zignorowałby resztę. Ze względu na trudności, jakie napotkał czytelnik w zrozumieniu znaczenia nazwy, kod stał się znacznie trudniejszy do zrozumienia. Spowodowało to mniejsze ponowne użycie kodu w systemie.

Tłumaczenie na kod maszynowy

Inną osobliwością było to, że asembler pracował na zasadzie dodawania „wartości” wszystkich symboli w instrukcji w celu utworzenia rzeczywistego kodu maszynowego. Na przykład, aby skopiować zawartość rejestru X do rejestru A, napisałbyś:

COPY SX DA

Wewnętrznie asembler miał wartość liczbową dla „KOPII”, inną wartość dla „SX” i trzecią wartość dla „DA”. Dodanie ich razem dało rzeczywistą instrukcję maszyny. Gdyby jednak programista popełnił błąd i wpisał (zauważ, że oba rejestry są rejestrami „źródłowymi”):

COPY SX SA

maszyna nie zrobiłaby tego, co naprawdę zamierzał programista, ani nie zgłosiłaby błędu. Zamiast tego asembler zaakceptowałby program, ale nie zostałby przetłumaczony na instrukcję COPY. Część SX + SA najprawdopodobniej skutkowałaby albo wartością jakiegoś trzeciego rejestru, albo przepełnieniem, tak że część operacyjna instrukcji została zmodyfikowana, zmieniając ją z kopiowania na inną niezamierzoną operację.

Standardowa biblioteka połączeń

Innym zagadnieniem dla programistów asemblera jest lista tak zwanych wywołań monitora (MON). Instrukcja MON jest odpowiednikiem instrukcji INT w procesorach Intela . Jednakże, chociaż pierwotnie miały niezły zestaw funkcji do zapisywania do pliku, odczytu z pliku itp.; szybko przekształcił się w zestaw funkcji ad hoc . Przykładem jest funkcja pierwotnie zaprojektowana do wyprowadzania 8 bajtów zapisanych w 4 rejestrach (A, D, T i X). Wkrótce ktoś, mając bajty w innych rejestrach, stworzył nową funkcję do wyjścia z tych rejestrów. To pozostawiło programiście prawdziwy las funkcji wyjściowych, z których wszystkie robią prawie to samo. W ostatnich dniach r SINTRAN problem polegał wtedy na znalezieniu dostępnych kodów dla tych wywołań systemowych, ponieważ wszystkie z 256 z nich zostały już zajęte przez kilka takich niemal identycznych funkcji. W ten sposób wywołania rozszerzonego, wielofunkcyjnego monitora wkroczyły na scenę, w której jedno wywołanie monitora mogło wykonać szereg funkcji z kodem funkcji określonym w rejestrze wskazującym, który z jego podprogramów zostanie wykonany.