Little Man Computer
Little Man Computer ehk Väikese mehe arvuti on lihtsustatud näide arvutiarhidektuurist, mis loodi Stuart Madnicki poolt 1965 aastal.
LMC sisaldab mälu, protsessorit, sisend väljundit ning kasutab lihtsat instruktsioonide nimekirja, mille abil on sellele võimalik kirjutada lihtsaid programme. Näiteks arvude liitmiseks ja lahutamiseks, korrutamiseks, sorteerimiseks jne.
Tehniliselt on LMC keele näol tegemist ASMi õppimise metakeelega, mis seda lihtsustanud, mäluaadresside asemel postkastinumbrid ja võib liialdusteta öelda kogu meie arvutimaailm püsib neil kümnekonnal baaskäsul. Ka meie igapäevaslet kasutatavates arvutites töötavad kõrgkeeled lammutavad oma tehted omakorda sadadeks blokkideks, mis koosnevad sellistest lihtsatest käskude jadadest
Kujutage endale ette tuba. Selle ühes seinas on 100 postkasti (mälu), mis on kõik varustatud numbriga nullist kuni 99-ni. Iga neist postkastidest võib sisaldada käsklust (instruktsiooni) või siis suvalist numbrit (vahemikus 000-999). Lisaks on nende kõrval veel kaks postkasti nimedega „sisend” ja „väljund”. Keset ruumi on kirjutuslaud, millel asub taskuarvuti, millega saab liita ja lahutada ning numbriloendur, millel olevat numbrit saab järjest (näiteks nupuvajutuse abil) suurendada. Lihtsustatult näeb avanev pilt välja järgnev:
Kõige olulisemaks komponendiks on seal toas väike mehike või kratt, kelle ülesanded on järgnevad:
1. Vaata mis numbrit loendur näitab ja jäta see meelde (Programmi alguses on selleks 0) 2. Ava postkast, millel on loenduriga sama number 3. Loe postkastis olevalt paberilt käsk (ehk instruktsioon) ning jäta see meelde. 4. Vajuta loenduril olevat nuppu, mis suurendab seal olevat arvu ühe võrra. 5. Täida postkastist loetud instruktsioon 6. Mine tagasi punkti 1.
See tsükkel kordub niikaua, kuni järgmine postkast sisaldab instruktsiooni. Kui seal pole midagi või see sisaldab ainult numbrit lõpetab väike mees enda töö ja ühtlasi lõpeb ka programm.
Instruktsiooni, mille väike mehike postkasist nr 0 sai, nimetatakse opkoodiks. See kujutab endast käsklust, mis on moodustatud spetsiifilisest käsust ning mõnest teisest postkasti numbrist.
Käke või instruktsioone, millest väike mees arusaab on kokku 11 ja need on järgnevad:
Käsk Näide ja selgitus ADD - ADD 23, Liida postkastis number 23 olevale numbrile kalkulaatoris olev number SUB - SUB 23, Lahuta postkastis number 23 olevast numbrist kalkulaatoris olev number STA - STA 23, Salvesta taskuarvutiga arvutamisel saadud tulemus postkasti 23 LFA - LDA 23, Loe postkastis 23 olev arv ning sisesta see kalkulaatorisse BRA - BRA 10, Muuda loenduril olev number ümber number 10neks BRZ - BRZ 15, Kui kalkulaatoris olev aktiivne number on 000, seadista loenduri numbriks 15. Ehk siis lihtne IF võrdustehe BRP - BRP 15, Kui kalkulaatoris olev aktiivne number on 0 või nullist suurem seadista loenduri numbriks 15. INP - Loe sisendis olev number ja sisesta see kalkulaatorisse OUT - Kirjuta kalkulaatoris olev number väljundisse HLT/COB Lõpeta töötamine/lõpeta programm DAT - Loe järgmise postkasti sisu
Tasub tähele panna, et kalkulaator kujutab endast ka nö protsessori ühekohalist registrit. Kohta, kus saab hoida jooksvalt arve. Kokku on LMC-l neli registrit. Ehk sisend, väljund, loendur ja kalkulaator.
Kirjutame väikesele mehikesele programmi mis liidab kaks numbrit
INP - Kirjuta sisendis olev esimene arv kalkulaatorisse STA 06 - Salvesta kalkulaatoris olev arv postkasti NR6 INP - Kirjuta sisendist teine number kalkulaatorisse ADD 06 - Liida kalkulaatoris olevale numbrile postkastis NR6 olev number OUT - Kirjuta kalkulaatoris olev number üles ja pane see väljundisse
Kokku võtab see programm ruumi kuus postkasti. Neist esimesed viis sisaldavad opkoode ning kuuendat kasutame ajutiseks sisendist saadud numbri hoiustamiseks. Väike mees peab aga selle täitmiseks läbima ülal toodud kuue punktilise tsükli viis korda.
Läheme nüüd natuke kerulisemaks. Arvutid tegelikult ei saa sellistest lühenditest koosnevatest käskudest aru ning järelikult ei peaks sellest arusaama ka meie väike mees. Ehk muudame oma instruktsioonid päris arvutile sarnasemaks
3 | 25 / \ / \ instruction | mailbox address
1xx Add mailbox xx to accumulator 2xx Subtract mailbox xx from accumulator 3xx Store accumulator to mailbox xx 5xx Load from mailbox xx and overwrite accumulator 6xx Set program counter to xx 7xx Set program counter to xx if accumulator is zero 8xx Set program counter to xx if accumulator is positive 901 Read from input (blocking) to accumulator 902 Copy value from accumulator to output 000 Halt the program
the following is an example of a program which finds the positive difference between two numbers:
00 IN 500 read 1st val into calc. 01 STA 11 211 put copy in mem loc 11 02 IN 500 read 2nd val into calc. 03 STA 12 212 put copy in mem loc 12 04 SUB 11 411 sub val in mem loc 11 from calc 05 SKN 800 if result is neg skip next inst. 06 JMP 09 090 else res was pos; goto 09 07 LDA 11 111 read 1st val into calc. 08 SUB 12 412 sub val in mem loc 12 from calc 09 OUT 600 print result 10 TB 700 STOP - teabreak time! 11 DAT 00 000 data storage location 12 DAT 00 000 data storage location
Lingid
https://en.wikipedia.org/wiki/Little_man_computer
https://community.computingatschool.org.uk/resources/2316/single