Informaticasite van het Sondervick College te Veldhoven                 © L.J.M van Haperen (bron : R.J. van der Beek)
 

Hoofdstuk 3 Hardware

3.2. De processor MIEP

  3.2.1. Inleiding

In dit hoofdstuk gaan we preciezer bekijken hoe de processor werkt. Dat doen we door middel van een programma dat de werking van een processor nabootst, dat heet een simulatie.
We gaan werken met een kunstmatige processor, die we MIEP (dat is de afkorting van Meta-Instructionele Educatieve Processor) noemen.
Deze processor bestaat dus niet echt, maar je leert hiermee wel heel goed het principe van de werking van een processor. Je kunt het programma MIEP hier downloaden.
Als je wilt dat de processor iets gaat doen, dan moet je dat doen met behulp van instructies. En als je een aantal instructies hebt gegeven, die de computer na elkaar uit moet voeren, dan noem je dat een programma.

Wat voor soort instructies zijn dat dan?
  • De processor kan vooral snel berekeningen uitvoeren.
  • Hij kan ook getallen met elkaar vergelijken, en afhankelijk van de uitkomst bepaalde dingen wel of niet doen.
  • En de processor kan er voor zorgen dat er gegevens van het interne geheugen worden overgebracht naar de randapparatuur (harde schijf, netwerkkaart, grafische kaart, enz) en omgekeerd.
Als de processor bijvoorbeeld twee getallen moet optellen, dan staan die twee getallen waarschijnlijk ergens in het interne geheugen.
Ze staan in geheugencellen, en zo'n geheugencel wordt bij MIEP een hok genoemd.
Bij een moderne computer heb je misschien wel een intern geheugen van 512 MB, dus van 512 miljoen bytes (in de taal van MIEP zijn dat 512 miljoen hokjes). Maar MIEP gaat uit van een intern geheugen van 100 bytes, dus 100 hokjes.
Als de processor twee getallen moet optellen, dan staan die twee getallen ergens in twee geheugencellen (hokjes). En dan moet het resultaat van de optelling waarschijnlijk ook weer in een geheugencel worden geplaatst. Maar eerst wordt het tussenresultaat op de processor altijd ergens bewaard, en dat is een speciale geheugencel op de processor (dus een onderdeel van het register) die Accu wordt genoemd.
De accu (dat heeft niets met een gewone accu te maken) wordt altijd aangegeven met de letter A, en die wordt dus gebruikt om een getal tijdelijk in op te slaan.

Als de processor MIEP twee getallen (die in het interne geheugen staan) moet optellen, dan kan hij dat niet met behulp van één opdracht. Want de instructie tel twee getallen uit het interne geheugen op bestaat niet bij MIEP.
Bij de processor MIEP heb je maar 19 verschillende instructies.
Je hebt wel de opdracht zet het getal van hok ### in A en de opdracht tel hok ### bij A op
Als je die twee opdrachten na elkaar laat uitvoeren, en bij de eerste opdracht vul je voor ### het nummer van de eerste geheugencel in en bij de tweede opdracht vul je voor ### het nummer van de tweede geheugencel in, dan worden die twee getallen opgeteld.

  3.2.2. Het eerste programma invoeren.

Start het programma MIEP op (de processor heet MIEP en het programma heet ook MIEP).
Dan zie je het volgende:



  • Rechts zie je het interne geheugen: 100 hokjes, en in elk hokje past een byte, dus een getal tussen 0 en 255. In het begin is het nog leeg, het bevat alleen maar nullen.
  • Links zie je de stappen van het programma, maar in het begin is er nog niets ingevoerd, dus bij elke programmastap staat: geen actie
  • In het midden kun je kiezen uit 19 instructies, en die 19 instructies samen worden wel de instructieset genoemd.
We willen de processor de getallen 7 en 9 op laten tellen.
Dat kan niet met behulp van één opdracht, want bij de instructieset staat niet tel getal ### en ### op

