Computer mic om

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

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

Pictogramă lupă mgx2.svg Același subiect în detaliu: Bucla de preluare-executare .

Pentru a rula un program, Omine efectuează următorii pași:

  1. Uitați-vă la Program Counter pentru a afla care cutie poștală conține instrucțiunile de executat (de exemplu, numărul zero)
  2. preia instrucțiunea din gaură cu numărul corespunzător
  3. creșteți Contorul Programului, în acest fel va conține numărul următoarei instrucțiuni
  4. 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
  5. preia datele din cutia poștală corespunzătoare numărului găsit în pasul anterior și le stochează în acumulator
  6. execută instrucțiunea
  7. stochează noile date în căsuța poștală din care a obținut datele vechi
  8. 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.

Instrucțiuni
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.
Notă: Conținutul casetei nu este modificat. Acțiunea nu este definită pentru instrucțiuni care ar provoca sume necodabile în trei cifre ( depășire ).
2xx SUB SCĂDEA Scădeți valoarea stocată în caseta xx din cea conținută în acumulator. Rezultatul este stocat în acumulator.
Notă: Conținutul casetei nu este modificat. Acțiunea nu este definită pentru instrucțiunile care ar provoca rezultate negative de scădere ( underflow ); în orice caz, un semnal negativ este setat astfel încât instrucțiunea 8xx (BRP) să poată fi executată corect.
3xx ESTE MAGAZIN Stocați conținutul acumulatorului în caseta xx, ștergând conținutul anterior.
Notă: conținutul acumulatorului nu se modifică, în timp ce cel al casetei xx, indiferent de conținutul anterior.
5xx LDA SARCINĂ Încărcați valoarea conținută în caseta xx în acumulator, ștergând conținutul anterior.
Notă: conținutul casetei xx nu se modifică, în timp ce cel al acumulatorului, indiferent de 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.
Notă: Contorul de program poate fi modificat chiar dacă acumulatorul arată valoarea 000 datorită comportamentului nedefinit al instrucțiunii SUBTRACT atunci când rezultatul este negativ.
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.
Notă: Steagul negativității este setat atunci când rezultatul instrucțiunii SUBTRACT este negativ. Ca rezultat, BRP modifică Contorul programului atunci când rezultatul scăderii este mai mare sau egal cu zero.
901 ÎN P INTRARE Cumpărați valoarea introdusă de utilizator din caseta INBOX și stocați-o în acumulator.
Notă: Această instrucțiune suprascrie orice valori sunt prezente în acumulator.
902 OUT IEȘIRE Afișați valoarea prezentă în acumulator în caseta OUTBOX.
Notă: Conținutul acumulatorului nu se modifică.
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ă

  1. ^ Little Man Computer . Acs.ilstu.edu , Illinois State University , 1 mai 2000. Accesat la 8 martie 2009 (arhivat din original la 27 februarie 2009) .
  2. ^ 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 .
  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 .
  4. ^ 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 .
  5. ^ Stephen Y. Chen, Cudmore William C, The Little Man Computer , pe yorku.ca , Universitatea York. Adus pe 7 octombrie 2010 .
  6. ^ Mike Coley, The Little Man Computer , la gcsecomputing.org.uk . Adus la 12 aprilie 2012 (arhivat din original la 9 decembrie 2016) .

linkuri externe

Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT