nivelul limbajului cod-mașină - cs.ucv.ro 10-2-nivelul limbajului cod-masina... · prin deplasare...

56
Arhitectura Calculatoarelor Cătălina Mancaș Dan Mancaș [email protected] [email protected] Universitatea din Craiova Facultatea de Automatică, Calculatoare și Electronică Catedra de Ingineria Calculatoarelor și Comunicații Nivelul limbajului cod-mașină Partea a II-a

Upload: others

Post on 31-Aug-2019

4 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

Arhitectura

Calculatoarelor

Cătălina Mancaș Dan Mancaș

[email protected] [email protected]

Universitatea din Craiova

Facultatea de Automatică, Calculatoare și Electronică

Catedra de Ingineria Calculatoarelor și Comunicații

Nivelul limbajului cod-mașină

Partea a II-a

Page 2: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Patea I...

Arhitectura calculatoarelor;

Instrucţiunea la nivelul cod-mașină;

Formate de instrucţiuni;

Criterii de proiectare a formatelor de instrucţiuni;

Lungimea instrucţiunilor;

Noţiunea de metabit;

Formate de instrucţiuni ortogonale şi arhitecturi etichetate.

2

Page 3: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Astăzi...

Clase de instrucţiuni la nivel cod maşină;

Clasa de instrucţiuni de transfer al datelor;

Clasa de instrucţiuni diadice;

Clasa de instrucţiuni monadice;

Clasa instrucţiunilor de I/O;

Clasa instrucţiunilor de control al ciclurilor;

Clasa instrucţiunilor de control ale CPU.

3

Page 4: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Clase de instrucţiuni la nivelul cod maşină

4

Page 5: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Clasa de instrucţiuni de transfer al datelor

5

Page 6: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Clasa de instrucţiuni de transfer al datelor

Operații de transfer operații de copiere;

Copie: combinație identică de biți;

6 subclase:

1. încărcarea registrelor din memorie;

2. transferul din registru în memorie;

3. transferul din registru în registru;

4. transferul din memorie în memorie;

5. înscrierea în stivă;

6. citire (extragere) din stivă.

Definite prin locurile unde datele sunt păstrate în interiorulcalculatorului: în memorie, în registre (din CPU), stivă.

6

Page 7: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Clasa de instrucţiuni de transfer al datelor

Operație de copiere => instrucțiune de duplicare a datelor;

Instrucțiunea de duplicare:

– identificarea sursei;

– identificarea destinaţiei;

– definirea volumului.

Format special: GPM (General Purpose Move).

7

Dată Copie Dată

Sursă Destinaţie

data path

Page 8: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Formatul GPM

Câmpuri pentru:

– sursă;

– destinaţie;

– nr. de Bytes;

– un indicator referitor la vectorul de stare.

Structură ortogonală: fiecare parametru este independentde ceilalţi;

Puţine procesoare au adoptat structura GPM;

Lungime mare => necesită un volum mare de memorie.

8

Page 9: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Exemple de instrucţiuni de transfer

La procesorul I8080:

– Instrucţiunea LOAD (LDA);

– Instrucţiunea STORE (STA);

– Instrucţiuni de transfer între registre;

– Instrucţiuni de transfer din memorie în registru;

– Instrucţiuni de transfer din registru în memorie;

– Instrucţiuni de transfer imediat de dată în registru;

– Instrucţiuni de transfer imediat de dată în memorie.

9

Page 10: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Instrucţiunea LOAD (LDA)

Memorie -> ACC;

Este o instrucţiune pe 3 octeţi;

Octeţii 2 şi 3 precizează adresa de memorie (pe 16 biţi);

Adresa destinaţiei - ACC (la I8080 se notează A) nu se dă, este subînţeleasă;

Opcode-ul instrucţiunii: 3A în hexa;

Forma generală:LDA Adresă (A) ((octet 3)(octet 2));

10

0011 1010

(Adr. Inf)

octet 2

(Adr. Sup)

octet 3

3 locaţii

3AOPCODE

ADR

Page 11: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

ACC -> Memorie;

Este o instrucţiune pe 3 octeţi;

Octeţii 2 şi 3 precizează adresa de memorie (pe 16 biţi) unde se va depune conţinutul ACC;

Forma generală: STA Adresă ((octet3)(octet2)) (A);

11

0011 0010

(Adr. Inf)

octet 2

(Adr. Sup)

octet 3

3 locaţii

32OPCODE

ADR

Instrucţiunea STORE (STA)

Page 12: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Instrucţiuni de transfer între registre

Procesorul I8080: registre;

12

A PSW

B C

D E

H L

SP

PC

RI

8 biti

16 biti

8 biti 8 biti 16 biți:

BC, DE, HL;

SP – Stack Pointer

PC – Program Counter;

8 biți:

A – Accumulator;

RI – Registrul Instrucțiune;

B, C, D, E, H, L;

5 biți:

PSW – Program Status Word;

Flags: C, Z, S, P, AC.

Page 13: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Instrucţiuni de transfer între registre

MOV R1, R2 (R1) (R2)

Instrucţiune pe un singur octet;

Ocupă o locaţie de memorie;

13

SursăDestinaţie

01 DDD SSS

adresă

registru

destinaţie

adresă

registru

sursăDDD sau SSS Registru

111 A

000 B

001 C

010 D

011 E

100 H

101 L

Page 14: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

MOV R, M (R) ((H) (L))

Transferă data din memorie, din locaţia precizată deadresa furnizată de perechea (HL), în registrul precizat îninstrucţiune, adică subcâmpul DDD.

Instrucţiunea este pe un octet;

Această instrucţiune adresează memoria indirect prin perechea de registre (HL).

14

SursăDestinaţie

01 DDD 110

adresă

registru

destinaţie

identificator

memorie

OPCODE

Instrucţiuni de transfer memorie-registru

Page 15: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Instrucţiuni de transfer registru-memorie

MOV M, R ((H) (L)) (R)

Transferă data din registrul desemnat în instrucţiune (R) înmemorie, la locaţia cu adresa desemnată prin conţinutulperechii de registre (HL);

Instrucţiunea este pe un octet;

Această instrucţiune adresează memoria indirect prinperechea de registre (HL).

15

01 110 SSS

identificator

memorie

adresă

registru

sursă

Page 16: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Instrucţiuni de transfer imediat de dată în registru;

MVI R, DATA (R) DATA

Realizează transferul imediat de dată în registrul specificat;

Este o instrucţiune pe 2 octeţi;

Al doilea octet îl reprezintă data imediată.

16

Instrucţiuni de transfer imediat de dată

00 DDD 110 DATA

Page 17: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Instrucţiuni de transfer imediat de dată în memorie.

MVI M, DATA ((H) (L)) DATA

Realizează transferul imediat de dată într-o locaţie dememorie;

Data imediată ce însoţeşte instrucţiunea se poate transferaîntr-o locaţie de memorie a cărei adresă este specificată deperechea de registre (HL);

Este o instrucţiune pe 2 octeţi;

Al doilea octet îl reprezintă data imediată.

17

Instrucţiuni de transfer imediat de dată

00 110 110 DATA

Page 18: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Clasa de instrucţiuni diadice

18

Page 19: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Exemple de instrucţiuni diadice

Instrucţiunile de prelucrare de natură aritmetică şi logică încare intervin 2 operanzi;

La procesorul I8080:

– Adunarea între ACC şi un registru;

– Adunare cu operand din memorie;

– Adunare cu registru şi transport;

– Adunare cu data din memorie şi transport;

– Instrucţiunea AND cu registru;

– Instrucţiunea AND cu memoria;

– Instrucţiunea XOR cu registrul;

