Opgaven Little Man Computer

Hier [http://www.cs.ru.nl/~erikpoll/III/lmc/lmc.exe] kun je The Little Man Computer downloaden, als Windows executable. (Er is ergens op het web ook een Mac versie).

Meer informatie over deze Little Man Computer [http://www.cs.ru.nl/~erikpoll/III/lmc/]

 
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

  1. 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!

  2. 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.

  3. (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.)