Handleiding MIEP

advertisement
pag. 1 (van 14)
werking van de processor MIEP
leren over de processor, met de processor
Meta-Instructionele Educatieve Processor
software: MIEP © A.B.H.Bos, nov.2002
1. inleiding
In deze syllabus willen we je kennis laten maken met de werking van een processor. Dit doen
we door middel van een programma dat de werking van de processor nabootst: dit heet een
simulatie. Daarvoor nemen we een kunstmatige (virtuele) processor, die we MIEP noemen.
wat te doen?
Jullie gaan doen, wat in de begintijd van de computers voor computergebruikers heel gewoon
was: rechtstreeks in het geheugen van de computer kijken en werken. De programmeertaal die
je hiervoor gebruikt, is in eerste instantie gemaakt om je te laten inzien, hoe de processen in
een computer in principe verlopen. Deze taal is een sterk vereenvoudigde afgeleide van talen
die ook nu nog door een handvol specialisten gebruikt worden om processoren in computers
te laten werken. Het merendeel van de miljarden computergebruikers heeft geen weet van
deze processen. Jullie krijgen hier de kans om een kijkje te nemen in het hart van de
computer.
waar maak je mee kennis?
je raakt o.a. vertrouwd met de volgende zaken: processor, instructie, programma, geheugen,
geheugenadres en instructie.
Door zelf te programmeren, en de werking van de processor van dichtbij te volgen, leer je dat
de werking van de computer gebaseerd is op 3 stappen: de instructiecyclus. Deze cyclus wordt
eindeloos herhaald.
Ook ga je beter begrijpen wat het verschil is tussen een lagere en een hogere
programmeertaal.
hoe begin je?
Om de kennismaking met het programma MIEP te laten slagen, vragen we je om eerst
hoofdstukken 2 en 3 te lezen over de processor en instructies (samen 2 pagina’s).
Daarna kun je met de processor MIEP gaan werken in hoofdstuk 4, en zul je de termen die
daarbij gebruikt worden beter begrijpen.
Alvast veel succes gewenst!
SyllabusMIEP © F.W. de Bruijn, A.B.H.Bos, nov.2003
pag. 2 (van 14)
2. de processor
wat is een processor?
De processor zit op het moederbord, en is de grootste, duurste, intelligentste en snelste chip
van de computer. Hij is ook de belangrijkste, want alle processen binnen in de computer
worden gestart vanuit de Centrale Processor. Ondanks het feit dat in een moderne computer
ook andere hulpprocessoren te vinden zijn, zullen we de centrale processor voor het gemak
“de processor” noemen.
De processor staat in verbinding met het interne geheugen. In dit geheugen liggen de
instructies en de data (gegevens) opgeslagen waar de computer op dat moment mee werkt.
Deze instructies worden van de harde schijf naar het interne geheugen gecopieerd, en blijven
daar tijdelijk bewaard totdat ze niet meer nodig zijn.
Processor en intern geheugen werken intensief samen.
Alle andere onderdelen van de computer zoals de harde schijf, grafische kaarten enz. zijn
slechts een soort buitenwereld: de randapparatuur. De processor staat in contact met het
interne geheugen én met de randapparatuur, via de “bus”: een stel parallelle draden op het
moederbord.
wat doet de processor?
De processor kan vooral snel berekeningen uitvoeren. Ook is de processor de enige die
gegevens van de randapparatuur over kan brengen naar het interne geheugen en omgekeerd.
Dus al het verkeer binnen de computer gaat via de processor, en wordt aangestuurd dóór de
processor.
hoe weet de processor wat hij moet doen?
De processor kan lezen wat er in het interne geheugen staat. Nu staan er behalve data
(getallen) ook instructies in het interne geheugen.
Zowel data als instructies worden bewaard in binaire vorm (nullen en enen). Voor het werken
met de processor MIEP, maken we deze vorm iets gemakkelijker: met deze simulatie kun je
instructies selecteren in de Nederlandse taal, en deze instructies krijgen een decimale code.
Ook de data staan in de vorm van een gewoon decimaal getal.
Op zeker moment, nadat de computer is opgestart, krijgt de processor de opdracht om zijn
eerste instructie uit het interne geheugen op te halen.
 deze instructie wordt door de processor “gelezen” én geïnterpreteerd: d.w.z. de
processor “snapt” wat voor soort opdracht dit is, en wat hij daarmee moet gaan doen.
 de processor zorgt er vervolgens voor dat de instructie gedaan of “uitgevoerd” wordt.
 tijdens het lezen van de eerste instructie heeft de processor alweer het nieuwe
