Erinevus lehekülje "Little Man Computer" redaktsioonide vahel

Allikas: Kuutõrvaja
 
(ei näidata sama kasutaja 29 vahepealset redaktsiooni)
1. rida: 1. rida:
Little Man Computer ehk Väikese mehe arvuti on lihtsustatud näide arvutiarhidektuurist, mis
+
Little Man Computer ehk Väikese mehe arvuti on lihtsustatud näide arvutiarhidektuurist, mis loodi Stuart Madnicki poolt 1965 aastal.  
loodi Stuart Madnicki poolt 1965 aastal.  
+
 
 +
[[Pilt:Neumanni arhidektuur.jpg|700px]]
 +
Von Neumanni arhidektuur
  
 
LMC sisaldab mälu, protsessorit, sisend väljundit ning kasutab lihtsat instruktsioonide nimekirja, mille
 
LMC sisaldab mälu, protsessorit, sisend väljundit ning kasutab lihtsat instruktsioonide nimekirja, mille
abil on seda võimalik kirjutada lihtsaid programme.
+
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:
  
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.
+
[[Pilt:Little man computer.jpg|600px]]
  
Ahjaa lisaks sellele kõigele on toas ka olulisim komponent ehk väike mehike või kratt, kelle ülesanded on järgnevad:
+
Kõige olulisemaks komponendiks on seal toas väike mehike või kratt, kelle ülesanded on järgnevad:
  
  1. Vaadata mis number on hetkel loenduril (oletame, et hetkel 0)
+
  1. Vaata mis numbrit loendur näitab ja jäta see meelde (Programmi alguses on selleks 0)
  2. Minna vastavalt loenduri numbrile postkasti number 0 juurde ning võtta sealt välja pabersedelile kirjutatud instruktsioon.
+
  2. Ava postkast, millel on loenduriga sama number
  3. Vajutada loenduril olevat nuppu ning muuta seal olev arv üheks.
+
  3. Loe postkastis olevalt paberilt käsk (ehk instruktsioon) ning jäta see meelde.
4. Lugeda mida postkastist loetud instruktsioon ütleb. Kui seal olev käsk viitab mõnele teisele postkastile (näiteks, postkastis nr 42 olevale infole), siis jätta selle postkasti number meelde.
+
  4. Vajuta loenduril olevat nuppu, mis suurendab seal olevat arvu ühe võrra.
  5. Hankida andmed, mis defineeritud eelnevas käsus (näiteks minna postkasti 42 juurde ja võtta sealt järgmine mingit arvu sisaldav sedel)
+
  5. Täida postkastist loetud instruktsioon
  6. Täita instruktsioon, mis oli esimesel sedelil (näiteks liita postkastist 42 saadud arvule üks juurde)
+
  6. Mine tagasi punkti 1.
  7. Kirjutada saadud tulemus vastavalt instruktuktsioonile mõnda teise postkasti või jätta see endale meelde.
 
8. Vaadata mis number on loenduril ning suunduda vastavalt sellele järgmise postkasti juurde (antud juhul siis järgmise postkastini numbriga 1)
 
  
Instruktsiooni, mille väike mehike meie näites pesast nr 0 luges, nimetatakse opkoodiks. See kujutab endast käsklust, mis on moodustatud spetsiifilisest käsust ning mõnest teisest postkasti numbrist. Näiteks instruktsioon, mis salvesatab postkasti NR 23 mingit infot näev välja järgnev:
+
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.
  
STA23
+
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ärngevad:
+
Käke või instruktsioone, millest väike mees arusaab on kokku 11 ja need on järgnevad:
  
  Käsk    Kasutamise näide
+
  Käsk    Näide ja selgitus
  ADD  - ADD23, Lisa postkastis number 23 olevale numbrile taskuarvutiga arvutamisel saadud number
+
  ADD  - ADD 23, Liida postkastis number 23 olevale numbrile kalkulaatoris olev number
  SUB  - SUB23, Lahuta postkastis number 23 olevast numbrist taskuarvutiga arvutamisel saadud number
+
  SUB  - SUB 23, Lahuta postkastis number 23 olevast numbrist kalkulaatoris olev number
  STA  - STA23, Salvesta taskuarvutiga arvutamisel saadud tulemus postkasti 23
+
  STA  - STA 23, Salvesta taskuarvutiga arvutamisel saadud tulemus postkasti 23
  LFA  - LDA23, Loe postkastis 23 olev arv ning sisesta see taskuarvutisse
+
  LFA  - LDA 23, Loe postkastis 23 olev arv ning sisesta see kalkulaatorisse
  BRA  - BRA10, Muuda loenduril olev number ümber number 10neks
+
  BRA  - BRA 10, Muuda loenduril olev number ümber number 10neks
  BRZ  - BRZ15, Kui kalkulaatoris olev aktiivne number on 000, seadista loenduri numbriks 15. Ehk siis lihtne IF võrdustehe
+
  BRZ  - BRZ 15, Kui kalkulaatoris olev aktiivne number on 000, seadista loenduri numbriks 15. Ehk siis lihtne IF võrdustehe
  BRP  - BRP15, Kui kalkulaatoris olev aktiivne number on 0 või nullist suurem seadista loenduri numbriks 15.
+
  BRP  - BRP 15, Kui kalkulaatoris olev aktiivne number on 0 või nullist suurem seadista loenduri numbriks 15.
  INP  - Loe postkastis "sisend" olev number ja sisesta see taskuarvutisse
+
  INP  - Loe sisendis olev number ja sisesta see kalkulaatorisse
  OUT  - Kirjuta kalkulaatoris olev number postkasti nimega "väljund"
+
  OUT  - Kirjuta kalkulaatoris olev number väljundisse
 
  HLT/COB Lõpeta töötamine/lõpeta programm
 
  HLT/COB Lõpeta töötamine/lõpeta programm
 
  DAT  - Loe järgmise postkasti sisu
 
  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
 
https://community.computingatschool.org.uk/resources/2316/single
 +
 +
http://www.kean.edu/~gchang/tech2920/http___professor.wiley.com_CGI-BIN_JSMPROXY_DOCUMENTDIRECTORDEV+DOCUMENTID&0471715425+DOCUMENTSUBID&1+PRFVALNAME&pdfs_ch06.pdf

Viimane redaktsioon: 31. detsember 2018, kell 14:52

Little Man Computer ehk Väikese mehe arvuti on lihtsustatud näide arvutiarhidektuurist, mis loodi Stuart Madnicki poolt 1965 aastal.

Neumanni arhidektuur.jpg Von Neumanni arhidektuur

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:

Little man computer.jpg

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

http://www.kean.edu/~gchang/tech2920/http___professor.wiley.com_CGI-BIN_JSMPROXY_DOCUMENTDIRECTORDEV+DOCUMENTID&0471715425+DOCUMENTSUBID&1+PRFVALNAME&pdfs_ch06.pdf