CursMS3_2014_prezentat

19
•1 © Liliana Dobrica, Sisteme si Microprocesoare 2013-2014 1 Agenda Sisteme cu microprocesoare – elemente de baza Modelul de programare Adresarea memoriei in modul real © Liliana Dobrica, Sisteme si Microprocesoare 2013-2014 2 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.

Transcript of CursMS3_2014_prezentat

Page 1: CursMS3_2014_prezentat

•1

© Liliana Dobrica, Sisteme si Microprocesoare

2013-2014 1

Agenda

• Sisteme cu microprocesoare – elemente de baza

• Modelul de programare

• Adresarea memoriei in modul real

© Liliana Dobrica, Sisteme si Microprocesoare

2013-2014 2

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.

Page 2: CursMS3_2014_prezentat

•2

© Liliana Dobrica, Sisteme si Microprocesoare

2013-2014 3

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 4

Modelul de programare

RAX

RBX

RCX

RDX

RSP

RBP

RDI

RSI

RIP

RFLAGS

R8

R9

R10

R11

R12

R13

R14

R15

Extensii 64-biti

(Pentium 4 si Core2)

Page 3: CursMS3_2014_prezentat

•3

© Liliana Dobrica, Sisteme si Microprocesoare

2013-2014 5

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 6

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.

Page 4: CursMS3_2014_prezentat

•4

© Liliana Dobrica, Sisteme si Microprocesoare

2013-2014 7

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 8

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.

Page 5: CursMS3_2014_prezentat

•5

© Liliana Dobrica, Sisteme si Microprocesoare

2013-2014 9

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 10

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.

Page 6: CursMS3_2014_prezentat

•6

© Liliana Dobrica, Sisteme si Microprocesoare

2013-2014 11

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 12

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.

Page 7: CursMS3_2014_prezentat

•7

© Liliana Dobrica, Sisteme si Microprocesoare

2013-2014 13

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 14

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.

Page 8: CursMS3_2014_prezentat

•8

© Liliana Dobrica, Sisteme si Microprocesoare

2013-2014 15

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 16

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).

Page 9: CursMS3_2014_prezentat

•9

© Liliana Dobrica, Sisteme si Microprocesoare

2013-2014 17

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 18

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.

Page 10: CursMS3_2014_prezentat

•10

© Liliana Dobrica, Sisteme si Microprocesoare

2013-2014 19

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 20

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.

Page 11: CursMS3_2014_prezentat

•11

© Liliana Dobrica, Sisteme si Microprocesoare

2013-2014 21

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 22

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.

Page 12: CursMS3_2014_prezentat

•12

© Liliana Dobrica, Sisteme si Microprocesoare

2013-2014 23

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 24

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.

Page 13: CursMS3_2014_prezentat

•13

© Liliana Dobrica, Sisteme si Microprocesoare

2013-2014 25

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 26

Registre de Segment

• SS (Stack Segment):

• Similar CS, exceptie acest segment

pastreaza stiva.

• Locatia intrarii curente in stiva este

stabilita de continutul registrului SP.

Page 14: CursMS3_2014_prezentat

•14

© Liliana Dobrica, Sisteme si Microprocesoare

2013-2014 27

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 28

Operarea in mod real

• Modul real - Reprezinta un mediu de programarecompatibil procesorului 8086 cu unele extensii, (ex. Abilitatea de a comuta in modul protejat)

• Microprocesorul lucreaza in mod real la pornire saudupa reset.

Page 15: CursMS3_2014_prezentat

•15

© Liliana Dobrica, Sisteme si Microprocesoare

2013-2014 29

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 30

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.

Page 16: CursMS3_2014_prezentat

•16

© Liliana Dobrica, Sisteme si Microprocesoare

2013-2014 31

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 32

Segment and Offset

• Segmentele pot incepe la orice limita multiplu de 16 din

memoria sistemului.

Page 17: CursMS3_2014_prezentat

•17

© Liliana Dobrica, Sisteme si Microprocesoare

2013-2014 33

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 34

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.

Page 18: CursMS3_2014_prezentat

•18

© Liliana Dobrica, Sisteme si Microprocesoare

2013-2014 35

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 36

Segment si OffsetExemplu 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).

Page 19: CursMS3_2014_prezentat

•19

© Liliana Dobrica, Sisteme si Microprocesoare

2013-2014 37

Segment si OffsetExemplu sistem de memorie cu 4 segmente

• Solutie: Calculul adresei de sfarsit pentru fiecare segment de

memorie.