geheugenadres (plaats in het interne geheugen) berekend, waar straks de volgende
instructie gevonden kan worden.
Daarna deze volgende instructie lezen, enzovoort. De processor gaat eeuwig door met deze 3
stappen, en wordt van de ene plek in het interne geheugen naar de andere plek gestuurd. Maar
de processor houdt controle over het geheel.
De drie stappen samen heten de “instructiecyclus”.
welke onderdelen heeft de processor?
Op de processor zit de Control Unit die de instructies interpreteert (begrijpt wat te doen).
Ook beschikt de processor over een eigen geheugen, de zgn. registers waar de processor
tijdelijk getallen kan opslaan.
SyllabusMIEP © F.W. de Bruijn, A.B.H.Bos, nov.2003
pag. 3 (van 14)
Tevens kan de processor optellingen en vermenigvuldigingen uitvoeren met de getallen in die
registers: dit gebeurt in de rekeneenheid of ALU (= Arithmetic Logic Unit) , die op de
processor zit. Als laatste ontvangt/zendt de processor alle gegevens via de “bus” van/naar het
interne geheugen en de randapparatuur (bus = stel parallelle draden, met één bit per draad).
3. instructies en data
wat zijn instructies?
De processor heeft op zeker moment een instructie “gelezen” op een plaats ergens in het
interne geheugen. Voordat er gekeken wordt om wat voor soort opdracht het gaat, wordt de
instructie eerst in de processor zelf opgeslagen.
Op de processor zijn daarvoor zijn 3 aparte plaatsen gereserveerd:



het opdrachtregister
waar de opdracht bewaard wordt, die op dát moment uitgevoerd gaat worden
een rekenregister
waar een getal opgeslagen wordt, waarop de instructie een bepaalde bewerking moet
uitvoeren (bijv. een optelling): dit getal noemen we de “operand”
de opdrachtwijzer
het geheugenadres waar de processor zijn volgende instructie kan vinden
In de simulatie van de processor MIEP gebruiken we iets eenvoudiger namen:
het rekenregister heet “accu” en de opdrachtwijzer heet “volgende job”.
Het opdrachtregister zelf is niet te zien, immers: de opdracht wordt zo snel uitgevoerd, dat je
direct de volgende opdracht te zien krijgt.
wat is een operand?
Stel dat er twee soorten instructies zijn: HAAL_VAN en BRENG_NAAR, en er zijn adressen
waar iets naar toe kan, bijv. Vlier-1 en Vlier-3,
dan noemen we de opdracht “BRENG_NAAR Vlier-3” een instructie.
De instructie bevat een “operatie” en een “operand”:
de operatie is BRENG_NAAR, en de operand is Vlier-3
ander voorbeeld:
in de instructie “TEL_OP 5”, is TEL_OP de operatie, en is 5 de operand.


de “operatie” vertelt wat voor soort opdracht er uitgevoerd moet worden (TEL_OP)
de “operand” is de waarde waarmee de instructie uitgevoerd moet worden (getal 5)
De operand is soms een gewoon getal (5) en soms een adres (Vlier-1).
Er zijn ook instructies die meer dan één operand nodig hebben. Maar dit soort instructies
zullen wij hier voor het gemak niet gebruiken.
Ook zijn er instructies die geen operand nodig hebben, zoals de instructie: “stoppen”.
het interne geheugen
In het interne geheugen staan heel veel instructies. Maar er zijn ook plekken in het interne
geheugen waar alleen maar gewone getallen staan, deze noemen we “data”. Bijvoorbeeld
getallen voor het coderen van een plaatje. Instructies en data kunnen op verschillende plekken
in het interne geheugen staan.
Bij de processor MIEP plaatsen we voor het gemak de instructies aan het begin van het
interne geheugen, en de data daarachter.
SyllabusMIEP © F.W. de Bruijn, A.B.H.Bos, nov.2003
pag. 4 (van 14)
4. de processor MIEP
een kijkje in het geheugen
Instructies, data, adressen, operanden worden allemaal weergegeven door getallen. Deze
getallen zelf bestaan weer uit nullen (0) en enen (1). Als je zomaar een kijkje neemt in het
interne geheugen, zie je een grote wirwar van binaire getallen: je weet zo niet gauw waar je
aan toe bent.
De simulatie van de processor MIEP biedt je een goede gelegenheid om eens binnen in de
computer te kijken, want de interface voor het werken met MIEP is heel gebruiksvriendelijk.
Bij het werken met MIEP gebruiken we gewone decimale getallen, en instructies met
herkenbare namen, zoals “copieer” of “verdubbel”, en decimale geheugenadressen (00 tot
99). En je ziet geheugenvakjes met decimale getallen erin, waarvan je de betekenis hieronder
gemakkelijk leert kennen.
 start miep.exe