– Intrucţiunea XOR cu memoria.

19

Page 20: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Adunarea între ACC şi un registru

Un operand se află în acumulator, iar celălalt operand înregistrul R;

Rezultatul se depune în ACC;

Este o instrucţiune pe un singur octet;

ADD R (A) (A) + (R);

20

10 000 SSS

adresă

registru

sursă

Page 21: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Adunare cu operand din memorie

Se adună conţinutul ACC cu operandul existent înmemorie, în locaţia desemnată de perechea de registre (HL);

Suma se depune în ACC;

ADD M (A) (A) + ((H) (L));

110 desemnează memoria;

Adresare indirectă prin perechea (HL).

21

10 000 110 86

Page 22: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Adunare cu registru şi transport

Unul dintre indicatorii de stare e indicatorul de transport"carry" (C);

Se adună conţinutul ACC cu cel al registrului desemnat îninstrucţiune prin SSS şi bitul de transport ce se află în PSW(C), rezultatul se depune în ACC;

ADC R (A) (A) + (R) + (C)

Observaţie: Asemănător se definesc şi operaţiile descădere.

22

10 001 110

Page 23: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Instrucţiunea AND

Funcţie logică;

Are rolul de a extrage o parte din biţii unui operand;

Pentru aceasta se foloseşte o mască;

Masca conţine 1 pe rangul biţilor ce trebuie extraşi;

Exemplu: 10100101, şi dorim să extragem ultimii 3 biţi:

10100101

00000111 -> masca

-------------- AND

00000101

Instrucţiunea AND instrucţiune de mascare.

23

Page 24: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Instrucţiunea OR

Asigură introducerea de noi biţi într-un operand;

Exemplu: 00001101;

Se cere inserţia de 3 de 1 în primele 3 ranguri;

Se adoptă masca 1110000:

00001101

11100000 -> masca;

-------------- OR

11101101

24

Page 25: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Instrucţiunea XOR

10101101

10100110

-------------- XOR

00001011

Operaţia OR creşte numărul de 1;

AND scade numărul de 1;

Prin XOR, în medie, numărul de 1 rămâne acelaşi.

25

Page 26: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Instrucţiunea AND cu registru

Se realizează operaţia AND între conţinutul ACC şiconţinutul registrului R specificat direct în instrucţiune;

După realizarea acestei operaţii, indicatorul de stare detransport, în mod obligatoriu, se fixează pe 0.

ANA R (A) (A) ∩ (R)

(C) 0

Formatul în cod maşină este:

26

10 100 SSS

Page 27: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Instrucţiunea AND cu memoria

Se realizează operaţia AND între conţinutul ACC şiconţinutul unei locaţii de memorie specificată implicit princonţinutul perechii de registre (HL);

ANA M (A) (A) ∩ ((H)(L))

(C) 0

Formatul în cod maşină este:

A6

27

10 100 110

Page 28: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Instrucţiunea XOR cu registrul

Se face XOR între conţinutul ACC şi cel al unui registru;

Rezultatul se trimite în ACC;

Obligatoriu, indicatorul C e resetat, adică adus în 0;

XRA R (A) (A) ⊕ (R)

(C) 0

Formatul în cod maşină este:

28

10 101 SSS

Page 29: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Instrucţiunea XOR cu memoria

Se face XOR între conţinutul ACC şi cel al unei locaţii dememorie ce este desemnată indirect prin conţinutulperechii de registre (HL);

Obligatoriu, indicatorul de stare C e resetat, adică adus în0;

XRA M (A) (A) ⊕ ((H)(L))

(C) 0

Formatul în cod maşină este:

AE

29

10 101 110

Page 30: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Clasa de instrucţiuni monadice

30

Page 31: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Instrucțiuni monadice

Instrucţiuni de procesare cu un operand;

Lipseşte al doilea operand => instrucţiuni mai scurte;

Conţine:

– instrucţiuni de complementare;

– instrucţiuni de deplasare stânga/dreapta;

– instrucţiuni de rotire stânga/dreapta;

– instrucţiuni de incrementare;

– instrucţiuni de decrementare.

31

Page 32: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Instrucțiuni monadice

O importanţă deosebită o au instrucţiunile dedeplasare;

Fie un operand pe 8 biţi: 10101010;

Prin deplasare la dreapta bitul cel mai din dreapta sepierde;

Prin stânga se poate insera 0 sau 1:

– Deplasarea dreapta cu inserţie de 0: 01010101

– Deplasarea dreapta cu inserţie de 1: 11010101

Există instrucţiuni de deplasare dreapta aritmetică undeprin deplasare, msb-ul se conservă;

Exemplu: operandul 10101010, prin deplasare dreaptaaritmetică se obţine 11010101.

32

Page 33: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Instrucțiuni monadice

În cazul rotirii bitul care iese se reinscrie în cealaltă extremitate;

Exemplu:

10101010 prin rotire dreapta 01010101

10101010 prin rotire stânga 01010101

Proprietate: Dacă operandul e pe n biţi atunci o rotire dreaptacu k biţi e echivalentă cu o rotire stânga cu (n-k) biţi;

Observaţie: De aceea nu toate repertoriile de instrucţiuni includambele rotiri;

Instrucţiunile de deplasare sunt foarte utile pentru operaţilearitmetice pentru înmulţire, împărţire, ridicare la putere sauradical;

O deplasare stânga e echivalentă cu o înmulţire cu 2, iar odeplasare dreapta este echivalentă cu o împărţire la 2.

33

Page 34: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Clasa instrucţiunilor de comparaţie şi salt

34

Page 35: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Instrucţiuni de comparaţie şi salt

Toate programele necesită să modifice fluxul de execuţie(control);

Exemplu: realizarea rădăcinii pătrate;

Mai înâi se testează semnul lui N;

– Dacă N<0 atunci operaţia nu are loc şi se lansează rutina

EROARE;

– Dacă N>0 atunci operaţia are loc şi se lansează subrutina

RADICAL.

Operație: salt condiţionat;

Metodă: ramificare condiţionată;

Se testează mai întâi o condiţie şi dacă e îndeplinită are locsaltul la o adresă particulară de memorie.

35

Page 36: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Instrucţiuni de comparaţie şi salt

Uneori, în instrucţiune există un subcâmp de 1 bit carestabileşte logica testului (condiţie adevărată sau falsă);

Fals: salt la o anumită adresă de memorie;

Cea mai simplă metodă de test: este de a evaluaindicatorii de stare, indicatori de condiţie saufanioane (flags) din CPU;

Flag-uri uzuale:

– indicatorul de zero: Z;

– indicatorul de paritate: P;

– indicatorul de transport: C;

– indicatorul de depăşire: OV (overflow);

– indicatorul de semn: S.

36

Page 37: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Instrucţiuni de comparaţie şi salt

Testarea se poate realiza şi prin compararea a douăcuvinte;

Se testează dacă sunt egale (egalitatea) sau dacă unul emai mare ca altul (inegalitatea);

Instrucţiunile de comparare sunt prezente în majoritatearepertoriilor de instrucţiuni;

Ele permit şi realizarea unor funcţii de sortare;

Rezultatul comparării: biţi de condiţie -> testaţi;

Condiţie este indeplinită: salt la adresa specificată dememorie;

Observaţii:

La compararea numerelor trebuie să se ţină cont de semnul lor;

Există şi instrucţiuni de salt necondiţionat: un caz particular desalturi condiţionate, unde condiţia este îndeplinită întotdeauna.

37

Page 38: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Salt necondiţionat

Adresa se încarcă în PC;

Este o instrucţiune pe 3 octeţi;

Octeţii 2 şi 3 reprezintă adresa de salt;

