CursMS3_2014_prezentat
-
Upload
vlad-stefan-cristian -
Category
Documents
-
view
215 -
download
3
Transcript of 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.
•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)
•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.
•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.
•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.
•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.
•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.
•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).
•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.
•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.
•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.
•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.
•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.
•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.
•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.
•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.
•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.
•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).
•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.