Eerst kom je in het tabblad Programma.
Links zie je dat er in het programma nog geen enkele actie staat.
En rechts zie dat het Intern Geheugen (00 t/m 99) nog leeg is, en alleen maar nullen bevat.
4.1 ons eerste programma
 klik in de middelste kolom Instructieset op instructie-1: 1 Maak getal ### in A
Links onder(midden) in het veld Opcode zie je 1 ingevuld (van operatie of instructie 1).
Ook zie je dat het veld Operand rechtsonder geselecteerd is.
 vul bij Operand in het getal: 6 , en klik daarna op Invoeren (of geef Enter)
Je ziet nu links bij Programma dat programmastap 1 gevuld is met: Maak getal 6 in A
Ook zie je dat de volgende programmastap op 2 komt te staan.
We zullen een opdracht voortaan “job” noemen. De volgende opdracht is dus job 2.
In het intern geheugen zie je de in de geheugenplaatsen 00 en 01, de volgende getallen staan:
1
6
dit betekent: instructie 1, operand 6 ofwel: Maak getal 6 in A.
Een instructie, zoals [ 1, 6 ] , noemen we “machinetaal”: instructies in de vorm van
getallen, in werkelijkheid binaire getallen, dus [ 0001 , 0110 ]
In de begintijd schreven programmeurs programma’s ook echt in de vorm van binaire
of hexadecimale codes: onleesbaar en moeilijk te controleren (1-e generatietaal)
Dezelfde instructie: “ Maak getal 6 in A “ is geschreven in een soort Assembleertaal
(2-e generatietaal). Dit is een taal die beter leesbaar is dan binaire of hexadecimale
code, maar toch onoverzichtelijk blijft omdat de instructies maar heel kleine stapjes
maken. Assembleertaal wordt volop gebruikt door specialisten die programma’s
schrijven voor technische toepassingen.
Een geheugenplaats zullen we voor het gemak een “hok” noemen. Hierboven zie je dus de
inhoud van de hokken 00 en 01 (decimaal).
SyllabusMIEP © F.W. de Bruijn, A.B.H.Bos, nov.2003
pag. 5 (van 14)
 klik op het tweede tabblad Uitvoeren
Je ziet rechtsboven de accu A, het enige zichtbare register van de processor MIEP.
Ons programma bestaat maar uit één job: de accu A moet gevuld gaan worden met het getal 6.
We gaan het programma nu runnen.
In het kader RUN staat de optie Stap voor stap : deze staat al ingevuld.
 ga met de cursor over de pijl in het midden: deze wordt GROEN, en klik hierop
Na uitvoeren van de eerste job zie je in de accu A de waarde 6 staan.
Ons programma heeft dus een getal in een register van de processor geplaatst.
 ga terug naar het tabblad Programma, en klik eerst op Clr Prm (clear program)
Hierna doe je een paar oefenopdrachten:
 klus 1
maak het getal 33 in A
 klus 2
maak het getal 60 in A
? vraag
waar blijft het getal 33 bij het uitvoeren van klus 2?
4.2 programma dat getal in intern geheugen zet
De processor kan getallen opslaan en tevoorschijn halen uit het Intern Geheugen.
Dit geheugen bestaat uit een verzameling “hokken”, waarbij in elk hok een geheel getal
wordt opgeslagen.
De processor kan ieder hok afzonderlijk “aanspreken”:
opslaan in geheugen
tevoorschijn halen
instructie 2: Copieer A in hok ##
instructie 3: Copieer hok ## in A
De processor heeft daarbij zelf een accu A, die wordt gebruikt om een getal uit het geheugen
tijdelijk in op te slaan.
Het rechtstreeks toegankelijke geheugentype heet RAM (Random Access Memory).
Een hokje waarin een getal van 0 t/m 255 kan worden opgeborgen, heet een “byte”.
De bruikbaarheid van een computer hangt sterk samen met de grootte van het RAM.
De grootte wordt meestal uitgedrukt in kilobytes of in megabytes:
1 Kilobyte = 1 kB = 1024 bytes
1 Megabyte = 1 MB = 1024 * 1024 bytes = 1.048.576 byte
De processor MIEP beschikt over een intern geheugen van slechts 100 hokken.
In elk hok komt een getal te staan van ten hoogste 255, overeenkomend met een binaire
waarde, vanaf 00000000 tot en met 11111111, ofwel 1 byte.
Het intern geheugen is in deze simulatie dus 100 byte groot, dus minder dan 0,1 kB !
Met instructie 2: Copieer A in hok ## , kan een getal vanuit de accu A in het geheugen
worden gecopieerd. Wanneer in hok 50 het getal 111 moet komen, gaat dat in twee stappen:
eerst wordt het getal 111 in A geplaatst
vervolgens wordt het gecopieerd in hok 50
 ga naar het tabblad Programma, en klik op Clr Pgm (clear program)
 voer job 1 in: Maak getal 111 in A
SyllabusMIEP © F.W. de Bruijn, A.B.H.Bos, nov.2003
pag. 6 (van 14)
In het programma wordt nu job-2 aangewezen, nu nog: Geen actie.
 klik bij instructieset op instructie-2: Copieer A in hok ##
 vul voor de Operand in: 50
Je hebt nu ingevoerd job-2: “Copieer A in hok 50”.
Het effect van dit kleine programma zal zijn dat het getal 111 via A in hok 50 van het Intern
Geheugen wordt gecopieerd.
Kortom: we hebben een programmaatje geschreven dat een getal op een bepaalde plaats van
het Intern Geheugen neer kan zetten. Eens kijken of het programma werkt ……….
4.3 programma runnen
We gaan verder met het laatste programma.
 klik op het tabblad Uitvoeren
Je ziet in het tabblad Uitvoeren dat in het Intern Geheugen de hokken 00, 01, 02 en 03
gevuld zijn met twee jobs. Elke job beslaat twee hokjes (geheugenplaatsen).
Je ziet (midden boven) dat Volgende job staat op (job) 1 Maak getal in A.
Ook zie je (links onder) het Nummer volgende job nog op 1 staan,
terwijl het Adres volgende job al op 2 staat.
Het programma moet nu bij job-1 gestart worden (RUN). En we laten daarbij elke volgende
job afzonderlijk uitvoeren (doen).
 kies in het window RUN de optie: Stap voor stap (deze staat al ingevuld)
 ga met de cursor over de pijl in het midden: deze wordt GROEN, en klik hierop
De groene pijl betekent “uitvoeren”.
Job-1 wordt nu uitgevoerd, en het getal 111 staat opgeslagen in de accu A.
Intussen staan Volgende job, Nummer volgende job, en Adres volgende job ook al weer
aangegeven.
 klik nogmaals op de groene “uitvoerknop”
Kijk wat er in hok 50 staat.
Het programma is correct uitgevoerd: in het Intern Geheugen staat nu in hok 50 een getal.
4.4 programmageheugen, videogeheugen en werkgeheugen
Voor de 20 job’s in het Programma reserveren we 40 geheugenplaatsen: de hokken 00 tot en
met 39. Dit noemen we het programmageheugen. Elke job beslaat twee hokken.
De hokken 40 en hoger kunnen we nu naar wens vullen met getallen: hier staan de “data”.
Het datageheugen is onderverdeeld in het:

videogeheugen: hok 40 tot en met hok 49 (wissen met de knop Clr video)

werkgeheugen: hok 50 tot en met hok 99 (wissen met de knop Clr workmem)
De geheugenplaatsen van 40 tot en met 49 worden gereserveerd voor het “videogeheugen”:
daarover meer in een volgende paragraaf.
SyllabusMIEP © F.W. de Bruijn, A.B.H.Bos, nov.2003
pag. 7 (van 14)
Getallen die we nodig hebben voor berekeningen, zetten we in het “werkgeheugen” in hok 50
of hoger.
Bij een gewone computer is er geen strikte scheiding tussen programmageheugen en
datageheugen. Normaal mogen stukjes programma en data door elkaar heen staan in het
interne geheugen.
Maar bij de simulatie van MIEP maken we, voor de overzichtelijkheid, deze scheiding wél:
 ga naar het tabblad Programma en klik bovenaan op de knop Clr workmem (clear
workmemory)
Het effect is dat de getallen in hok 50 en hoger worden gewist, maar het programmageheugen
blijft staan.
 ga naar het tabblad Uitvoeren en run het hele programma opnieuw
 ga vervolgens terug naar het tabblad Programma en klik op de knop Clr pgm
Je ziet nu dat het programmageheugen, tot en met hok 39, is gewist, maar dat het getal 111 in
hok 50 blijft staan.
 klik op Clr All (deze knop wist het hele interne geheugen)
4.5 oefeningen (1)
 klus 3
Voer het volgende programma in, en run het programma Stap voor stap
job
Opcode
Operand
(instructie-nr.)
1
1
80
2
2
60
3
1
85
4
2
61
? vraag
kun je in eigen woorden omschrijven wat het programma nu gedaan heeft?
 klus 4
Schrijf een programma dat in de hokken 70 tot en met 74
de tafel van 3 schrijft: 3, 6, 9, 12, 15
Door in een geheugenplaats een 0 (nul) neer te zetten, kun je ook een deel van het geheugen
wissen.
Voor hackers: je kunt een programma zelfs een deel van datzelfde programma laten wissen.
 klus 5
Schrijf een programma (bestaande uit meer dan één job), dat in de eerste job het
getal 45 in de accu plaatst, en dat vervolgens de eerste job weer wist
Als het programma goed werkt, zie je nullen ontstaan in de hokken 00 en 01, en zie je dat in
het Programma job-1 vervangen is door Geen actie.
SyllabusMIEP © F.W. de Bruijn, A.B.H.Bos, nov.2003
pag. 8 (van 14)
4.6 rekenen
Net als iedere processor kent MIEP de volgende rekenkundige bewerkingen: optellen,
aftrekken, verdubbelen en halveren.
Het optellen kan alleen door een getal vanuit het geheugen op te tellen bij het getal dat al in de
accu staat.
We gebruiken daarvoor uit de instructieset instructie 6: Tel hok ## op bij A
voorbeeld:




in hok 50 wordt het getal 5 geplaatst
maak getal 6 in de accu
tel hok 50 op bij de accu
copieer de inhoud van de accu in hok 51
 klus 6
[gebruik hiervoor instructies 1 en 2]
[gebruik instructie 1]
[gebruik instructie 6]
voer bovenstaand programma in, door middel van de Opcode’s en de
Operanden, en run het programma Stap voor stap.
Als je dit goed gedaan hebt, is het resultaat in het programmageheugen:
1
5
2
50
1
6
6
50
2
51
en in het werkgeheugen, vanaf hok 50, staat
5
11
 klik in het tabblad Programma op de knop Clr workmem
hiermee wordt het werkgeheugen vanaf hok 50 gewist
 Run het “optelprogamma” opnieuw Stap voor stap, en kijk hoe het werkgeheugen
opnieuw wordt gevuld.
SyllabusMIEP © F.W. de Bruijn, A.B.H.Bos, nov.2003
pag. 9 (van 14)
4.7 binair rekenen
de bewerkingen verdubbelen en halveren hebben geen Operand nodig, bijvoorbeeld:


Verdubbel de accu A
Halveer de accu A
[instructie 8]
[instructie 9]
De reden dat de processor deze bijzondere handelingen kan uitvoeren is, dat de processor in
werkelijkheid binair rekent:
zo is het het dubbele van 1111 (binair) gelijk aan 11110 (binair). De processor schuift de
‘enen’ naar links en zet er een 0 achter.
Op dezelfde manier kan een even getal gehalveerd worden:
zo wordt het even getal 8 (decimaal) als volgt gehalveerd: 1000 (bin) wordt 100 (bin).
Er gaat dus een 0 af. Dit wordt het getal 4 (dec)
 klus 7a schrijf een programma (van drie instructies) dat het getal 8 in de accu maakt, en
de helft hiervan in hok 50 plaatst.
Je kunt een oneven getal, dat op een 1 eindigt, dus niet halveren. Of toch wel?
Eens kijken of we dit met MIEP kunnen testen:
 klus 7b wijzig het programma met 9 in de plaats van 8. Wat doet MIEP?
? vraag
Wat is 9 (dec) binair?
En wat doet de processor met het binaire getal 1001, om het te halveren?
4.8 oefeningen (2)
In een eerder voorbeeld hebben we het getal 6 opgeteld, door 6 als Operand in de accu te
plaatsen.
We hadden natuurlijk ook het getal 6 ergens van tevoren in het werkgeheugen kunnen klaar
zetten, om het later op te tellen bij de accu.
 klus 8
voer een programma in dat het volgende doet:
de getallen 2, 3, 4 en 5 worden in de hokken 50 tot en met 53 geplaatst.
In hok 54 moet de som komen van de vier getallen.
Met hoeveel instructies kun je dit programma schrijven?
 klus 9