Octelul 3 este partea cea mai semnificativă;

Octetul 2 este partea cea mai puţin semnificativă a adresei;

Reuniunea celor doi octeţi: 3 şi 2 se transferă în PC.

JMP Adresă (PC) ((octet 3) (octet 2))

3 locaţii

38

11000011

(Adr. Inf) octet 2

(Adr. Sup) octet 3

Page 39: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Salt condiţionat

Se testează condiţia specificată;

Dacă este îndeplinită: salt la adresa dată în instrucţiune;

Este o instrucţiune pe 3 octeţi;

Octeţii 2 şi 3 reprezintă adresa de salt;

Condiţia de test apare implicit în primul octet, adică înOPCODE;

Condiţiile sunt codificate în instrucţiune prin 3 biţidesemnaţi CCC.

if (CCC) then

PC ((octet 3) (octet 2))

39

Page 40: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Salt condiţionat

40

11CCC011

(Adr. Inf) octet 2

(Adr. Sup) octet 33 locaţii

CCC Condiţie

000 NZ NOT ZERO (Z=0)

001 Z ZERO (Z=1)

010 NC NO CARRY (C=0)

011 C CARRY (C=1)

100 PO PARITY ODD (P=0)

101 PE PARITY EVEN (P=1)

110 P PLUS (S=0)

111 M MINUS (S=1)

Page 41: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Salt condiţionat

Pentru implementarea operaţiilor de comparare repertoriulde instrucţiuni conţine şi instrucţiuni de comparaţie;

Comparaţia se face prin scădere;

După efectuarea scăderii se poate determina dacă cei doioperanzi sunt egali atunci rezultatul este zero, şi deciindicatorul Z se activează (devine 1).

Dacă rezultatul este negativ atunci primul operand estemai mic decât al doilea şi se activează indicatorul de starede transport (C).

41

Page 42: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Comparaţia cu registrul

Se compară conţinutul registrului cu ACC;

Registrul este desemnat în OPCODE;

Operaţia de comparare: se scade din conţinutul ACCconţinutul registrului desemnat;

După operaţie ACC rămâne nemodificat, dar se modificăindicatorii de stare;

Dacă cei 2 operanzi sunt egali, atunci se setează Z şi dacăACC e mai mic decît conţinutul registrului atunci se seteazăC.

42

Page 43: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Comparaţia cu registrul

CMP R;

(A) - (R) => (A) nemodificat

dacă (ACC)=(R) => (Z)=1

dacă (ACC)<(R) => (C)=1

43

10111 SSS

Page 44: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Comparaţia cu dată imediată

Se compară conţinutul ACC cu un octet ce se dă explicit îninstrucţiune, deci dată imediată;

Data se dă în instrucţiune, în cel de-al doilea octet;

Instrucţiunea este pe 2 octeţi;

CPI DATA;

(A) - (octet 2) => (A) nemodificatdacă (ACC)=DATA => (Z) =1

dacă (ACC)<DATA => (C)=1

FE

44

11111110

DATA

Octet 2

Page 45: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Comparaţia cu memoria

Se compară conţintul ACC cu conţinutul locaţiei dememorie desemnată implicit prin conţinutul perechii deregistre (HL);

Comparaţia se face prin scădere.

CMP M;

(A) - ((H)(L)) => (A) nemodificat

dacă (ACC)=((H)(L)) => (Z)=1

dacă (ACC)< ((H)(L)) => (C)=1

BE

45

10111 110

Page 46: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Clasa instrucţiunilor de apel de proceduri

46

Page 47: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Instrucţiuni de apel de proceduri

Procedura (subrutină): un grup de instrucţiuni cereprezintă o anumită sarcină de calcul şi poate fi invocatădin diferite puncte ale programului în execuţie;

După ce procedura îşi încheie execuţia trebuie să aibă locrevenirea după apelul procedurii;

