| |
| 1ab |
Load |
| 2ab |
Store |
| 3ab |
Add |
| 4ab |
Subtract |
| 500 |
Input |
| 600 |
Output |
| 700 |
Halt |
| 800 |
Skip If Negative |
| 801 |
Skip If Zero |
| 802 |
Skip If Positive |
| 9ab |
Jump |
Pas op: de Little Man vindt 0 een positief getal, dus de instructie 802 is eigenlijk Skip if Non-negative.
Opdrachten
- Maak een programma dat twee inputs deelt.
Delen gaat door herhaaldelijk aftrekken.
Probeer het eerst duidelijk te krijgen hoe je dit doet,
vóór je het als LMC programma probeert op te schrijven!
- RGB-ZW conversie
Kleuren van een pixel op een kleurenbeeldscherm worden vaak
voorgesteld met drie waarden (r,g,b) die de rood-, groen- en
blauwwaarde geven.
Grijstinten op een zwartwit display worden voorgesteld door
maar één grijswaarde.
Maak een programma dat drie inputs optelt en door drie deelt,
en zo rgb-waarden omzet naar grijstinten.
- (Extra)
De LMC heeft een erg beperke instructieset. Wat erg onhandig is
dat het alleen directe (of absolute) adressering biedt, en geen
indirecte adressering.
Doel van deze opdracht is daar een manier omheen te verzinnen.
(Directe adressering gaat met de instructie LOAD ab om de waarde
van cel ab op te halen. Indirect adressering zou gaan met een
instructie INDIRECT_LOAD ab waarmee je de waarde
van de cel waarvan het adres in cel ab staat ophaalt.)
Probeer een programma te maken waarmee je waarden van geheugencellen
90 t/m 99 optelt. De voor de hand liggende manier is een programma
met 10 optellingen. Deze aanpak wordt echter erg onhandig als je een
programma zou willen maken om de waarden van de
geheugencellen 80 t/m 99 optelt: het programma zou twee keer zo lang
worden.
Door een programma te maken dat zichzelf wijzigt - dwz. het
programma overschrijft geheugencellen waar de programmacode instaat -
kun je een programma maken dat de geheugencellen 90 t/m 99 optelt,
wat eenvoudig te wijzigen is in een programma dat
een andere reeks van geheugencellen optelt, bijv. 80 t/m 99,
zonder dat de lengte van het programma verandert.
Probeer zo'n programma te maken.
(Dit soort programmacode wordt self-modifying code genoemd.)
|