Instructieset

De EL X8 was ontworpen om zo goed en zo snel mogelijk Algol-programma's te kunnen draaien. De instructieset boodt daar een aantal uitgekiende mogelijkheden voor die ook compacte code konden opleveren
  • Gebruik van het conditie-register

    Voor zover ik weet werken alle computers op de volgende wijze met het conditieregister:

    • een bewerking geeft in het conditieregister aan of het resultaat negatief, nul of positief is.
      Het is niet mogelijk om aan te geven dat een opdracht het conditieregister niet moet wijzigen
    • Via een sprongopdracht kan op de conditie gereageerd worden.

    De EL X8 boodt de mogelijkheid om bij (praktisch) alle rekenkundige opdrachten aan te geven of het conditieregister gezet moest worden en wel op het positief of op het nul zijn van het resultaat. De zgn. conditiezettende variant.

    Praktisch elke opdracht kon worden uitgerust met een conditievolgende operand waarmee de opdracht alleen uitgevoerd wordt als het conditieregister op Y of N staat.

    Omdat de EL X8 geen compare instructies kende, werden vergelijkingen uitgevoerd met de U-variant. Deze had tot gevolg dat de volledige berekening uitgevoerd werd incl. het evt. zetten van het conditieregister maar dat de laatste slag in de uitvoering, het effectief wijzigen van het register, werd overgeslagen.

    Een voorbeeld: Register A bevat een waarde. Deze moet worden vervangen door -1 als A < 0 is en +1 als A > 0 is.

    In EL-X8 code wordt dat

              A+0,P      " A > 0 ?
    Y,A=1 " ja, vervang door 1
    N,A+0,Z " nee, is A 0 ?
    N,A=-1 " ook niet: maak A dan -1

    De crux zit in de derde instructie die het conditieregister test en ook weer zet. Nb. een verwarrende eigenschap was dat de EL X8 door zijn 1-complement notatie zowel een +0 als een -0 kende. Rekenkundige bewerkingen leverden bij 0 -0 op.

    In 'normale' machinetaal wordt dit

              CMP  A,0               A <--> 0
    JZ OK jump if equal
    JL NEG jump if less
    LOAD A,1 maak A 1
    JMP OK
    NEG LOAD A,-1 maak A -1
    OK

    6 instructies in plaats van 4!
  • De EL X8 had een register die als automatische stackpointer gebruikt kon worden door een bepaalde adresseringsvorm te kiezen.
    De stackpointer ging automatisch met 1 of 2 omhoog of omlaag afhankelijk van het gebruikte register (enkel lengte of dubbel lengte) en de operatie (een push of een pop).
    Ook subroutineaanroepen en returns maakten gebruik van deze adressering om return-adressen op de stack te zetten of er weer af te halen.
  • De floating point notatie was zodanig dat gehele getallen ook correct gerepresenteerde floating point getallen waren. Ideaal voor Algol waar het type van een expressie pas tijdens uitvoering bekend was. 10/3 levert in Algol60 de real (floating point) waarde 3.33... op en 12/3 levert de integer waarde 4 op.
  • Verder kende de EL X8 een ingewikkelde adresseringsvorm bestaande uit
    • een indexing slag via een pseudo register
    • daarop werd weer indirectie toegepast
    • en op het resultaat daarvan weer indexing
    Een adresseringsvorm die gemaakt was om in 1 keer op de stack gemaakte variabelen uit omvattende blokken te kunnen adresseren en daarmee uiterst effectief voor het uitvoeren van vertaalde Algol-programma's.
    In beeld: