Sunteți pe pagina 1din 39

Arhitectura x86

De citit:
capitolele 3, 14

Modificat: 24-Oct-16

Capitolul 4

Cuprins capitol 4
Familia x86
Registrele

Data
Pointer, index
Control
Segment

Modul real
Segmentare, Paginare
ntreruperi

Modul protejat

Registrele Segment
Descriptori de segment
Tabele de descriptori
Modele de segmentare

Capitolul 4

Istoricul procesoarelor Intel


Procesor

An

Frecvena

Tranzistoare

Registre

Bus date Max addr

4004

1969

0.74

2.3K

12

4K

8080

1974

4.5K

16

64K

8086

1978

29K

16

16

1 MB

80386

1985

20

275K

32

32

4 GB

Pentium

1993

60

3.1M

32

40?

4GB

Pentium 4 2000

1500

42M

32

64GB

Core 2

2006

3000

291M

64

64GB

Core i7

2008

3400

1.4G

64

64GB

Xeon E5

2012

3600

5.5G

64

768GB

Capitolul 4

Arhitectura x86

Capitolul 4

x86 registre pe 32 bii


Registre de 32 bii pot fifolosite
Pe 32 bii (EAX, EBX, ECX, EDX)
Pe 16 bii (AX, BX, CX, DX)
Pe 8 bit bii (AH, AL, BH, BL, CH, CL, DH, DL)

Unele registre au utilizri speciale


ECX este numrator pentru instruciunea loop

Capitolul 4

x86 registre pe 32 bii


Dou registre index
16 sau 32 bii
Instruciuni pe stringuri

source (SI); destination


(DI)
Pot fi folosite n scop
general

Dou registre pointer


16 sau 32-bii
Exclusiv pentru stiv

Capitolul 4

x86 registre pe 32 bii

Capitolul 4

EFLAGS (Indicatorii de stare)


CF (Carry Flag) - indicator de transport - reflecta transportul in exterior al bitului
cel mai semnificativ al rezultatului operatiilor aritmetice. Astfel, acest indicator
poate fi folosit in cazul operatiilor in dubla precizie. Valoarea CF = 1 semnifica fie
transport la adunare fie imprumut la scadere. De asemenea, indicatorul CF este
modificat si de instructiunile de deplasare si rotatie.
PF (Parity Flag) - indicator de paritate - este 1 daca rezultatul are paritate para
(contine un numar par de biti 1). Acest indicator este folosit de instructiunile de
aritmetica zecimala.
AF (Auxiliary Carry Flag) - indicator de transport auxiliar - este 1 daca a fost
transport de la jumatatea de octet inferioara la jumatatea de octate superioara
(de la bitul 3 la bitul 4). Acest indicator este folosit de instructiunile de aritmetica
zecimala.
ZF (Zero Flag) - indicatorul de zero - este 1 daca rezultatul operatiei a fost zero.
SF (Sign Flag) - indicatorul de semn - este 1 daca cel mai semnificativ bit al
rezultatului (MSb) este 1, adica in reprezentarea numerelor in complement fata
de 2 (C2) rezultatul este negativ (are semn -).
OF (Overflow Flag) - indicatorul de depasire aritmetica (a gamei de valori posibil
de reprezentat) - este 1 daca dimensiunea rezultatului depaseste capacitatea
locatiei de destinatie si a fost pierdut un bit (indica la valorile cu semn faptul ca se
"altereaza" semnul).

Capitolul 4

C2

EFLAGS(Indicatorii de control)
DF (Direction Flag) este utilizat de instruciunile pe iruri i
specific direcia de parcurgere a acestora:
0 irurile se parcurg de la adrese mici spre adrese mari;
1 irurile sunt parcurse invers.

IF (Interrupt Flag) acest indicator controleaz acceptarea


semnalelor de ntrerupere extern. Dac IF = 1 este activat sistemul
de ntreruperi, adic sunt acceptate semnale de ntrerupere
extern (mascabile, pe linia INTR); altfel, acestea sunt ignorate.
Indicatorul nu are influen asupra semnalului de ntrerupere
nemascabil NMI.
TF (Trace Flag) este utilizat pentru controlul execuiei
instruciunilor n regim pas cu pas (instruciune cu instruciune), n
scopul depanrii programelor. Dac indicatorul este 1, dup
execuia fiecrei instruciuni se va genera un semnal de
ntrerupere intern (pe nivelul 1). Evident, execuia secvenei de
tratare a acestei ntreruperi se va face cu indicatorul TF = 0.
Capitolul 4