zet de getallen 65, 15 en 10 in het werkgeheugen,
en bereken: 65 – 15 + 10
De processor kan alleen binair rekenen: alleen verdubbelen of halveren.
Daarnaast optellen en aftrekken.
Een vermenigvuldiging met een getal groter dan 2, dus bijvoorbeeld een vermenigvuldiging
met 3 of 5, is een speciale opdracht. Hoe zou je dat aanpakken?
 klus 10 voer een programma in dat het volgende doet:
bijvoorbeeld het getal 15 wordt in het werkgeheugen zet,
dit getal moet met 5 vermenigvuldigd worden,
het resultaat komt in hok 60 te staan
 hoe zou je een vermenigvuldiging met 2,5 aanpakken?
SyllabusMIEP © F.W. de Bruijn, A.B.H.Bos, nov.2003
pag. 10 (van 14)
4.9 transport van tekst naar videogeheugen
In onderstaand voorbeeld gaan we een woord van 3 letters invoeren in de Buffer in het
tabblad Programma. De buffer kunnen we zien als het toetsenbord waar de gebruiker
gegevens invoert.
We gaan kijken hoe een programma zorgt voor uitvoer op het beeldscherm:
In het tabblad Uitvoeren zien we een stukje “beeldscherm” bij Video.
De symbolen die in Video komen te staan, komen overeen met de codes in het
videogeheugen. Het videogeheugen bestaat uit de hokken 40 t/m 49.
Hoe maken we een programma dat gegevens van de Buffer naar het Videogeheugen brengt?
eerst enkele ASCII codes (zie ook de bijlage met ASCII-tabel):
spatie: 32, en cijfer 0: 48, 1: 49, …… 9: 57
A heeft code 65, B: 66, C: 67, …… Z: 90, …….. , a: 97, ….. z: 122
Om te lezen wat er in de buffer staat, wordt het meest linkse teken uit de Buffer gehaald met
instructie 14: “Haal byte uit buffer”
 typ in de buffer het woord: AZ
 klus 11 Klik eerst op Clr all, maak het volgende programma, en voer het Stap voor
stap uit.
1. Haal byte uit buffer
[ASCII code van eerste letter wordt in accu geplaatst]
2. Copieer A in hok 40
[ zet ASCII-code in videogeheugen]
3. Haal byte uit buffer
[ASCII code van volgende letter wordt in accu geplaatst]
4. Copieer A in hok 41
[ zet ASCII-code in videogeheugen]
Je ziet dat de ASCII-codes in de hokken 40 en 41 worden geplaatst, en direct vertaald worden
naar zichtbare symbolen in het “video-scherm”.
De ASCII-codes worden opgeslagen als gewone getallen. De processor kan er dus ook iets
nuttigs mee doen, bijvoorbeeld:
als er in een tekst naar letters A gezocht moet worden, gaat de processor kijken of er een
getal 65 in het intern geheugen te vinden is. Dit kan een letter A zijn, maar natuurlijk ook een
gewoon getal.
 klus 12 maak een programma, dat een letter uit het alfabet (B of hoger) terugrekent naar
de letter ervoor.
Dus bij invoer in de buffer van één letter, bijv. de letter L, moet de letter K in het
videoscherm te zien zijn.
SyllabusMIEP © F.W. de Bruijn, A.B.H.Bos, nov.2003
pag. 11 (van 14)
4.10 oefeningen (3)
4.10 a een getal tussen 0 en 10 als ASCII invoeren in de buffer, en na bijv. een
bewerking als ASCII uitvoeren in het videogeheugen
 zet de tekst "4+3" in de buffer.
 klus 13 maak een programma dat het volgende doet:
- zet het getal 48 in hok 50
- haalt byte uit buffer, trekt van ASCII-waarde 48 af, en zet resultaat in hok 60
- haalt byte uit buffer ( het “+” teken)
- haalt byte uit buffer, trekt van ASCII-waarde 48 af, en zet resultaat in hok 61
- zet het resultaat van 4+3 in hok 70
- tel hier 48 bij op, en zet het resultaat in hok 40 van het videogeheugen
Je ziet nu de som 7 in het video-scherm staan.
? vraag
4.10b
Welk probleem doet zich voor, als je de getallen 5 en 8 in de buffer invoert?
woorden coderen door terugschuiven in het alfabet: bijv. ALS wordt ZKR
Z wordt Y, Y wordt X, ..... , B wordt A, en A gaat weer over in Z.
Dit programma wordt te groot voor 20 instructies, daarom splitsen we het in twee
verschillende programma’s.
Omdat de A met ASCII-waarde 65 door moet schuiven naar de Z met ASCII-waarde 90 en
niet naar 64, zetten we deze twee waarden eerst in het geheugen:
 klus 14a Maak eerst het hele geheugen leeg met Clr All, en maak vervolgens een