Je ziet bij de instructieset wel twee optel-instructies: Tel hok ### bij A op (dat is instructie nr. 6) en Tel 1 bij A op (dat is instructie nr. 10)
Die tweede moeten we niet hebben (tel 1 bij A op), dus dan moeten we wel de eerste gebruiken (tel hok ### bij A op).
Maar dan moeten we er eerst wel voor zorgen dat het getal 7 in een hokje komt, bijvoorbeeld in hok 50.
En daarvoor kunnen we de instructie Copieer A in hok ### (dat is instructie nr. 2) gebruiken.
Maar dan moet het getal 7 eerst wel in A staan, daarom moet er nog een opdracht aan vooraf gaan, namelijk Maak getal ### in A (dat is instructie nr. 1)

We doen het dus in stappen, we beginnen met de eerste opdracht.
  • Klik eerst op Maak getal ### in A (dat is instructie nr. 1)

    Dat betekent dat er een getal (dat wordt met ### aangegeven, we moeten het nog invoeren, zie hierna) in de accu geplaatst moet worden.
  • Dan springt de cursor naar de venstertjes onder de instructieset:



    In het venstertje van Opcode staat dan 1 ingevuld. Dat betekent dat we nummer 1 van de instructieset hebben uitgekozen.
    In het venstertje van Operand vul je 7 in.

  • Klik dan op de knop met Invoeren (of druk op Enter)

    Je ziet dat links in het venster, onder Programma, nu bij programmastap 1 staat: Maak getal 7 in A
    Zo'n programmastap, of opdracht, wordt bij MIEP een job genoemd.
    En programmastap 2 is geselecteerd, dat betekent dat je nu de tweede programmastap kunt invoeren dus job 2

    Verder zie je dat in de hokjes rechts (die stellen het interne geheugen voor) ook iets is ingevuld:
    17

    Het programma wordt ook in het interne geheugen opgeslagen, en er worden per job twee hokjes gebruikt.
    In het eerste hokje staat de zogenaamde opcode, dat is het nummer uit de instructieset.
    En in het tweede hokje staat de zogenaamde operand, dat is het getal dat voor ### moet worden ingevuld bij de opdracht.

    We gaan nu naar de tweede opdracht, de tweede job.
    We gaan er voor zorgen dat het getal 7 in een hokje komt, bijvoorbeeld in hok 50.
    Daarom nu de volgende opdracht:
  • Klik op Copieer A in hok ### (dat is instructie nr. 2)

    Dat betekent dat het getal 7, dat in A staat, in een hokje met een bepaald nummer (dat wordt dan nummer 50, dat moeten we nog invoeren, zie hierna) geplaatst moet worden.
  • Dan springt de cursor naar de venstertjes onder de instructieset: In het venstertje van Opcode staat dan 2 ingevuld, we hebben immers nummer 2 van de instructieset uitgekozen.
    In het venstertje van Operand vul je 50 in.

  • Klik dan op de knop met Invoeren (of druk op Enter)

    Je ziet dat links in het venster, onder Programma, nu bij programmastap 2 staat: Copieer A in hok 50, en programmastap 3 is geselecteerd

    Verder zie je dat in de hokjes rechts ook weer iets is ingevuld:
    17250

    Deze job is ook weer in het interne geheugen opgeslagen, en er worden ook voor deze job twee hokjes gebruikt.
    In het derde hokje staat 2, dat is de opcode van deze job, dat is dus het nummer uit de instructieset.
    En in het vierde hokje staat de operand, dus 50.

    We gaan nu naar de derde opdracht, de derde job.
    We gaan er voor zorgen dat het getal 9 in A verschijnt.
    Klik op Maak getal ### in A (dat is instructie nr. 1)

  • In het venstertje van Opcode staat dan 1 ingevuld.
    In het venstertje van Operand vul je 9 in.

  • Klik dan op de knop met Invoeren (of druk op Enter)

    Je ziet dat links in het venster nu bij programmastap 3 staat: Maak getal 9 in A
    Deze job is ook weer in het interne geheugen opgeslagen, en er worden ook voor deze job twee hokjes gebruikt.
    In het vijfde hokje staat 1, dat is de opcode van deze job, dat is dus het nummer uit de instructieset.
    En in het zesde hokje staat de operand, dus 9.

    We gaan nu naar de vierde job.
    Nu zorgen we er voor dat de getallen 7 en 9 worden opgeteld:
  • Klik op Tel hok ### bij A op (dat is instructie nr. 6)

    Dat betekent dat het getal in hokje 50 (dat we nog moeten invoeren, zie hierna), dus het getal 7, bij het getal in de accu A opgeteld moet worden, en de uitkomst wordt dan ook weer in de accu geplaatst.
  • In het venstertje van Opcode staat dan 6 ingevuld, we hebben immers nummer 6 van de instructieset uitgekozen.
    In het venstertje van Operand vul je 50 in.

  • Klik dan op de knop met Invoeren

    Je ziet dat links in het venster nu bij programmastap 4 staat: Tel hok 50 bij A op, en programmastap 5 is geselecteerd

    Verder zie je dat in de hokjes rechts ook weer iets is ingevuld:
    1725019650

    We gaan nu naar de vijfde job.
    We willen het namelijk zo maken dat de uitkomst in het interne geheugen wordt gezet, bijvoorbeeld in hokje 99
  • Klik op Copieer A in hok ### (dat is instructie nr. 2)

    Dat betekent dat het getal dat in de accu A staat, in hokje 99 (dat we nog moeten invoeren, zie hierna) geplaatst moet worden.
  • In het venstertje van Opcode staat 2.
    In het venstertje van Operand vul je 99 in.

  • Klik dan op de knop met Invoeren (of druk op Enter)

    Je ziet dat links in het venster nu bij programmastap 5 staat: Copieer A in hok 99 en programmastap 6 is geselecteerd

    Verder zie je dat in de hokjes rechts ook weer iets is ingevuld:
    1725019650299

    De zesde job is de laatste opdracht.
  • Klik op de 19-de instructie van de instructieset: Stoppen

    Dat betekent natuurlijk dat dit het einde van het programma is, en dat de processor dus moet stoppen.
  • De cursor springt naar de venstertjes onder de instructieset: In het venstertje van Opcode staat 19.
    In het venstertje van Operand hoef je in dit geval niets in te vullen, klik op de knop met Invoeren

    Dan is het programma klaar, en in de volgende paragraaf gaan we kijken of het programma werkt.

    Nog even de programmastappen op een rijtje:
    1. Maak getal 7 in A
    2. Copieer A in hok 50
    3. Maak getal 9 in A
    4. Tel hok 50 bij A op
    5. Copieer A in hok 99
    6. Stoppen

  3.2.3. Het eerste programma uitvoeren.

Als je het programma uit de vorige paragraaf hebt ingevoerd, dan klik je daarna op het tabblad Uitvoeren.
Dan zie je rechts het volgende (in het linker gedeelte van het venster staan de programmastappen, die hebben we hier weggelaten):



Rechts zie je weer het interne geheugen: 100 hokjes, en in de eerste hokjes acht hokjes staan de zes instructies (jobs), twee bytes per job.
Verder zie je boven het interne geheugen een venstertje, waarin het getal staat van de accu A (een tijdelijke geheugenplaats, een onderdeel van het register).
Links daarvan zie je de job die aan de beurt is, bij de start is dat natuurlijk job 1: Maak getal 7 in A
Daar onder kun je kiezen uit Stap voor stap of Automatisch, we kiezen voor Stap voor stap, dat is de standaardkeuze.
  • Daar weer onder zie je een grote groene pijl (tenminste, als je er met de cursor overheen gaat wordt hij groen).
    Als je daar op klikt dan wordt de eerste job uitgevoerd, doe het maar!
    Dan zie je dat het getal 7 in de accu verschijnt! (het venstertje rechtsboven)
    Verder zie je dat nu job 2 aan de beurt is: Copieer A in hok 50
  • Klik weer op de grote groene pijl, dan wordt de tweede job uitgevoerd
    Dan zie je dat het getal 7 in hok 50 verschijnt, dus in het interne geheugen
    Verder zie je dat nu job 3 aan de beurt is: Maak getal 9 in A
  • Als je op de groene pijl klikt zie je dat het getal 9 in de accu verschijnt.
    En je ziet dat job 4 aan de beurt is: Tel hok 50 bij A op
  • Klik weer op de grote groene pijl, dan wordt de vierde job uitgevoerd
    Dan zie je dat het getal 16 in de accu verschijnt, en dat klopt want 7 + 9 = 16 !
    Verder zie je dat nu job 5 aan de beurt is: Copieer A in hok 99
  • Klik weer op de groene pijl, dan verschijnt het getal 16 in hok 99, dus in het interne geheugen.



  • Verder zie je dat nu job 6 aan de beurt is: Stoppen, en als dat is uitgevoerd weet MIEP dat het programma klaar is.

  3.2.4. Het programmageheugen, videogeheugen en werkgeheugen.

Je hebt in het vorige programma gezien dat het programma wordt opgeslagen in het interne geheugen.
Voor elke job worden twee hokjes gebruikt, dus twee bytes.
Er kunnen bij MIEP maximaal 20 jobs in een programma worden gezet, daarvoor zijn maximaal 40 bytes nodig.
Daarom worden de geheugenplaatsen 0 tot en met 39 voor het programma gereserveerd.
Dus het programmageheugen is hok 0 tot en met hok 39, en dat kun je wissen door op Clr pgm te klikken.

De hokken 40 en hoger kunnen we naar wens vullen met getallen, hier staan de zogenaamde "data".
Het datageheugen is onderverdeeld in twee soorten:
  • Het videogeheugen is hok 40 tot en met hok 49, en dat kun je wissen door op Clr video te klikken.
    Daarover lees je meer in de volgende paragraaf.

  • Het werkgeheugen is hok 50 tot en met hok 99, en dat kun je wissen door op Clr workmem te klikken.
    Getallen die we nodig hebben voor berekeningen zetten we in het "werkgeheugen", dus in hok 50 of hoger.

  3.2.5. Het videogeheugen gebruiken.

De processor moet er ook voor kunnen zorgen dat er iets op het scherm verschijnt. Als het alleen maar in een hok, dus in het interne geheugen geplaatst wordt, dan heb je er niets aan want dat zie je niet.
Eigenlijk is het heel simpel: er zijn bepaalde geheugencellen waarvan de inhoud automatisch op het scherm getoond wordt, het zogenaamde videogeheugen.
Er wordt meestal 50 keer per seconde gekeken welke informatie in die geheugencellen staat, en die informatie wordt naar het scherm "gespoten".
Bij MIEP bestaat het videogeheugen uit de hokjes 40 tot en met 49. En op het uitvoerscherm van MIEP staat onder de 100 hokjes van het interne geheugen een vensterje dat het beeldscherm voorstelt, er staat video boven.
Elk hokje uit het videogeheugen correspondeert met een hokje van het beeldscherm.
Dus als je wilt dat er iets in het video-venster verschijnt moet je er voor zorgen dat het in één van de hokjes 40 tot en met 49 verschijnt, dan komt het automatisch ook in het video-venster.
Maar je moet er wel om denken dat er in geheugencellen alleen maar getallen kunnen staan, en in het video-venster kunnen ook andere tekens verschijnen. Als in de geheugencel bijvoorbeeld 65 staat, dan verschijnt er in het video-venster een A, want de ASC-code van de A is 65.
Als je wilt dat in het eerste vakje van het video-venster een getal verschijnt, bijvoorbeeld 5, dan moet je er voor zorgen dat in hok 40 het getal 53 zit. Want de ASC-code van de 5 is 53.
Als je in hok 40 het getal 5 zet dan zie je niets in het video-venster, want de eerste 31 ASC-codes leveren geen zichtbare tekens.
De ASC-code van de 0 is 48, van de 1 is 49, van de 2 is 50, enz. Je moet er dus 48 bij optellen voor het juiste getal in de geheugencellen.

We gaan het uitproberen, maak het volgende programma met MIEP:

  1. Maak getal 65 in A
  2. Copieer A in hok 40
  3. Maak getal 66 in A
  4. Copieer A in hok 41
  5. Maak getal 49 in A
  6. Copieer A in hok 42
  7. Maak getal 50 in A
  8. Copieer A in hok 43
  9. Maak getal 97 in A
  10. Copieer A in hok 44
  11. Maak getal 7 in A
  12. Copieer A in hok 45
  13. Stoppen

Als je dit programma daarna stap voor stap gaat uitvoeren dan zie je het volgende:
  1. Na de eerste stap staat het getal 65 in A
  2. Na de tweede stap verschijnt het getal 65 ook in hok 40, en tegelijk verschijnt in het videovenster een A
  3. Na de derde stap staat het getal 66 in A
  4. Na de vierde stap verschijnt het getal 66 ook in hok 41, en tegelijk verschijnt in het videovenster een B
  5. Na de vijfde stap staat het getal 49 in A
  6. Na de zesde stap verschijnt het getal 49 ook in hok 42, en tegelijk verschijnt in het videovenster een 1
  7. Na de zevende stap staat het getal 50 in A
  8. Na de achtste stap verschijnt het getal 50 ook in hok 43, en tegelijk verschijnt in het videovenster een 2
  9. Na de negende stap staat het getal 97 in A
  10. Na de tiende stap verschijnt het getal 97 ook in hok 44, en tegelijk verschijnt in het videovenster een a
  11. Na de elfde stap staat het getal 7 in A
  12. Na de twaalfde stap verschijnt het getal 7 ook in hok 45, maar in het videovenster verschijnt niets.
  13. Daarna stopt het programma

  3.2.6. De toetsenbord-buffer gebruiken.

De processor moet ook kunnen reageren op dingen, die je intypt.
Als je iets intypt met behulp van het toetsenbord dan worden die toetsaanslagen eerst opgeslagen in een tijdelijk geheugen: de zogenaamde toetsenbordbuffer.
En de processor kan de inhoud van die toetsenbordbuffer daarna lezen.
Bij MIEP kan dat met behulp van instructie nummer 14: Haal byte uit buffer
Dat buffergeheugen zit bij MIEP in een venstertje onder het programma, daar staat standaard het woord Buffer in. Maar dat kun je veranderen, en je kunt de processor van MIEP laten lezen wat er in die buffer staat.
Je moet er wel om denken dat de ASC-code van het teken, dat je hebt ingetypt, wordt opgeslagen in de buffer, want daar kunnen alleen getallen in.

We gaan het uitproberen, maak het volgende programma met MIEP:

  1. Haal byte uit buffer
  2. Copieer A in hok 40
  3. Haal byte uit buffer
  4. Copieer A in hok 41
  5. Haal byte uit buffer
  6. Copieer A in hok 42
  7. Haal byte uit buffer
  8. Copieer A in hok 43

Typ in het buffergeheugen, onder het programma, het woord test in.
Ga dan het programma stap voor stap uitvoeren, dan zie je het volgende:
  • Na de eerste stap staat het getal 116 (dat is de ASC-code van de t) in A, en de letter t verdwijnt uit het buffergeheugen.
  • Na de tweede stap verschijnt het getal 116 ook in hok 40, en tegelijk verschijnt in het videovenster een t
  • Na de derde stap staat het getal 101 in A (dat is de ASC-code van de e) in A, en de letter e verdwijnt uit het buffergeheugen.
  • Na de vierde stap verschijnt het getal 101 ook in hok 41, en tegelijk verschijnt in het videovenster een e



  • Na de vijfde stap staat het getal 115 in A (dat is de ASC-code van de s) in A, en de letter s verdwijnt uit het buffergeheugen.
  • Na de zesde stap verschijnt het getal 115 ook in hok 42, en tegelijk verschijnt in het videovenster een s
  • Na de zevende stap staat het getal 116 in A (dat is de ASC-code van de t) in A, en de letter t verdwijnt uit het buffergeheugen.
  • Na de achtste stap verschijnt het getal 116 ook in hok 43, en tegelijk verschijnt in het videovenster een t

  3.2.7. Herhaling.

Het sterke punt van een computer is dat hij heel snel dingen kan herhalen.
Hoe kun je de processor dingen laten herhalen ?
Bij MIEP kan dat met behulp van instructie nummer 12: Spring naar job ##
Als je bijvoorbeeld bij job 10 invoert: Spring naar job 5, dan gaat hij na job 10 verder met job 5.
Daarna doet hij job 6, 7, 8, en 9
En als hij dan bij job 10 is gaat hij weer verder met job 5, en zo worden de jobs 5 tot en met 9 steeds herhaald.

Dat gaan we toepassen.
We gaan een programma maken dat de buffer leest, en de tekst die daar staat, codeert.
Elke letter in het alfabet schuift één plaats op, dus elke letter wordt vervangen door de volgende letter in het alfabet.

Als er in de buffer dus test staat, dan moet in het videovenster uftu verschijnen, en als er in de buffer sukkel staat, dan moet in het videovenster tvllfm verschijnen.
Steeds moet er een letter uit de buffer worden gelezen, en dan moet de eerstvolgende letter in het videovenster verschijnen.
Dit moet steeds herhaald worden, zodat we de instructie Spring naar job ## kunnen gebruiken.
Er zijn wel een paar probleempjes.
De volgende letter moet steeds in het volgende hok van het videogeheugen worden geplaatst. Dus niet steeds in hetzelfde hok, want dan verschijnen de letters ook allemaal in hetzelfde vakje van het videogeheugen, en dan zie je alleen de laatste.

Dat lossen we op door het nummer van het hok van het videogeheugen, waarin de ASC-code van de letter moet verschijnen, in hok 99 te zetten, en dat steeds met 1 op te hogen.

En dan maken we nog gebruik van een instructie, die nog niet eerder genoemd is, nummer 12: Copieer A in het hok genoemd in ##
En dan gebruiken we hier de opdracht Copieer A in het hok genoemd in 99
Als er dan 40 in hok 99 staat, wordt het getal van A in hok 40 gezet. Maar als er 41 in hok 99 staat, dan wordt het getal van A in hok 41 gezet. En als er 42 in hok 99 staat, dan wordt het getal van A in hok 42 gezet.
Als we er dus maar voor zorgen dat in hok 99 het juiste nummer staat, dan wordt de eerstvolgende letter in het juiste vakje geplaatst.

We leggen hier onder verder uit hoe het werkt, maak het volgende programma met MIEP:

  1. Maak getal 40 in A
  2. Copieer A in hok 99
    Dan staat dus het getal 40 (dat correspondeert met het eerste vakje van het videovenster) in hok 99
  3. Haal byte uit buffer
  4. Tel 1 bij A op
    De eerstvolgende letter in het alfabet moeten we hebben, dus 1 bij de ASC-code optellen
  5. Copieer A in het hok genoemd in 99
    De ASC-code van de eerste letter komt dus in 40, maar de volgende in 41, enz.
  6. Copieer hok 99 in A
    We gaan het nummer in hok 99 met 1 verhogen
  7. Tel 1 bij A op
  8. Copieer A in hok 99
    Nu staat dus het eerstvolgende videogeheugen-nummer in hok 99
  9. Spring naar job 3
    Nu worden de jobs 3 tot en met 8 steeds herhaald

Typ in het buffergeheugen, onder het programma, het woord sukkel in.
Ga dan het programma uitvoeren, klik onder Run op Automatisch

Het programma stopt niet automatisch, klik op Stap voor stap om het stop te zetten.
Ga daarna terug naar het tabblad Programma, voer een ander woord in het buffervenster in, en klik op Clr video en op Clr workmem.
Voer het programma dan nog eens automatisch uit.

Het maakt niets uit hoe lang het woord is (maar meer dan 10 letters mag niet), steeds wordt het gecodeerde woord in het videovenster getoond als je gaat runnen.

Alleen als de letter z er in voorkomt gaat het fout. Tenminste als je verwacht dat de z wordt vervangen door de a, dat gebeurt nu niet omdat de ASC-code van de z 122 is, en de ASC-code van de a is 97. Hoe je er voor kunt zorgen dat de z wel door een a wordt vervangen lees je in de volgende paragraaf.

En het programma stopt niet automatisch als de letters op zijn, je moet het zelf stoppen.
Maar je hoeft het programma maar een klein beetje te veranderen om er voor te zorgen dat het wel automatisch stopt.

Maak het volgende programma met MIEP, klik eerst op Clr All, dan wordt het vorige gewist.

  1. Maak getal 40 in A
  2. Copieer A in hok 99
  3. Haal byte uit buffer
  4. Job nummer 11 als A=0
  5. Tel 1 bij A op
  6. Copieer A in het hok genoemd in 99
  7. Copieer hok 99 in A
  8. Tel 1 bij A op
  9. Copieer A in hok 99
  10. Spring naar job 3
  11. Stoppen

We hebben nu, vergeleken met het vorige programma, twee jobs toegevoegd.
Bij nummer 4 staat: Job nummer 11 als A=0 (dat is instructie nummer 13).
En bij nummer 3 staat: Haal byte uit buffer, maar als er niets in de buffer meer staat heeft dat tot gevolg dat het getal 0 in A wordt gezet.
En de nieuwe opdracht Job nummer 11 als A=0 heeft dan tot gevolg dat het programma naar job nummer 11 springt, en daar staat: Stoppen.
Dus dan wordt er automatisch gestopt als de buffer leeg is.

  3.2.8. Voorwaardelijke sprong.

In de vorige paragraaf hebben we gebruik gemaakt van instructie nummer 13: Job nummer ## als A=0.
Die opdracht heeft tot gevolg dat, als A het getal 0 bevat, er naar job ## wordt gesprongen.
En als A niet het getal 0 bevat wordt er gewoon verder gegaan met de volgende job.
Dat noem je wel een voorwaardelijke sprong, want het hangt van de waarde van A welke job als volgende wordt gedaan.

In MIEP is er nog een aantal instructies met een voorwaardelijke sprong.
Namelijk instructie nummer 16: Job ## als A < hok, instructie nummer 17: Job ## als A = hok en instructie nummer 18: Job ## als A > hok.
Welke job na zo'n opdracht wordt uitgevoerd hangt blijkbaar af van de waarde in een bepaald hok.
Maar er staat niet bij welk hok dat is. Dat moet je in de opdracht ervoor aangeven, je moet daar instructie nummer 15 voor gebruiken: Vergelijk A met hok ##
De instructies nummer 15 en 16 horen dus bij elkaar, of nummer 15 en 17, of nummer 15 en 18

Dat gaan we toepassen: we tikken één letter in het buffervenster in, en we willen een programma maken dat de eerstvolgende letter van het alfabet in het videovenster afdrukt, of als het een z is moet er een a worden afgedrukt.
We doen het dus voor maar één letter, zelf mag je uitzoeken hoe je het programma uit de vorige paragraaf aan moet passen om er voor te zorgen dat het goed gaat voor een woord met meer letters.

Maak het volgende programma met MIEP, klik eventueel eerst op Clr All, dan wordt het vorige gewist.

  1. Maak getal 123 in A
    Dat is de ASC-code van z plus 1
  2. Copieer A in hok 50
  3. Maak getal 97 in A
    Dat is de ASC-code van a plus 1
  4. Copieer A in hok 51
  5. Haal byte uit buffer
  6. Tel 1 bij A op
    Dan heb je de ASC-code van de eerstvolgende letter
  7. Vergelijk A met hok 50
    vergelijk dus met het getal 123, dat is de ASC-code van z plus 1
  8. Job 10 als A < hok
    Als het kleiner dan 123 is (dan was het niet de z), dan afdrukken in videovenster. Dat gebeurt in job 10
  9. Copieer hok 51 in A
    Als het niet kleiner dan 123 is (dan was het de z), dan een a afdrukken in videovenster. Dan dus eerst het getal 97 (de ASC-code van de a) van hok 51 in A zetten.
  10. Copieer A in hok 40
    Hok 40 is het eerste hok van het videogeheugen, dus de letter verschijnt ook in het videovenster.
  11. Stoppen

Typ in het buffervenster, onder het programma, de letter q in.
Ga dan het programma uitvoeren, klik onder Run op Automatisch

Als het goed is wordt dan de letter r in het videovenster afgedrukt.
Ga dan weer terug naar het tabblad Programma, klik op Clr video en op Clr workmem, voer een andere letter in in het buffervenster en laat het programma automatisch lopen. Controleer ook of de z nu wordt omgezet in een a.

  3.2.9. Assembler en machinetaal.

We zijn in de vorige paragrafen bezig geweest om MIEP, de processor, te programmeren.
Je zag het programma op twee manieren:
  • Met behulp van getallen in de geheugenplaatsen 0 tot en met 39. Elke job werd met twee getallen aangegeven, de opcode en de operand (maar sommige jobs hadden geen operand nodig).
    Als je een programma op die manier opschrijft, dan noem je dat machinetaal
    Bij MIEP gebeurde dat met decimale getallen, maar in de praktijk worden daarvoor meestal hexadecimale getallen gebruikt. Hoewel bijna niemand in machinetaal programmeert.
  • Met behulp van zinnetjes. Bij MIEP werden daarbij nederlandse termen gebruikt, maar in de praktijk gebeurt dat altijd met engelse termen.
    Als je een programma op die manier opschrijft, dan noem je dat assembleertaal, en de korte engelse instructies heten mnemonics
    Elke processor heeft zijn eigen assembleertaal.
    Maar als er een nieuwere processor van hetzelfde merk komt, dan komt er niet een hele nieuwe assembleertaal uit. De oude instructies blijven hetzelfde, maar er komen nieuwe bij. De instructieset wordt meestal uitgebreid.
Een aantal mnemonics van de voorloper van de Pentium, die overeenkomen met de instructies van MIEP zijn als volgt:

MIEP-instructiemnemonicstoelichting
Maak getal ## in ALD A,nn LD is de afkorting van Load
Copieer A in hok ##LD (nn),A 
Copieer hok ## in ALD A,(nn) 
Tel hok ## bij A opADD A,(nn) 
Trek hok ## af van ASUB A,(nn)SUB is de afkorting van Subtract
Verdubbel ARLA RL is de afkorting van Roteer links
Halveer ARRA RR is de afkorting van Roteer rechts
Tel 1 bij A opADD A,1  
Trek 1 van A afSUB A,1  
Spring naar job ##JP pq JP is de afkorting van Jump
Job nummer ## als A=0JPZ pqJPZ is de afkorting van Jump if zero