C2

x86 registre pe 32 bii


registre de control
EIP
Instruction pointer (instruciunea curent)

EFLAGS
Status flags
Se actualizeaz dup operaii aritmetice/logice
Direction flag
Forward/backward direcia copierii
System flags
IF : activare intreruperi
TF : Trap flag (pentru debugging)

Capitolul 4

10

x86 registre pe 32 bii


Registre segment
16 bii
Memoria segmentat
Coninut distinct
Code
Data
Stack

Capitolul 4

11

Modurile 86
Toate procesoarele x86 au dou moduri importante
Modul real
Adrese i registre pe 16 bii
Memorie 1MB
640K should be enough for everyone
Folosit dup reset (grub)

Modul protejat

Capitolul 4

Registre de 32 bii
Segmentare i paginare
Protecia kernelului i a proceselor
Folosit de Linux, Windows

12

Modul Protejat
Segmentarea&paginarea = translatare adrese 32 bii
Segmentarea: adrese logice adrese lineare
Paginarea: adrese lineare adrese fizice

Fr paginare
adresa linear = adresa fizic

(cea din program)

Capitolul 4

13

Segmentarea n modul protejat


Adresa logic

Capitolul 4

14

Segmentare & paginare


adrese n proces

Capitolul 4

https://www.cs.rutgers.edu/~pxk/416/notes/10-paging.html

15

Imaginea unui proces n memorie

Adrese logice
(n program)
Capitolul 4

http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory/

16

Modul protejat
Parte vizibil
Instruciuni care ncarc selectoarele de segment
mov, pop, lds, les, lss, lgs, lfs

Invizibil
ncrcat automatic din GDT, LDT, IDT

Capitolul 4

17

Adresarea memoriei
calculul adresei logice
Registru
segment

:[

Adresa de segment

Capitolul 4

Registru de
baza +

Registru
+
index

Deplasament
] ]

Adresa de offset

18

Adresarea memoriei

mov eax, [mybuffer + ebx + esi*4 + 9]


; un dword
mov ebx, mybuffer
; adresa lui mybuffer, deci valoare imediat

Capitolul 4

19

Adresarea memoriei

Capitolul 4

20

Procesarea ntreruperilor
De citit:
Capitol 14,
fr 14.3

Capitolul 4

21

Ce sunt ntreruperile?
Intreruperile altereaz fluxul programului
Comportament similar apelului de procedur
Exist diferene semnificative

Intreruperea transfer controlul ctre ISR


ISR = interrupt service routine, interrupt handler

La terminarea ISR programul original continu


Intreruperile = mod efficient de a trata evenimente
neanticipate

Capitolul 4

22

Intreruperi vs. Proceduri


Intreruperi

Proceduri

Iniiate de software sau


hardware
Trateaz evenimente
anticipate i neanticipate
ISRsunt mereu n memorie
Sunt identificate cu numere
registrul EFLAGS salvat
automat

Iniiate doar de software


Trateaz evenimente
anticipate din program
Sunt ncrcate cu programul
Sunt identificate cu nume
Nu salveaz registrul EFLAGS

Capitolul 4

23

Taxonomia ntreruperilor

Capitolul 4

24

Declanarea unei ntreruperi


1. Push EFLAGS onto the stack
2. Clear IF & TF (interrupt and trap flags)

Se dezactiveaz alte ntreruperi

3. Push CS and EIP onto the stack


4. se ncarc CS:EIP din IDT (interrupt description table)

Capitolul 4

25

Interrupt Flag
IF (Interrupt flag) [dez]activeaz ntreruperile
IF==0 nu se permit ntreruperi
Instruciunea cli (clear interrupts)
La declanarea intreruperii IF devine 0
Instruciunea sti (set interrupts)

Capitolul 4

26

ntoarcerea din ISR


Ultima instruciune din ISR este iret
Aciunile executate la iret sunt:
1. Pop EIP
2. Pop CS
3. Pop EFLAGS

