Sunteți pe pagina 1din 19

Agenda

Sisteme cu microprocesoare elemente de baza


Modelul de programare
Adresarea memoriei in modul real

Liliana Dobrica, Sisteme si Microprocesoare


2013-2014

Modelul de programare

Programarea sistemelor cu microprocesoare necesita


intelegerea
Structurii de registre interne ale microprocesoarelor
(Intel).
Adresarea memoriei prin registrele de segment si
adresele de offset.

Liliana Dobrica, Sisteme si Microprocesoare


2013-2014

Modelul de programare

Trei grupuri de registre:


Registre de uz general,
Registre de uz special si
Registre de segment.
Registrul de indicatori (flags) care arata conditiile speciale
ale operarii unitatii aritmetice si logice a microprocesorului
(ALU).

Liliana Dobrica, Sisteme si Microprocesoare


2013-2014

Modelul de programare
Extensii 64-biti
(Pentium 4 si Core2)
RAX
RBX
RCX
RDX
RSP
RBP
RDI
RSI
RIP
RFLAGS
R8
R9
R10
R11
R12
R13
R14
R15

Liliana Dobrica, Sisteme si Microprocesoare


2013-2014

Registre de uz general

Sunt utilizate in orice scop dorit de programator.


Fiecare registru este adresabil fie ca:
64-biti (RAX,RBX, R8,..,R15) - Pentium4 si Core2
32-biti (EAX, EBX, etc.) doar de la 80386
16-bit (AX,BX, etc.) sau
8-bit (AH, AL, BH, BL, etc.).

Liliana Dobrica, Sisteme si Microprocesoare


2013-2014

Registre de uz general
RAX,

EAX: Accumulator:
Se foloseste ca 64-biti RAX, 32- biti (EAX), 16 biti (AX) sau 8-biti (AL sau AH).
Instructiuni: inmultire, impartire, alte operatii aritmetice sau logice.
EAX poate tine offset de memorie.

RBX, EBX: Base Index:


In general pastreaza offset-ul locatiei de memorie.
RBX, EBX, BX, BH sau BL.
ECX: Count:
In general: este contorul pentru instructiunile care se repeta: deplasari sau
rotiri de biti ; operatii cu string-uri care se repeta, contorul instructiunii LOOP.
RCX, ECX, CX CH, sau CL.
ECX poate tine offset de memorie.

Liliana Dobrica, Sisteme si Microprocesoare


2013-2014

Registre de uz general

RDX, EDX: Data:


RDX, EDX, DX, DH sau DL
Registru de uz general care
Pastreaza cea mai semnificativa parte a produsului dupa o
inmultire pe 16 sau 32-biti,
Pastreaza cea mai semnificativa parte a deimpartitului inainte de
impartire.
Numarul portului I/O pentru instructiunile I/O

Liliana Dobrica, Sisteme si Microprocesoare


2013-2014

Registre de uz general
RBP, EBP: Base Pointer:
Pointer in adresarea array-urilor de date in stiva de memorie.
RBP, EBP, BP.
RDI, EDI: Destination Index:
Instructiuni cu string-uri adreseaza datele din string destinatie al
transferului.
RDI, EDI sau DI.
ESI: Source Index:
Instructiunile cu string-uri adreseaza datele din string sursa al
transferului.
RSI, ESI sau SI.

Liliana Dobrica, Sisteme si Microprocesoare


2013-2014

Registre de uz general
R8-R15:
Pentium 4 sau Core2 in cazul modului 64-bit.
Datele din aceste registre sunt adresate pe: 64-, 32-, 16-, or 8-bit.
Pentru octet se foloseste doar partea cea mai din dreapta a
registrului.

; Copiaza c.m.p.s octet din R10 in R9


; Copiaza AX in partea c.m.p.s de word a R10
;
; Copiaza intreg registrul R12 in R13

Liliana Dobrica, Sisteme si Microprocesoare


2013-2014

Registre de uz special
RIP, EIP: Instruction Pointer:
Arata urmatoarea instructiune din segmentul de cod.
16-bit (IP) in modul real si 32-bit in modul protejat.
Se poate modifica printr-o instructiune jump sau call.
In modul 64-bit contine o adresa pe 40-biti.
RSP, ESP: Stack Pointer:
Adreseaza stiva de memorie LIFO (last input first output).
La executia instructiunilor PUSH si POP;
La apelul de subrutina si revenirea din subrutina: CALL sau
RET .
SP 16 biti.

Liliana Dobrica, Sisteme si Microprocesoare


2013-2014

10

Registre de uz special

RFLAGS, EFLAG, FLAG: pastreaza starea conditiilor din microprocesor si