Adresele de revenire în programul apelant (principal)trebuie memorate;

3 locuri unde adresa de revenire poate fi plasată: înmemorie, în registru sau în stivă;

Cel mai bun procedeu este de a memora adresa derevenire (retur) în stivă.

47

Page 48: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Instrucţiuni de apel de proceduri

La execuţia instrucţiunii de apel (de regulă esteinstrucţiunea CALL) are loc înscrierea în vârful stivei aadresei de revenire în programul apelant;

Atunci când procedura este terminată (sarcina de calcul afost îndeplinită), procedura execută o instrucţiune derevenire RETURN, prin care citeşte vârful stivei şi-ldirijează spre PC;

Are loc un salt la adresa impusă reprezentând punctul derevenire în programul apelant;

Procedeul folosirii stivei este foarte răspândit în specialpentru că asigură implementarea recurenţei;

Definiţie: Abilitatea unei proceduri de a se autoapela senumeşte recurenţă.

48

Page 49: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Clasa instrucţiunilor de control al ciclurilor

49

Page 50: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Instrucţiuni de control al ciclurilor

Necesitate: execuţia unui grup de instrucţiuni de un anumitnumăr de ori predeterminat;

Implicit: existenţa unui numărător ce funcţionează cu rolulde contor al execuţiei ciclurilor;

După fiecare parcurgere a grupului de instrucţiuni se dă ocomandă de incrementare sau decrementare anumărătorului de buclă;

Când se ajunge la valoarea 0 sau la o valoarepredeterminată, se dă comanda de ieşire din buclă;

Deci, la fiecare parcurgere a grupului se testează şinumărătorul;

Dacă condiţia este îndeplinită atunci execuţia buclei seîncheie;

Procesorul I8080 nu are astfel de instrucţiuni.

50

Page 51: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Clasa instrucţiunilor de I/O

51

Page 52: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Instrucţiuni I/O

Este clasa cu cea mai mare varietate între diferitele tipuride CPU-uri;

Instrucţiuni explicite de I/O şi cele care nu au instrucţiunispecifice de I/O.

Cea mai simplă metodă: instrucţiuni ce asigură transferulunui singur octet;

Instrucţiunea INPUT: permite transferul unui singur octetdintr-un port de intrare (ce trebuie desemnat îninstrucţiune) şi ACC;

Instrucţiunea OUTPUT: asigură transferul unui singur octetdin ACC într-un port de ieşire, desemnat prin numărul său(adresă) în instrucţiune.

52

Page 53: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Instrucţiunea Input

Se citeşte conţinutul portului de intrare (1 octet);

Se depune pe DATA BUS;

Se transferă în ACC;

IN port (A) (port)

DB

53

11011011

Nr. de port2 locaţii

Page 54: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Instrucţiunea Output

Conţinutul ACC (1 octet) se depune pe DATA BUS (pe 8biţi) şi se trimite în portul de ieşire desemnat;

Aici se înscrie o copie a ACC;

OUT port (port) (A)

D3

54

11010011

Nr. de port2 locaţii

Page 55: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Clasa instrucţiunilor de control ale CPU

55

Page 56: Nivelul limbajului cod-mașină - cs.ucv.ro 10-2-Nivelul limbajului cod-masina... · Prin deplasare la dreapta bitul cel mai din dreapta se pierde; Prin stânga se poate insera 0

ARHITECTURA CALCULATOARELOR – Nivelul limbajului cod-mașină

Instrucţiuni de control

Sunt instrucţiuni specifice fiecărui CPU;

Pentru administrarea internă;

În mare se regăsesc în toate repertoriile;

De exemplu, instrucţiunea HALT care asigură oprireafuncţionării CPU;

Grupul EI (Enable Interrupt) şi DI (Disable Interrupt)asigură activarea/dezactivarea sistemului de întreruperi;

Instrucţiunea NOP este utilă pentru definirea unor cuantede timp.

56