programma dat de getallen 64 en 90 in de hokken 50 en 51 plaatst
- run het programma
- en maak alleen het programmageheugen leeg met Clr pgm
 typ in de buffer in het woord: ALS (woord van 3 letters)
Omdat elke letter in het alfabet één plaats kan terugschuiven, behalve de A, moeten we een
uitzondering maken. Als de ASCII-waarde na terugschuiven op 64 (onder A) komt, moeten
we hem vervangen door 90 (Z).
Hiervoor gebruiken we de instructies 15 (vergelijk A met hok ...) en 18 (job ... als A>hok)
 klus 14b Maak het volgende programma:
1. Haal byte uit buffer
2. Trek 1 af
[ de teruggeschoven ASCII-waarde staat in de accu ]
3. Vergelijk A met hok 50
{ daar staat het getal 64 (A) ]
4. Job 6 als A > hok
[ sla volgende job over, als accu > 64 ]
5. Copieer hok 51 in A
{ daar staat het getal 90 (Z) ]
6. Copieer A in hok 40
[ doorgeschoven letter komt in video hok 40 ]
7. t/m 18.
herhaal deze instructies voor de tweede en derde letter uit de buffer, en breng de
gecodeerde letters naar video hokken 41 en 42.
Voer in de buffer een woord in van 3 hoofdletters, en test het programma.
SyllabusMIEP © F.W. de Bruijn, A.B.H.Bos, nov.2003
pag. 12 (van 14)
4.10c
een decimaal getal invoeren, en omzetten naar een binaire waarde
Om te snappen hoe dit programma werkt nemen we bijvoorbeeld het decimale getal 13.
1310 is binair 1101, want 13 = 1*8 + 1*4 + 0*2 + 1*1
We gaan met behulp van het decimale getal 13 proberen om de cijfers 1, 1, 0 en 1 eruit te
krijgen, zonder gebruikmaking van de machten van twee (1, 2, 4, 8, ... ).
Daar is een methode voor:
MIEP berekent de “helft” van 13 als 6 (naar beneden afgerond).
Door 13 – 2*6 te berekenen houden we 1 over: dit is juist de laatste 1 van 1101. Dit klopt
want een oneven getal eindigt binair op een 1.
Het getal 6 dat je over houdt is binair 110 (dit zijn juist de overgebleven drie cijfers)
Van het overgebleven getal 6 kun je opnieuw kijken of het even of oneven is:
door de helft van 6 te nemen (is afgerond 3), en 6-2*3 te berekenen, krijg je 0:
deze 0 betekent dat 6 even is, en dit is weer het laatste cijfer 0 in 110.
Zo kun je van 3 weer de “helft” nemen , enzovoort:
helft van 1101 wordt 110
helft van 110 wordt 11
helft van 11 wordt 1
helft van 1
wordt 0
laatste bit 1
laatste bit 0
laatste bit 1
laatste bit 1
( helft van 13 is 6 met rest 1 )
( helft van 6 is 3 met rest 0 )
( helft van 3 is 1 met rest 1 )
( helft van 1 is 0 met rest 1 )
De “resten” zijn precies de bits in het getal 13: 1, 1, 0 en 1. Dus 1310 = 11012

formule: laatste bit = getal – 2*(helft van getal, naar beneden afgerond)

herhaal dit met de helft van getal , enzovoort
Dit is een oeroud en snel algoritme. Een “algoritme” is een rekenwijze. We laten MIEP
hiervoor het werk doen.
 klus 15 Maak het volgende programma, en run Stap voor stap, totdat je vier keer in hok
60 een bit hebt gevonden (noteer ze). Breek af met Esc
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Maak getal 13 in A
Copieer A in hok 50
Halveer A
Copieer A in hok 51
Verdubbel A
Copieer A in hok 52
Copieer hok 50 in A
Trek hok 52 af van A
Copieer A in hok 60
Copieer hok 51 in A
Copieer A in hok 50
Spring naar job 3
[ neem als startgetal 13 ]
[ in hok 50 komt het startgetal 13 te staan ]
{ helft naar beneden afgerond ]
[ in hok 51 komt de afgeronde helft te staan ]
[ hier komt de dubbele afgeronde helft ]
[ zet het startgetal weer in de accu ]
[ trek 2*afgeronde helft af van begingetal ]
[ hier komt het meest rechtse bit te staan ]
[ neem afgeronde helft als nieuw startgetal ]
[ herhaal de procedure voor het volgende meest rechtse bit ]
 herhaal het programma met een ander startgetal (maximaal 255) als operand in job 1:
noteer achtereenvolgens de bits in hok 60 (van rechts naar links), en controleer de
uitkomst met de regel …*128 + …*64 + ...*32 + ...*16 + ...*8 + ...*4 + ...*2 + ...*1
SyllabusMIEP © F.W. de Bruijn, A.B.H.Bos, nov.2003
pag. 13 (van 14)
4.11 extra problemen
a. algoritme voor 1+2+3+4+ .....
eeuwige lus, met afbreken (Esc) na overflow
tips:
gebruik een hok voor een oplopende waarde beginnend met 1
en gebruik een hok waar de totale som wordt bijgehouden, beginnend met 0
herhaal met Tel 1 bij A op , en met: Spring naar job ##
b. reeks van Fibonacci: 1+1=2, 1+2=3, 2+3=5, 3+5=8, ......
tip:
gebruik drie hokken, en herhaal steeds dezelfde berekening
zet in de eerste twee hokken de getallen 1 en 1
c. binair naar decimaal , met het algoritme ( (1*2 + 1)*2 + 0 )*2 + 1=13
dit berekent hetzelfde als: 1*23 + 1*22 + 0*21 +1 = 13
De bits 1101 worden in de buffer van links naar rechts uitgelezen, aan het eind
staat het getal 13 in hok 50.
de bits worden als volgt bewerkt:
1) bit uit buffer en opslaan in hok 50,
2) getal in hok 50 keer 2, volgende bit uitlezen en bij hok 50 optellen
3) stap 2 nog twee keer herhalen, totdat alle vier bits zijn uitgelezen
test het algoritme door andere series van vier bits in te voeren.
d. tellen van het aantal letters van een woord in de buffer
voer in de buffer een woord in, en laat in hok 50 de totale lengte van het woord
berekenen.
Het programma bestaat uit het herhaald uitlezen van één letter uit de buffer,
daarbij moet het programma zelf ontdekken waar en hoe het programma moet
worden beëindigd.
tips:
de eerste “lege” letter aan het einde van het woord heeft ASCII-waarde 0, dit is
iets anders dan een spatie, deze heeft ASCII-waarde 32
laat in hok 50 het aantal letters in het woord bijhouden met een “tellertje”
gebruik de instructie Job nummer ## als A=0
e. getal vermenigvuldigen met 7
voer via de buffer een getal in onder de 10, en laat in hok 50 het zevenvoud
van dit getal verschijnen.
tips:
bewaar het te vermenigvuldigen getal in hok 51, en tel in hok 50 steeds dit
zelfde getal op (7 keer herhaald).
plaats een “teller” in hok 60, beginnend met 6, trek hier bij iedere herhaling 1
af, en gebruik “Job nummer ## als A=0” , als stopcriterium.
( zie laatste blad: bijlage ASCII-tabel )
EINDE
SyllabusMIEP © F.W. de Bruijn, A.B.H.Bos, nov.2003
pag. 14 (van 14)
Bijlage: ASCII-tabel
ASCII-codes
ASCII
code
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
letter
TAB
LF
FF
CR
ESC
ASCII letter
code
32 spatie
33
!
34
"
35
#
36
$
37 %
38
&
39
'
40
(
41
)
42
*
43
+
44
,
45
46
.
47
/
48
0
49
1
50
2
51
3
52
4
53
5
54
6
55
7
56
8
57
9
58
:
59
;
60
<
61
=
62
>
63
?
ASCII letter
code
64 @
65
A
66
B
67
C
68
D
69
E
70
F
71 G
72
H
73
I
74
J
75
K
76
L
77 M
78
N
79 O
80
P
81 Q
82
R
83
S
84
T
85
U
86
V
87 W
88
X
89
Y
90
Z
91
[
92
\
93
]
94
^
95
_
ASCII letter
code
96
`
97
a
98
b
99
c
100
d
101
e
102
f
103
g
104
h
105
i
106
j
107
k
108
l
109 m
110
n
111
o
112
p
113
q
114
r
115
s
116
t
117
u
118
v
119
w
120
x
121
y
122
z
123
{
124
|
125
}
126
~
127 • DEL
SyllabusMIEP © F.W. de Bruijn, A.B.H.Bos, nov.2003
Download