ISR sunt responsible pentru


A restaura TOATE registrele folosite
A nu lsa date pe stiv
Capitolul 4

27

Excepii
3 tipuri: Fault, Trap, Abort
Fault i trap sunt declanate ntre instruciuni
Abort e declanat la erori severe
Erori hardware
Valori inconsistente n sistem

Capitolul 4

28

Fault i Trap
Fault
Se declaneaz nainte de instruciunea n cauz
Se repornete instruciunea
Exemplu: page-not-found fault

Trap

Capitolul 4

Se declaneaz dup instruciunea n cauz


NU se repornete instruciunea
Exemplu: Overflow exception (intreruperea 4)
Exemplu: ntreuperi definite de utilizator

29

Numere de ntreruperi rezervate


intrerupere
0
1
2
3
4

Scop
Divide error
Single-step
Nonmaskable interrupt (MNI)
Breakpoint
Overflow

13
14
16

General protection exception


Page fault
Floating point error

Capitolul 4

30

ntreruperi rezervate
Divide Error Interrupt
Instruciunea div/idiv ctul nu ncape n destinaie

Single-Step Interrupt
Dac Trap Flag este setat (TF==1)
CPU genereaz automat int 1 dup execuia fiecrei instruciuni

folositor pentru debugger

Breakpoint Interrupt
int 3 n cod main este un octet(CCH)
Cum este folosit la debug?

Page fault Interrupt


Se acceseaz o pagin virtual care nu este nc mapat
SO aduce pagina sau termin procesul
Capitolul 4

31

ntreruperi software
Iniiate de execuia instruciunii
int interrupt-number
interrupt-number = [0 .. 255]
n Linux int 0x80 este apelul de sistem
180 servicii diferite
EAX conine numrul serviciului

Funcional similare cu apelurile de proceduri

Capitolul 4

32

Exemple int 0x80 (Linux)


Tastatura i ecranul sunt tratate ca fiiere
Fiiere standard, deja deschise
Standard input (stdin), descriptor 0
Dispozitiv asociat: tastatura
Standard output (stdout) descriptor 1
Dispozitiv asociat: terminal
Standard error (stderr) descriptor 2
Dispozitiv asociat: terminal

Capitolul 4

33

Exemple int 0x80 (Linux)


Citete din fiier
System call 3
Inputs:
EAX = 3
EBX = file descriptor
ECX = pointer to input buffer
EDX = max. # of bytes to read
Returns:
EAX = # of bytes read
Error:
EAX = error code

Capitolul 4

34

Exemple int 0x80 (Linux)


Scrie n fiier
System call 4
Inputs:
EAX = 4
EBX = file descriptor
ECX = pointer to output buffer
EDX = # of bytes to write
Returns:
EAX = # of bytes written
Error:
EAX = error code

Capitolul 4

35

Procedura putch
; primete caracterul in AL.
putch:
pusha
mov
[temp_char],AL
mov
EAX,4
mov
EBX,1
mov
ECX,temp_char
mov
EDX,1
int
0x80
popa
ret

Capitolul 4

;
;
;
;

4 = write
1 = std output (display)
pointer to char buffer
# bytes = 1

36

Procedura getstr
; primete EDI = buffer, ESI
getstr:
pusha
pushf
mov
EAX,3
mov
EBX,0
mov
ECX,EDI
mov
EDX,ESI
int
0x80
dec
EAX
mov
byte[EDI+EAX],0
popf
popa
ret

Capitolul 4

= lungimea

;
;
;
;

file read service


0 = std input (keyboard)
pointer to input buffer
input buffer size

; append NULL character

37

ntreruperi hardware
Sunt asincrone, produse de hardware
Se aplic un semnal extern procesului

ntreruperile hardware pot fi


Maskable
Non-maskable
ntreruperea rezervat 2 (NMI)

Capitolul 4

38

Cum se declaneaz ntreruperile hardware?


ntreruperile Non-maskable sunt declanate de pinul
NMI al procesorului
Procesorul rspunde ntotdeauna
Nu poate fi dezactivat prin program

ntreruperile Maskable sunt declanate de pinul


INTR al procesorului
declanate doar dac IF == 1
Mascate cu cli, activate cu sti

Capitolul 4

39

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