INIŢIERE – Lecţia 3

8 MARTIE 2001

În primul rând aş vrea să lămurim câteva lucruri care ne vor fi utile în viitor.
Şi anume:
• Când programezi un mP este indicat să precizezi baza în care sunt reprezentate numerele. Un număr binar cum este 1111 trebuie scris sub forma 1111b, un număr zecimal, de exemplu 123 trebuie scris 123, iar pentru baza hexa, A5 trebuie scris A5H. Litera care urmează numărului nu trebuie să vă inducă în eroare, dimpotrivă aceasta este introdusă tocmai pentru a preciza clar baza în care este reprezentat numărul respectiv. Este uşor să spui că un număr este în bază 2, 10 sau 16, dar în scris acesta trebuie precizat. Procedând în acest mod este clar pentru oricine vede programul scris de dumneavoastră în ce bază este reprezentat un număr format din mai multe cifre sau din mai mulţi biţi.
• Trebuie precizat că există un tip de memorie denumit flag. Flagurile sunt numere formate dintr-un singur bit folosite pentru a indica diferite condiţii. Se numesc flaguri (fanioane) deoarece semnalizează programului diferite evenimente sau condiţii. Dacă fanionul este “ridicat” adică are valoarea 1 se spune că este “setat”. Dacă are valoarea 0 se spune că este “resetat”.
• Încă un lucru: într-un număr format din 8 biţi aceştia sunt referiţi de la 0 la 7, bitul 0 fiind primul bit din dreapta sau bitul cel mai puţin semnificativ, iar al şaptelea bit este primul bit din stânga sau bitul cel mai semnificativ. În mP zero este un număr real (la fel ca 1 sau 8), nu trebuie considerat că semnifică “nimic”.
• În ultimul rând, un mP conţine diferiţi regiştri. Aceştia diferă de la mP la mP, dar fiecare conţine un registru numit “Acumulator”. Este un registru pe 8 biţi şi se foloseşte pentru stocarea temporară a rezultatelor.
În programarea mP se folosesc 5 gupuri de instrucţiuni principale: instrucţiuni aritmetice, logice, booleane, instrucţiuni pentru controlul programului, instrucţiuni de transfer. Fiecare grup conţine diferite instrucţiuni specifice rezultând în final 110 instrucţiuni diferite. În această lecţie vom aborda acele operaţii care ne permit utilizarea cunoştinţelor acumulate până în prezent.

Instrucţiuni aritmetice
Instrucţiunile aritmetice includ: adunare, scădere, înmulţire, împărţire, incrementare, decrementare. În aceste tipuri de operaţii se folosesc două flaguri: Carry (C) şi Zero (Z) care transmit programului rezultatul instrucţiunii efectuate. Flagul C va fi explicat în următorul exemplu. Flagul Z va fi folosit în lecţiile viitoare, dar vă pot preciza că dacă acesta este setat, are valoarea 1, rezultatul operaţiei efectuate este zero, pune în acumulator valoarea zero.

Adunarea cuvintelor binare
Este cea mai simplă operaţie; toată lumea ştie să adune două numere şi să spună rezultatul.Trebuie subliniat următorul aspect. Dacă rezultatul obţinut din adunarea a două numere este mai mare decât dimesiunea acumulatorului, o parte din acesta se poate pierde. De exemplu, dacă aduni 11111111b + 11111111b (cel mai mare număr ce poate fi reprezentat pe 8 biţi), rezultatul este 255+255=510. Reprezentarea binară pentru 510 este 111111110b, un număr format din 9 biţi. Are loc o depăşire superioară (overflow), rezultatul obţinut nu poate fi stocat corect. Cum să plasezi într-un registru sau într-o locaţie de memorie de 8 biţi un număr de 9 biţi? Răspunsul este: “Nu poţi”. Cum se rezolvă totuşi această problemă? Folosind flagul Carry (C). Dacă rezultatul adunării a două numere depăşeşte spaţiul disponibil de 8 biţi, atunci al 9 lea bit va fi stocat în C. Deci în acumulator va fi păstrat 11111110b (254), iar C va avea valoarea 1, va fi setat. Acest 1 are de fapt valoarea 256 = 28 deoarece este al 9 -lea bit al numărului stocat. Adunând 254 cu 256 se obţine 510 – răspunsul corect. Dacă în urma operaţiei de adunare rezultatul nu depăşeşte 8 biţi, C va avea valoare 0.

Scăderea
În cazul operaţiei de scădere lucrurile sunt mult mai complicate; implică reprezentarea numerelor în complement faţă de 1 sau complement faţă de 2, pe care nu le-am prezentat încă. Vom reveni asupra acestui subiect într-o lecţie ulterioară. Vă pot spune totuşi că puteţi scade două numere, iar dacă apare o depăşire inferioară (under flow) flagul C va fi setat, va avea valoarea 1, altfel va fi 0. O depăşire inferioară apare dacă dintr-un număr mai mic se scade un număr mai mare.

