Norsk Data Assembler
Utvecklare | Norsk Data |
---|---|
Plattform | NORD-1 , NORD-10 , ND-100 |
Typ | Makrosamlare |
Licens | Kommersiell proprietär programvara |
MAC var en Macro assembler för datorer av NORD-1 , NORD-10 och ND-100- linjerna från Norsk Data .
Begränsningar
Montören hade flera problem som idag skulle anses vara exotiska eller konstiga.
Identifieringslängd
Liksom många assemblers satte MAC en gräns för längden på variabelnamn, istället för att bara förbjuda namn som var större än den maximala längden, behöll den bara de sista fem bokstäverna i en identifierare , och ignorerade den första delen av namnet. Anledningen till att behålla de 5 sista var för att variabler som MY_ARRAY1 och MY_ARRAY2 skulle kunna särskiljas. Resultatet blev att den interna lagringen av vissa namn var mycket märklig och ibland svår att förstå eftersom namnen skulle vara identiska med namn som RRAY1 respektive RRAY2. Detta beteende fick en del programmerare att anamma praxis att bara skriva de fem sista bokstäverna i ett namn i sin programkod eftersom assemblern skulle ignorera resten ändå. På grund av svårigheten för en mänsklig läsare att förstå vad som menades med namnet, blev koden mycket svårare att förstå. Detta resulterade i mindre kodåteranvändning på systemet.
Översättning till maskinkod
En annan egenhet var att montören arbetade genom att lägga ihop "värdena" för alla symboler i en instruktion för att bilda den faktiska maskinkoden. För att till exempel kopiera innehållet i X- registret till A-registret skulle du skriva:
COPY SX DA
Internt hade assemblern ett numeriskt värde för "COPY", ett annat värde för "SX" och ett tredje värde för "DA". Att lägga ihop dem gav den faktiska maskininstruktionen. Men om programmeraren gjorde ett misstag och skrev in (notera att båda registren är "källregister"):
COPY SX SA
maskinen skulle inte göra vad programmeraren verkligen avsåg, och den skulle inte heller skapa ett fel. Istället skulle assemblern acceptera programmet men det skulle inte översättas till en COPY-instruktion. SX + SA-delen skulle med största sannolikhet resultera i antingen värdet av något tredje register eller skulle svämma över så att operationsdelen av instruktionen modifierades och ändrade den från kopiering till någon annan oavsiktlig operation.
Standardsamtalsbibliotek
En annan fråga för assemblerprogrammerare i allmänhet är listan över så kallade monitoranrop (MON). MON-instruktionen är likvärdig med INT-instruktionen som finns i Intel-processorer . Men även om de ursprungligen hade en bra uppsättning funktioner för att skriva till en fil, läsa från en fil, etc.; det övergick snabbt till en ad hoc- uppsättning funktioner. Ett exempel är en funktion som ursprungligen utformats för att mata ut 8 byte lagrade i 4 av registren (A, D, T och X). Snart gjorde någon, som hade byten i några andra register, en ny funktion för att mata ut från dessa register. Detta lämnade programmeraren med en veritabel skog av utgångsfunktioner som alla gjorde nästan samma sak. Under de sista dagarna av SINTRAN var problemet då att hitta tillgängliga koder för dessa systemanrop eftersom alla 256 av dem redan hade tagits emot av flera sådana nästan identiska funktioner. Sålunda kom de utökade flerfunktionsövervakaranropen in i scenen där ett övervakningsanrop kunde utföra ett antal funktioner med en funktionskod specificerad i ett register som anger vilka av dess subrutiner som skulle exekveras.