Computer mic om
Omul Computer Mica (LMC, literalmente omulețul computer) este un instrucțional calculator model creat de Dr. Stuart Madnick în 1965. [1] Acesta este , în general , utilizat ca un mijloc de instruire, deoarece reprezintă un calculator simplu , cu von Arhitectură Neumann , baza oricărui computer contemporan. Poate fi programat atât în limbajul mașinii, cât și în limbajul de asamblare . [2] [3] [4]
Arhitectura sistemului
Ideea de bază a LMC este următoarea: imaginați-vă un om mic închis într-o cameră mică (sau direct în interiorul computerului). Pe o parte a camerei, există 100 de cutii poștale (reprezentând memoria computerului), numerotate de la 0 la 99. Fiecare dintre ele poate conține o instrucțiune sau o dată, codificate cu 3 caractere numerice, de la valoarea 000 la valoarea 999. Pe cealaltă parte a camerei există alte două cutii poștale, numite INBOX și OUTBOX , utilizate pentru a primi date și a le transmite în ieșire. În centrul camerei se află un fel de birou cu un calculator care are doar două funcții simple: adunare și scădere. Calculatorul reprezintă acumulatorul . Există un contor resetabil cu calculatorul, care reprezintă Contorul de programe . Contorul de programe conține adresa următoarei instrucțiuni pe care Omul Mic va trebui să o efectueze. În condiții normale, de îndată ce această instrucțiune este executată, Contorul de programe este mărit cu 1: în acest fel Omul Mic va executa toate instrucțiunile în ordine. Cu toate acestea, prin instrucțiuni de salt este posibilă instrucțiuni de iterație de cod (bucle) sau chiar structuri de selecție condiționată de tipul if-else
, acestea din urmă pur și simplu setând Contorul de program la o instrucțiune specifică dacă se verifică o anumită condiție, de exemplu dacă valoarea afișată de calculator este zero sau pozitivă. La fel ca în Arhitectura von Neumann , memoria conține atât instrucțiuni, cât și date, deci aveți grijă să opriți contorul când ajungeți la o adresă care conține date, altfel Omul Mic le va considera instrucțiuni și va încerca să le trateze ca atare. Pentru a utiliza LMC, utilizatorul introduce date în căsuțele de scrisori și apoi îi indică omului mic să înceapă să joace. Omul mic va porni de la instrucțiunile conținute în adresa de memorie numărul zero: în acest fel, resetarea contorului de programe la zero repornește programul.
Ciclul de execuție
Pentru a rula un program, Omine efectuează următorii pași:
- Uitați-vă la Program Counter pentru a afla care cutie poștală conține instrucțiunile de executat (de exemplu, numărul zero)
- preia instrucțiunea din gaură cu numărul corespunzător
- creșteți Contorul Programului, în acest fel va conține numărul următoarei instrucțiuni
- decodează instrucțiunea, obținând și numărul de căsuțe de scrisori care conțin datele necesare pentru a efectua instrucțiunea în sine
- preia datele din cutia poștală corespunzătoare numărului găsit în pasul anterior și le stochează în acumulator
- execută instrucțiunea
- stochează noile date în căsuța poștală din care a obținut datele vechi
- repetă ciclul sau se oprește
Comenzi
Deși LMC reprezintă de fapt opera unui procesor binar , a fost ales să folosească numerele zecimale pentru simplitate și să găzduiască studenții care nu sunt obișnuiți să lucreze cu sistemul binar sau hexazecimal .
Instrucțiuni
Unele simulatoare LMC sunt programate direct cu instrucțiuni numerice din trei cifre, altele cu coduri mnemonice sau etichete (întotdeauna 3 caractere). În ambele cazuri, numărul instrucțiunilor este totuși foarte limitat ( aproximativ zece instrucțiuni ) pentru a simplifica înțelegerea. Dacă LMC este de tipul care utilizează etichete mnemonice, acestea sunt convertite în coduri din trei cifre la compilarea programului. Prima cifră a unei instrucțiuni numerice reprezintă comanda care trebuie executată, iar ultimele două cifre adresa de memorie a cutiei de scrisori conectate la acea comandă
Tabelul de mai jos prezintă un set tipic de instrucțiuni numerice și etichetele lor mnemonice.
Cod numeric | Cod mnemonic | Instrucțiuni | Descriere |
---|---|---|---|
1xx | ADĂUGA | ADĂUGA | Adăugați valoarea stocată în caseta xx la cea conținută în acumulator. Rezultatul este stocat în acumulator.
|
2xx | SUB | SCĂDEA | Scădeți valoarea stocată în caseta xx din cea conținută în acumulator. Rezultatul este stocat în acumulator.
|
3xx | ESTE | MAGAZIN | Stocați conținutul acumulatorului în caseta xx, ștergând conținutul anterior.
|
5xx | LDA | SARCINĂ | Încărcați valoarea conținută în caseta xx în acumulator, ștergând conținutul anterior.
|
6xx | SUTIEN | SUCURSALĂ (necondiționată) | Setați Contorul de program pentru a adresa xx. Apoi, instrucțiunea conținută în caseta xx va fi urmată de executare. |
7xx | BRZ | SUCURSALĂ DACĂ ZERO (condiționat) | Dacă acumulatorul conține valoarea 000, setați Contorul programului la valoarea xx, în caz contrar, nu faceți nimic.
|
8xx | BRP | SUCURSALĂ DACĂ POZITIVĂ (condiționată) | Dacă semnalizatorul negativității nu este setat, schimbați Contorul programului la valoarea xx, altfel nu faceți nimic.
|
901 | ÎN P | INTRARE | Cumpărați valoarea introdusă de utilizator din caseta INBOX și stocați-o în acumulator.
|
902 | OUT | IEȘIRE | Afișați valoarea prezentă în acumulator în caseta OUTBOX.
|
000 | HLT / COB | HALT / PAUZĂ DE CAFEA | Încheiați programul. |
DAT | DATA | Această instrucțiune de asamblare încarcă valoarea în prima casetă disponibilă. DAT este, de asemenea, utilizat în combinație cu etichete pentru a declara variabile . De exemplu, DAT 984 stochează valoarea 984 în caseta de destinație a instrucțiunii DAT. |
Exemple
Utilizarea codurilor de instrucțiuni numerice
Acest program simplu (instrucțiunea 901 până la instrucțiunea 000 ) a fost scris folosind numai coduri numerice. Programul acceptă două numere ca intrare și produce diferența lor ca ieșire. Executarea începe de la caseta 00 și se termină la caseta 07. Apoi, vor fi discutate dezavantajele utilizării instrucțiunilor de cod numeric pentru a programa LMC.
Cutie | Cod numeric | Operațiune | Comentarii |
---|---|---|---|
00 | 901 | CUTIE -> ACUMULATOR | INTRAREA primului număr, care este scris pe acumulator (ștergerea a tot ce a fost stocat acolo înainte) |
01 | 308 | ACUMULATOR -> MEMORIE [08] | STORE (Stochează în caseta 08) valoarea curentă a acumulatorului, în pregătirea pentru pasul următor. |
02 | 901 | INBOX -> ACUMULATOR | INTRAREA celui de-al doilea număr, care este scris pe acumulator (ștergerea a tot ce a fost stocat anterior, în acest caz prima intrare) |
03 | 309 | ACUMULATOR -> MEMORIE [09] | STORE (Stochează în caseta 09) valoarea curentă a acumulatorului, întotdeauna în pregătirea pentru pasul următor. |
04 | 508 | MEMORIE [08] -> ACUMULATOR | Acum că ambele numere din INPUT sunt stocate în casetele 08 și 09 ... LOAD (încarcă) prima valoare înapoi în acumulator (ștergând întotdeauna conținutul acestuia) |
05 | 209 | ACUMULATOR = ACUMULATOR - MEMORIE [09] | SUBTRACT (scade) al doilea număr din conținutul acumulatorului, care conține primul număr |
06 | 902 | ACUMULATOR -> OUTBOX | OUTPUT (produce) rezultatul calculului stocat în acumulator pe OUTBOX |
07 | 000 | (nu s-a efectuat nicio operație) | HALT (oprește) computerul Omuleț |
Utilizarea instrucțiunilor cu etichete și mnemonice
Asamblarea este un limbaj de programare de nivel scăzut care folosește mnemonică și etichete în loc de coduri numerice. Deși LMC face o utilizare limitată a acestora, comoditatea utilizării acestor coduri este imediat observată din exemplul de mai jos, care este programul tocmai prezentat (scăderea a două numere) rescris în limbajul de asamblare: nu mai este necesar ca programatorul să memorează un set de coduri numerice anonime, dar poate programa folosind coduri mnemonice mai ușor de reținut. Dacă astfel de coduri reprezintă instrucțiuni care implică adrese de memorie (de exemplu, salt sau instrucțiuni de încărcare și salvare a datelor), se utilizează o etichetă pentru a identifica adresa memoriei.
- Acest exemplu de program poate fi compilat și rulat pe simulatorul LMC [5] , disponibil pe site-ul web al Universității York ( Toronto , Canada ) sau pe aplicația desktop scrisă de Mike Coley. [6] Aceste simulatoare includ instrucțiuni complete și exemple de programe, compilatorul de asamblare pentru conversia codului de asamblare în codul mașinii, interfețe de control pentru executarea și observarea programelor și descrieri detaliate pas cu pas ale fiecărei instrucțiuni LMC.
ÎN P STA PRIMUL ÎN P STA SECOND LDA PRIMUL SUB SECOND OUT HLT PRIMUL DAT AL DOILEA DAT
Etichete
Fără etichete, programatorul ar trebui să calculeze manual adresele de memorie : în exemplul realizat folosind coduri numerice, dacă s-ar introduce o nouă instrucțiune înainte de ultima instrucțiune (HLT), instrucțiunea HLT, aflată în prezent la adresa 07, ar fi mutată în adresa 08 (adresele sunt etichetate începând cu ora 00). Presupunând că utilizatorul introduce 600 ca prima intrare, instrucțiunea 308 ar face ca această valoare să fie stocată în caseta de adrese 08 și să înlocuiască instrucțiunea 000 (HLT). Întrucât instrucțiunea 600 înseamnă „săriți la caseta de adrese 00”, programul, în loc să se oprească, va ajunge într-o buclă infinită, începând de la instrucțiunea inițială (la caseta 00) și revenind întotdeauna la ea la sfârșit (datorită instrucțiunii 600, stocat incorect în locul HLT). Pentru a compensa acest lucru, multe limbaje de asamblare ( inclusiv modelul LMC ) combină mnemonica cu etichetele . O etichetă este pur și simplu un cuvânt folosit atât pentru a identifica o adresă de memorie unde este stocată o instrucțiune sau date, cât și pentru a se referi la acea adresă din cadrul unei instrucțiuni.
Când programul este compilat de asamblare:
- Etichetele din stânga unei instrucțiuni mnemonice sunt convertite la adresa de memorie unde sunt stocate instrucțiunile sau datele, de exemplu loopstart INP
- Etichetele din dreapta unei instrucțiuni mnemonice iau valoarea adresei de memorie indicate mai sus, de exemplu BRA loopstart
- O etichetă combinată cu o declarație DAT funcționează ca o variabilă și indică adresa de memorie în care sunt stocate datele, de exemplu, un DAT 1 sau numărul 1 DAT 1
În exemplul de asamblare care utilizează mnemonică și etichete, dacă o nouă instrucțiune ar fi inserată înainte de instrucțiunea finală HLT, atunci adresa de memorie etichetată FIRST ar deveni 09 în loc de 08 și instrucțiunea STA FIRST ar fi convertită la 309 (STA 09) în loc de 308 ( STA 08) când programul va fi compilat.
Deci, etichetele sunt folosite pentru:
- identificați o anumită instrucțiune care este ținta unei instrucțiuni BRANCH.
- identificați o adresă de memorie utilizând o variabilă (prin intermediul instrucțiunii DAT) și, dacă este necesar, încărcați datele în program în timpul compilării (această utilizare poate să nu pară evidentă dacă nu considerați că, de exemplu, nu există nici o modalitate de a adăuga 1 la acumulator, în afară de a cere utilizatorului să introducă valoarea 1 la începutul programului, dar este clar mult mai bine să aveți deja 1 prezent în memorie, folosind un DAT 1 )
Exemplu
Acest program primește un număr de intrare de la utilizator și îl scade cu unul până ajunge la zero.
ÎN P LOOP SUB ONE // Etichetați adresa de memorie cu LOOP, instrucțiunea va scădea apoi valoarea stocată la adresa etichetată ONE din acumulator OUT BRZ QUIT // Dacă valoarea din acumulator este 0, treceți la adresa etichetată QUIT BRA LOOP // Dacă valoarea din acumulator este alta decât 0, săriți la adresa etichetată LOOP QUIT HLT // Etichetați această adresă de memorie cu QUIT ONE DAT 1 // Stocați valoarea 1 în această adresă și etichetați-o ca ONE (declarația unei variabile)
Acest program primește un număr de intrare de la utilizator, îl pătrează și îl scoate, apoi repetă solicitarea unui nou număr. Introducerea 0 va încheia programul.
( Notă: o intrare care produce o valoare mai mare de 999 ar provoca o eroare în program datorită limitei de cifre permise de modelul LMC ).
START LDA ZERO // Inițializați pentru mai multe redări de programe REZULTATUL STA STA COUNT INP // Introducere utilizator BRZ END // Salt la eticheta END dacă input = 0 STA VALUE // Stocați intrarea în VALUE LOOP LDA RESULT // Încarcă REZULTAT ADĂUGAȚI VALOARE // Suma VALOARE, care este introducerea utilizatorului, la REZULTAT STA RESULT // Stocați noul REZULTAT LDA COUNT // Încărcați COUNT ADĂUGAȚI UNUL // Adăugați unul la COUNT STA COUNT // Stocați noul COUNT SUB VALUE // Scădeți intrarea utilizatorului, VALUE, din COUNT BRZ ENDLOOP // Dacă este zero (VALUE a fost adăugată la REZULTAT de câte ori VALUE), treceți la ENDLOOP BRA LOOP // Salt la LOOP pentru a adăuga în continuare VALOARE la REZULTAT ENDLOOP LDA RESULT // Încarcă REZULTAT OUT // IEȘIRE REZULTAT BRA START // Salt la START pentru inițializare și pentru a primi o nouă intrare VALUE END HLT // HALT - zero a fost introdus ca intrare, așa că ies RESULT DAT // Calculați rezultatul (0 în mod implicit) COUNT DAT // Contor (0 implicit) ONE DAT 1 // Constanta, de valoarea 1 VALUE DAT // Introducere utilizator, adică valoarea care trebuie pătrată (0 implicit) ZERO DAT // Constanta, cu valoarea 0 (0 implicit)
Notă: Dacă nu este specificată nicio valoare după o instrucțiune DAT, 0 este stocat implicit.
Notă
- ^ Little Man Computer . Acs.ilstu.edu , Illinois State University , 1 mai 2000. Accesat la 8 martie 2009 (arhivat din original la 27 februarie 2009) .
- ^ Yurcik, W.; Osborne, H. (2001). „O mulțime de computere Little Man: instrumente de predare a simulatorului de computer vizual”. Lucrarea Conferinței de simulare de iarnă din 2001 (nr. Cat. 01CH37304) 2. p. 1632. doi: 10.1109 / WSC.2001.977496. ISBN 0-7803-7307-3 .
- ^ Yurcik, W.; Brumbaugh, L. (2001). „Un simulator de computer pentru om mic, bazat pe web”. Lucrările celui de-al treizeci și al doilea simpozion tehnic SIGCSE privind educația în informatică - SIGCSE '01. p. 204. doi: 10.1145 / 364447.364585. ISBN 1581133294 .
- ^ Osborne, H; Yurcik, W. (2002). „Gama educațională a simulărilor vizuale ale paradigmei arhitecturii Little Man Computer”. A 32-a frontieră anuală în educație. pp. S4G - S19. doi: 10.1109 / FIE.2002.1158742. ISBN 0-7803-7444-4 .
- ^ Stephen Y. Chen, Cudmore William C, The Little Man Computer , pe yorku.ca , Universitatea York. Adus pe 7 octombrie 2010 .
- ^ Mike Coley, The Little Man Computer , la gcsecomputing.org.uk . Adus la 12 aprilie 2012 (arhivat din original la 9 decembrie 2016) .
linkuri externe
- Richard J. Povinelli: Predare: Introducere în hardware și software pentru computer: Little Man Computer , pe povinelli.org .
- Computerul „Omul mic” , la elearning.algonquincollege.com . Adus pe 2 mai 2019 (arhivat din original la 5 decembrie 2018) .