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.