Înmulţire, împărţire
În programarea mP se folosesc operaţiile de înmulţire şi împărţire a două numere, dar o să revin ulterior asupra acestor operaţii.
Încă două operaţii sunt incluse în grupul instrucţiunilor aritmetice şi anume operaţiile de incrementare, decrementare. Ele sunt folosite pentru a număra rezultatele sau ciclurile dintr-un program.

Instrucţiuni logice
În programarea mP se folosesc şi alte tipuri de instrucţiuni matematice denumite instrucţiuni logice. Acesta sunt: OR, AND, XOR, ROTATE, NOT sau CLEAR.
Aceste comenzi, uzual, nu au legătură cu valoarea operanzilor cu care lucrează, ci se aplică tuturor biţilor sau perechilor de biţi din operanzi. Funcţiile OR, AND, XOR şi NOT sunt definite în tabelul următor.

Rotate
Prin această instrucţiune se pot roti biţii în interiorul unui octet. După direcţia de rotaţie pot fi rotaţii la dreapta sau la stânga. De exemplu, dacă în acumulator există 11000011b şi se roteşte la stânga, rezultatul va fi 10000111b. După cum se poate observa bitul 7 s-a mutat în poziţia 0, iar toţi ceilalţi s-au deplasat spre stânga cu o poziţie.

Clear
Această instrucţiune pune în acumulator valoarea zero. De asemenea, resetează flagul C şi setează flagul Z.

Operaţii BOOLEANE
Sunt şi alte instrucţiuni care au valoarea unui singur bit. Într-un program, o locaţie de 8 biţi poate reprezenta 8 flaguri sau indicatoare separate, definite de programator şi care sunt folosite pentru a semnala diferite evenimente sau condiţii care apar în program. Poate fi un bit care precizează dacă o uşă este sau nu este deschisă, sau dacă o tastă a fost apăsată sau un comutator este închis sau deschis. Aceşti biţi sau flaguri sunt mecanismele care aplică “legea” şi menţin “ordinea” în program. Operaţiile booleane sunt AND, OR, SET, CLEAR, MOVE şi le vom aborda într-o lecţie viitoare.

Instrucţiuni pentru controlul programului
Acestea se reduc în esenţă la salturi şi ramificaţii. Acestea au denumiri diferite care reflectă modul în care se efectuează saltul sau condiţiile care determină saltul, cum sunt depăşirile inferioare sau superioare, sau verifică dacă rezultatele operaţiilor efectuate au valoarea zero. Dar toate au acelaşi efect: opresc execuţia secvenţială normală a programului şi efectuează un salt către o altă locaţie.
Salturi condiţionate
• saltul se efectuează dacă un anumit bit este setat (1) sau resetat (0). Acest bit poate fi flagul C, flagul Z sau orice alt bit.
• saltul se efectuează în funcţie de valoarea obţinută din compararea a două valori.

Apeluri de procedură (call)
Permit programatorilor să definească subprograme sau subrutine care efectuează acţiuni repetate necesare în programul principal. Aceasta economiseşte timpul de programare deoarece o subrutină odată scrisă poate fi folosită în programul principal ori de câte ori este necesară, este de fapt un mod de obţinere a unei instrucţiuni proprii.

Transferul de date
Deplasare (move)
Această instrucţiune este utilizată pentru transferul informaţiilor între regiştri sau între regiştri şi memorie.
Instrucţiuni de schimbare a datelor
Aceste instrucţiuni schimbă datele între doi regiştri; este o variaţie a instrucţiunii de deplasare a datelor.
Am încercat să vă prezint cele mai importante instrucţiuni pe care le putem folosi la ora actuală având în vedere cunoştinţele acumulate. În lecţiile următoare vom aborda toate cele 110 instrucţiuni.

• Ioana Enache
– va urma –

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile necesare sunt marcate *

  • Folosim datele dumneavoastră cu caracter personal NUMAI pentru a răspunde comentariilor/solicitărilor dumneavoastră.
  • Pentru a primi raspunsuri adecvate solicitărilor dumneavoastră, este posibil să transferăm adresa de email și numele dumneavoastră către autorul articolului.
  • Pentru mai multe informații privind politica noastră de confidențialitate și de prelucrare a datelor cu caracter personal, accesați link-ul Politica de prelucrare a datelor (GDPR) si Cookie-uri.
  • Dacă aveți întrebări sau nelămuriri cu privire la modul în care noi prelucrăm datele dumneavoastră cu caracter personal, puteți contacta responsabilul nostru cu protecția datelor la adresa de email: gdpr@esp2000.ro
  • Abonați-vă la newsletter-ul revistei noastre