controleaza operarea acestuia. Compatibilitate cu toate versiunile microprocesorului.
Instructiunile aritmetice si logice pot modifica c.m.d.d 5 flag-uri si Overflow.
Flag-urile nu se modifica la instructiuni de transfer de date sau de control.
Cele mai recente flag-uri controleaza I/O, intreruperile hardware maskabile,
debugging, task switching, etc.
Detalii la discutia despre setul de instructiuni!

Liliana Dobrica, Sisteme si Microprocesoare


2013-2014

11

EFLAGS

Flag de Transport: C (Carry):


Indica transportul dupa o adunare sau imprumutul dupa o scadere.
Indica unele conditii de eroare in programe sau proceduri.
Flag de Paritate: P (Parity):
0 pentru numere impare de biti si 1 pentru numere pare de biti.
Paritatea reprezinta numarul cifrelor de 1 exprimat prin par sau impar..
Ex.
Daca un numar binar contine trei cifre 1 - paritate impara, P=0.
Numerele cu 0 cifre 1 se considera de paritate para.
Flag Auxiliar: A (Auxiliary Carry):
Indica transportul dupa o adunare sau imprumutul dupa o scadere intre bitii 3 si 4 ai rezultatului.
Este testat cu instructiunile DAA si DAS;
Flag de Zero: Z (Zero):
Indica rezultatul 0 dupa o operatie aritmetica sau logica.
=1 daca rezultatul este 0.
Flag de Semn: S (Sign):
Indica semnul rezultatului dupa o operatie de adunare sau scadere.
=1 daca semnul rezultatului este negativ.

Liliana Dobrica, Sisteme si Microprocesoare


2013-2014

12

EFLAGS

Flag Capcana: T (Trap): Activeaza capcana.


=1 activeaza capcana.
Ofera posibilitatea depanarii on-chip (debugging)
Microprocesorul intrerupe fluxul normal de instructiuni in functie de
conditiile indicate de registrele de depanare si control. (debug and
control registers).
=1 permite depanare pas-cu-pas a programului; =0 dezactiveaza acest
mod pas-cu-pas.
In modul pas-cu-pas, microprocesorul genereaza o exceptie de
depanare dupa fiecare instructiune; se inspecteaza starea de executie
a programului dupa fiecare instructiune.
Setarea acestiu flag T este posibila cu instructiunea POPF. Exceptia
de depanare este generata dupa instructiunea care urmeaza.

Liliana Dobrica, Sisteme si Microprocesoare


2013-2014

13

EFLAGS

Flag de Intrerupere: I (Interrupt):

Controleaza operarea pinului INTR (Interrupt request);


=1; activeaza intreruperile.
Instructiunea STI seteaza flagul I; I=1
Instructiunea CLI reseteaza flagul I; I=0
Controleaza raspunsul procesorului la cererile de intreruperi
mascabile hardware. Cand este setat raspunde unei astfel de
cereri; cand este resetat inhiba intreruperile.
Nu afecteaza generarea de exceptii sau intreruperi nemascabile.
Modificarea acestui flag se poate face doar la indeplinirea
anumitor conditii de privilegiu.

Liliana Dobrica, Sisteme si Microprocesoare


2013-2014

14

EFLAGS

Flag de directie: D (Direction):


Pentru instructiunile cu string-uri selecteaza modul de incrementare sau
decrementare pentru registrele DI si/sau SI.
=1 registrele sunt decrementate automat.
Instructiunile STD si CLD modifica acest flag.
Flag de depasire: O (Overflow):
Setat de instructiunile de adunare sau scadere.
Conditia de depasire este indeplinita doar in cazul numerelor cu semn.
Inidica daca rezultatul depaseste capacitatea masinii.
Ex. Daca la 7FH (=127) se aduna 01H(+1) rezultatul este 80H (-128).
Conditie de depasire in cazul adunarii numerelor cu semn.
Operatiile numerelor fara semn ignora acest flag.

Liliana Dobrica, Sisteme si Microprocesoare


2013-2014

15

EFLAGS 80286 and up

Flag nivel de privilegii: IOPL (I/O privilege level):


Indica nivelul de privilegii la care trebuie executat codul pentru a
putea executa instructiuni I/O.
00 cel mai inalt nivel de incredere;
11 - cel mai scazut nivel de incredere;
Nivelul de privilegii al programului care se executa trebuie sa fie
mai de incredere deact IOPL pentru a putea accesa spatiul de
adrese I/O.
Poate fi modificat prin instructiunea POPF de un program cu
nivel de privilegii 0 (cel mai inalt nivel).
IOPL realizeaza si mecanismul de control al flagului de
intreruperi IF si tratarea intreruperilor in modul virtual-8086 daca acest mod este activat (CR4.VME = 1).

Liliana Dobrica, Sisteme si Microprocesoare


2013-2014

16

EFLAGS 80286 and up

Flag de mod virtual: VM (Virtual Mode):


=1, selecteaza modul virtual de operare pentru un sistem in modul
protejat. Sistemul permite sa coexiste in memorie mai multe partitii
DOS de memorie de 1MB fiecare.
Simuleaza DOS in mediul Windows.

Liliana Dobrica, Sisteme si Microprocesoare


2013-2014

17

EFLAGS 80386 and up

Flag de repornire: RF (Resume):


Permite repornirea unei instructiuni care urmeaza dupa tratarea unei exceptii de
depanare (cauzate de conditiile de breakpoint);
=1 dezactiveaza temporar generarea exceptiilor de depanare (prin breakpoint).
=0 breakpoint-urile pot genera exceptii de depanare.
Software-ul de depanare trebuie sa seteze acest flag inaintea revenirii din
programul intrerupt cu instructiunea IRETD ( previne ca instructiunea de
breakpoint sa nu mai cauzeze o alta exceptie de depanare).
Procesorul sterge automat acest flag dupa ce s-a executat cu succes revenirea
din exceptie. Poate trata din nou exceptii de tip breakpoint.

Liliana Dobrica, Sisteme si Microprocesoare


2013-2014

18

EFLAGS 80486 and up

Flag de verificare aliniere: AC (Alignment Check):


Doar la 80486SX pentru sincronizare cu coprocesorul 80487SX.
=1 in conditiile in care un word sau double word este adresat la o
adresa care nu corespunde limitei specifice de aliniere pentru
word (multiplu de 2) sau doubleword (multiplu de 4).
se genereaza o exceptie (alignment-check exception) daca
operandul nu este aliniat. Exceptia:
Verifica alinierea datelor. In cazul unui schimb de date co
procesoare care au nevoie ca toate datele sa fie aliniate.
Este utilizata de interpretoare pentru a indica anumiti
pointeri speciali (care omit alinierea). Se elimina astfel
overhead-ul de verificare a fiecarui pointer si se trateaza
doar pointeri speciali.

Liliana Dobrica, Sisteme si Microprocesoare


2013-2014

19

EFLAGS Pentium and up

Flag de intrerupere virtuala: VIF (Virtual Interrupt Flag):

Reprezinta copie a bitului flagului de intreruperi.


Contine imaginea virtuala a IF.
Este utilizat in conjunctie cu flagul VIP.
Disponibil la Pentium- Pentium 4.

Liliana Dobrica, Sisteme si Microprocesoare


2013-2014

20

10

EFLAGS Pentium and up

Flag Intrerupere Virtuala in asteptare: VIP (Virtual Interrupt Pending):

Disponibil la Pentium- Pentium 4


=1 indica o intrerupere in asteptare;
=0 nu exista intreruperi in asteptare;
Este utilizat in conjunctie cu flagul VIF.

Flag de identificare: ID (Identification):


Disponibil la Pentium- Pentium 4
Pentru instructiunea CPUID, care ofera informatii despre
microprocesor: numarul versiunii si producatorul.

Liliana Dobrica, Sisteme si Microprocesoare


2013-2014

21

Registre de Segment

Genereaza adresa de memorie in


combinatie cu alte registre.
4-6 registre.
Opereaza diferit in modul real fata de
modul protejat al microprocesorului.

Liliana Dobrica, Sisteme si Microprocesoare


2013-2014

22

11

Registre de Segment

CS (Segment de Cod):
Segmentul de cod este o sectiune din
memorie care pastreaza programele si
procedurile folosite de acestea.
Acest registru defineste adresa de
inceput a sectiunii de memorie cu cod.
Mod real specifica inceputul unui
segment de 64KB.
Mod protejat selecteaza un descriptor
de segment ce include adresa de
inceput si lungimea sectiunii de
memorie cu cod.
Segmentul de cod este limitat la 64KB
pentru 8086-80286 si 4 GB pentru 386
si urmatoarele.

Liliana Dobrica, Sisteme si Microprocesoare


2013-2014

23

Registre de Segment

DS (Segment de Date):
Similar CS, cu exceptia ca acest
segment pastreaza date.
Datele sunt accesate in
segmentul de date prin:
Adresa de offset sau
Continutul altor registre
care au adresa de offset.

Liliana Dobrica, Sisteme si Microprocesoare


2013-2014

24

12

Registre de Segment

ES (Extra Segment):
Segment de date utilizat de unele
instructiuni pentru manipularea
string-urilor.
Este destinatia datelor.

Liliana Dobrica, Sisteme si Microprocesoare


2013-2014

25

Registre de Segment

SS (Stack Segment):
Similar CS, exceptie acest segment
pastreaza stiva.
Locatia intrarii curente in stiva este
stabilita de continutul registrului SP.

Liliana Dobrica, Sisteme si Microprocesoare


2013-2014

26

13

Registre de Segment

FS si GS:
Disponibile de la 80386 si
urmatoarele.
Registre segment suplimentare
pentru doua segmente de
memorie suplimentare care pot fi
accesate de programe.

Liliana Dobrica, Sisteme si Microprocesoare


2013-2014

27

Operarea in mod real

Modul real - Reprezinta un mediu de programare


compatibil procesorului 8086 cu unele extensii, (ex.
Abilitatea de a comuta in modul protejat)
Microprocesorul lucreaza in mod real la pornire sau
dupa reset.

Liliana Dobrica, Sisteme si Microprocesoare


2013-2014

28

14

Translatarea adresei in modul real


Procesorul deplaseaza continutul
registrului segment 4 biti la stanga
pentru a forma adresa de baza pe 20
de biti.
Offsetul este adunat adresei de
baza, iar rezultatul reprezinta adresa
liniara ce se mapaeaza direct in
spatiul adreselor fizice.
In modul real se considera ilegal un
offset mai mare de FFFF pentru
microprocesoare ce opereaza cu
registri pe 32 biti.
Pentru compatibilitate cu 8086, in
modul real de operare se genereaza
exceptie ( erori de psudo-protectie intreruperile 12 sau 13) daca offset-ul
reprezentata pe 32-biti este in afara
domeniului 0 - FFFFH.

Liliana Dobrica, Sisteme si Microprocesoare


2013-2014

29

Segment si Offset

Adresa de segment si offset genereaza adresa de


memorie in modul real de operare.
Adresa de Segment se afla intr-unul dintre registrele de
segment si defineste inceputul oricarui segment de
memorie de 64 KB.
Offsetul selecteaza locatia de memorie din segmentul de
memorie de 64KB.

Liliana Dobrica, Sisteme si Microprocesoare


2013-2014

30

15

Schema de adresare in modul real cu adresa de


segment si offset
Offsetul este distanta de la
incepul segmentul de
memorie.
Registrul de segment contine
1000H.
Se observa ca registrul de
segment este este alaturat
unui 0H in partea din
dreapta si formeaza adresa
de memorie pe 20-biti.
Acceseaza inceputul unui
segment de memorie in
oricare locatie din primii
1MB de memorie.

Liliana Dobrica, Sisteme si Microprocesoare


2013-2014

31

Segment and Offset

Segmentele pot incepe la orice limita multiplu de 16 din


memoria sistemului.

Liliana Dobrica, Sisteme si Microprocesoare


2013-2014

32

16

Segment si Offset

Considerand lungimea unui segment de 64KB adresa de


sfarsit a segmentului se poate calcula:
Ending segment address = Starting address + FFFFH

Liliana Dobrica, Sisteme si Microprocesoare


2013-2014

33

Segment si Offset

O locatie de memorie se defineste prin specificarea continutul registrului


segment si a offset-ului.
Sintaxa seg_addr:offset,
1000:F000 specifica 1F000H.
Exista combinatii implicite intre registrele de segment si offset-uri in
definirea referintelor la memorie.
Valoarea din registrul de segment este numita valoarea curenta a
registrului de segment.
Exemplu: word din CS arata locatia de memorie pentru primul
double word location (80386 and up) din segmentul de cod curent.

Liliana Dobrica, Sisteme si Microprocesoare


2013-2014

34

17

Segment si Offset

Combinatii implicite intre registrele microprocesorului:


CS:EIP
SS:ESP, SS:EBP
DS:EAX, DS:EBX, DS:ECX, DS:EDX, DS:EDI,
DS:ESI, DS:8-bit_literal, DS:32-bit_literal
ES:EDI
FS and GS have no default.

Liliana Dobrica, Sisteme si Microprocesoare


2013-2014

35

Segment si Offset
Exemplu de memorie a sistemului cu 4 segmente

Segmentul reprezinta o unitate


adresabila de memorie
independenta formata din 64K
octeti consecutivi de memorie.
Fiecare segment are o adresa de
baza a segmentului care identifica
inceputul, fiind locatia de memorie a
celui mai putin semnificativ octet
adresabil.
8086-80286 au 4 segmente de
memorie, iar 80386 si urmatoarele
au 6 segmente de memorie. La un
moment dat numai aceste segmente
pot fi active: segment de cod,
segment de stiva, si segmente de
date (2 sau 4).

Liliana Dobrica, Sisteme si Microprocesoare


2013-2014

36

18

Segment si Offset
Exemplu sistem de memorie cu 4 segmente
Solutie: Calculul adresei de sfarsit pentru fiecare segment de
memorie.

Liliana Dobrica, Sisteme si Microprocesoare


2013-2014

37

19

S-ar putea să vă placă și