Sunteți pe pagina 1din 8

1.

MICROPROCESORUL Intel 8x86


1.1. Structura microprocesorului I8x86
Registre generale (8,16,32biti)
31
EAX .
AX
EBX .
BX
ECX .
CX
EDX .
DX
Registre pointer si index( 16,32biti)
31
ESP
.
SP
EBP
.
BP
ESI
.
SI
EDI
.
DI

15

8
AH
BH
CH
DH

0
AL
BL
CL
DL

15

Registre de baza pentru segmente


31
15
ECS
.
CS
EDS
.
DS
ESS
.
SS
EES
.
ES
(la Pentium exista si reg.segment FS, GS)
Registre de stare
31
15
IP
.
Adresa instructiune curenta
FLAG .NT
O D I T S Z A P C

Acumulator
Baze reg.
Counter reg.
Data reg.
0
Stack pointer
Baze pointer
Source index
Destination index
0
Code segment
Data segment
Stack segment
Extra segment
0
Instruction pointer
Flag register

Bitii din registrul Flag sunt indicatori de stare care se pozitioneaza functie de
rezultatul ultimei operatii aritmetice sau logice si se testeaza de instructiunile de salt.
Instructiunile de transfer a datelor si salt nu pozitioneaza indicatorii.
O Overflow flag
depasire capacitate registru la operatii aritmetice
D Direction flag
directia deplasarii la instr. pe siruri de caractere( d=0 spre dreapta)
I Interupt enableflag intreruperi admise
T Trap flag
S Sign flag
indica semnul rezultatului (S=0 pozitiv, S=1 negativ)
Z Zero flag
indica rezultat zero (Z=1)
A Auxiliar carry
Transport intermediar din rangul 4 ( A=1)
P - Parity flag
Numar de biti par in rezultat (P=1)
C Carry flag
Transport din rangul cel mai semnificativ (C=1)
NT Nested task
Pentru control task-uri

1.2. Segmentarea programelor


Programele trebuie sa fie modulare si relocatabile - sa poata fi incarcate oriunde in
memorie si sa poata rula din acea zona.
Modulele vor cuprinde informatii de acelasi tip rezultate din compilarea programelor.
Un segment poate cuprinde mai multe module asamblate de Link-Editor.
Un program poate cuprinde mai multe segmente. Exista 4 tipuri de segmente :
segment de cod ce contine numai instructiuni de program cu adrese relative la
inceputul segmentului, bazat cu registrul de segment CS;
segment de date ce contine numai date din program, bazat cu registrul DS ;
segment de date comune pentru mai multe segmente, bazat cu registrul ES ;
segment de stiva ce contine datele gestionate ca stive, bazat cu registrul SS ;
Implicit adresele datelor din program se bazeaza cu reg.DS, adresele de salt cu reg.CS si
adresele de stiva indicate de SP (Stack Pointer) cu reg.SS.
Structura unui program relocatabil format din segmente
CS=1000

Segment de cod
000
JMP CS :250

-salt la adresa 250 din seg.


de cod plasat la adresa
1000 indicata de CS
(adresa absoluta 1250)

250
MOV AX,DS :[150]
MOV BX,ES :[40]
Segment date locale
DS=2000

-incarca z din seg. de date


bazat cu DS de la adr. 150
-incarca x de la adr.40 din
seg.Extern bazat cu ES

000
- adresa absoluta
2000+150=2150

150
Z=350
Segment date extern (comune)
ES=5000

000
40

SS=7500

X=333

- adresa absoluta
5000+40=5040

Segment de stiva
..
.

Contine toate stivele


folosite in program

Calculul adresei fizice


15

Cod
instr.

Offset Adresa
(Deplasament)
0

15

CS

0
Adresa relativa in
segment

Adresa inceput segment

0000
0

19

Adresa de memorie fizica


1.3. Moduri de adresare
La microprocesorul Ix86 poate exista o singura adresa de memorie in instructiune.
Un operand este in registru iar celalalt in memorie sau alt registru.
Adresarea registru registru
ADD AX,DX
se aduna continutul lui DX la AX pe 16 biti
ADD BH,CL
se aduna continutul lui CL la BH pe 8 biti
COD instr

Reg.sursa, Reg.destinatie

- codul poate fi pe 1 sau 2 octeti

Adresarea imediata - un operand este in instructiune


ADD AX,5000
se aduna 5000 la AX
ADD SI,25
se aduna 25 la registrul SI
COD instr

5000 (valoare)

Adresarea directa
ADD AX,alfa
ADD AX,[500]
COD instr

- valoarea operand poate fi pe 1, 2 sau 4 octeti

- un operand este in memorie


continutul lui alfa se aduna la AX (bazat cu DS)
continutul adresei 500 se aduna la AX

Adresa relativa in segment

- adresa poate fi pe 1, 2 sau 4 octeti


- codul poate fi pe 1 sau 2 octeti

Adresarea indirecta
ADD AX,[BX]
continutul adresei indicate de BX se aduna la AX (bazat cu DS)
COD instr.

BX
Adresa relativa operand

RAM
Operand2

Adresarea indexata
ADD AX,X[SI]
din tabloul X se ia elementul indicat de SI (adr.in tablou)
COD instr.

Adresa relativa tablou X

Adresarea cu baza
ADD AX,[BX+5]
COD instr.

Tablou X
X1
X2 X3

+SI
Xi

BX indica o zona de date, iar 5 este adr.relativa in zona

BX
Adresa relativa zona

Zona de date

+5
Oper2

Adresarea cu baza si index


ADD AX,[BX+SI+5]
BX indica o zona, iar 5 este adr.rel.a unui tablou si SI
pozitia elementului in tablou(nu indice)
BX
+5 Tablou X SI
COD instr.
Adresa relativa zona
X1 X2
Xi

1.4. Formatul instructiunilor


Informatiile din memoria RAM pot fi:
- date in binar, in virgule flotanta, in zecimal si pe diferite lungimi
- instructiuni de diferite lungimi
Instructiunile care se folosesc determina cum se interpreteaza acele informatii.
In limbaj de asamblare nu exista tipuri de date declarate si se poate da doar lungimea.
Daca o variabile in VF se adreseaza cu o instructiune binara valoarea este imprevizibila.
Daca registrul IP (Instruction Pointer) se incarca cu o adresa de date, datele se
interpreteaza ca intructiune si se pot face distrugeri in program. La incarcarea unui
program se sterge toata memoria pentru a nu ramane reziduri din vechile programme.
Datele pot fi : locale in segment specificate prin adresa relative la care se adauga [DS]
comune mai multor segmente (ext) spec.prin adr.rel. si se adauga [ES]
temporare care se pastreaza in stive in segmentul de stiva adr. [SP]+ [SS]
Setul de instructiuni al calculatorului cuprinde:
instructiuni de transfer, aritmetice si logice realizate in dispozitivul aritmetic;
instructiuni pentru prelucrare siruri de caractere (texte);
instructiuni de control a programului (salturi conditionate);
instructiuni de calcul in Virgula Flotanta (VF) realizate in coprocessor;
instructiuni de calcul in zecimal realizate in coprocessor
Pentium si I486 cuprind procesor si coprocesor care lucreaza in paralel. Coprocesorul
nu are mecanism de calcul al adresei si salt, care se realizeaza de processor.

Structura instructiunilor I8x86


COD

- instructiune pe un octet

MOV AL,BL

COD

adr.rel

-instr. pe 3 octeti, adresare directa ADD BX,alfa

COD

operand2

- instr. pe 2 sau 3 octeti instr. imediata MOV SI,55

COD

adr.rel

operand2

COD

Mod r/m

- instr.pe 4 sau 5 oct MOV X,5200

deplasament operand2 - instr 6 octeti

MOV X[SI],5230

In toate cazurile de mai sus implicit la adresa relativa se aduna continutul reg. DS.
Daca se doreste sa se specifice al registru segment decat cel implicit DS sau SS pentru
stiva, se adauga in fata un octet suplimentar care specifica reg.segment explicit.
MOV AX,ES : [BX+5000] operandul se ia din segmentul indicat de ES
Codul instructiei este pe 1 octet si are structura de baza :
i Cod instr

d w i=1 instructiune imediata


d=1 rezultatul in registru d=0 rezultatul in memorie
w=1 - operand pe 16biti w=0 - operand pe 8 biti

Instructiunile care fac referire la memorie contin o extensie de cod notata Mod r/m care
specifica modul de adresare folosit (reg-reg, bazata, indirecta,indexata) si are structura:
MOD r/m

Mod

reg
r/m

- 2cb modul de adresare folosit


00 deplasament 0
MOV AX,[BX]
01 deplasament pe 8cb
MOV DX,[BX+25]
10 deplasament pe 16cb
MOV DX,[BX+2500]
11 adresare reg- reg si r/m pe 3cb specifica reg destinatie
- 3cb codul registrului sursa utilizat
- 3cb indica modul de adresare
000
adresarea este data de [BX+SI+depl]
001
adresarea este data de [BX+DI+depl]
010
adresarea este data de [BP+SI+depl]
011
adresarea este data de [BP+DI+depl]
100
adresarea este data de [SI+depl]
101
adresarea este data de [DI+depl]
110
adresarea este data de [BP+depl]
111
adresarea este data de [BP+DI+depl]

Combinatia Mod=00 si r/m=110 indica o adresare directa.

6cb
COD

2cb
d w Mod

3cb
reg

3cb
r/m

8-16cb
Depl/data

8-16cb
data

Codificarea registrelor in zona reg si r/m este :


reg si r/m
000
001
010
011
100
101
110
111
PUSHA

w=1
w=0
Registre
reg. pe 16cb
reg. pe 8cb
reg pe 32cb
segment
AX
AL
EAX
ES
CX
CL
ECX
CS
DX
BL
EDX
SS
BX
DL
EBX
DS
SP
AH
ESP
FS
BP
CH
EBP
GS
SI
DH
ESI
DI
BH
EDI
salveaza toare registrele in ordinea data de codul registrului.

Pentru utilizarea registrelor pe 32 biti se introduce un octet extensie de cod si inca unul
pentru utilizarea adreselor pe 32 biti.
Pentru exercitii se va folosi programul de depanare AFD si se vor studia structurile
instructiunilor utilizate. Adresele din memorie au octetii inversati.
Specificarea lungimii operandului cand nu rezulta din reistrul folosit se specifica prin :
/B pentru un octet si /W pentru 2 octeti (word).
ADD W/[BX],50

operandul se consider ape 2 octeti

Pentru exercitii se pot folosi instructiunile de mutare, aritmetice si logice pe 1 sau 2octeti.
MOV reg_dest,reg_sursa transfer intre registre
MOV reg,[adresa]
transfer din memorie in registru (citire din memorie)
MOV [adresa],reg
transfer din registru in memorie (memorare registru)
MOV reg,valoare
incarcare imediata in registru
MOV adresa,valoare
memorare imediata in memorie
Cand se specifica adresa, ea poate fi directa, indirecta,sau/si indexata.
PUSHA
memorare toate registrele in stiva
POPA
incarcare toate registrele din stiva
ADD dest,sursa
se aduna sursa la destinatie cu un singur operand in memorie
SUB dest,sursa
se scade din destinatie sursa
AND dest,sursa
operatia logica SI intre sursa si destinatie
OR
dest,sursa
operatia logica SAU intre sursa si destinatie
XOR dest,sursa
operatia logica SAU EXCLUSIV intre sursa si destinatie

1.5. Utilizare AFD (Advanced Full screen Debuger)

Exista mai multe ferestre deplasarea cu tastele F4 sus, F8 jos,F9 stinga, F10 dreapta
In fiecare fereastra se poate modifica direct pe ecran continutul registrelor, adreselor de
memorie, a continutului celulelor de memoriei.
Schimband adresa sau reg.segment se schimba zona de memorie afisata.
Valorile din register si memorie sunt reprezentate in hexazecimal.
Fereastra din dreapta jos da continutul ASCII al locatiilor de memoriei din fereastra 2.
F4 afiseaza Help-ul programului
F1 Step executa o instructiune de program( pas de program).
F1 StepProg executa un program terminat cu INT 3 (termina un task si revine in AFD).
Fereastra CMD de comanda permite introducerea de comenzi :
D
adresa
-afiseaza in hexa si in limbaj de asamblare o zona de program.
R reg=val
initializeaza registre
M n adresa
afiseaza zona de memorie in fereastra 1 sau 2 (n=1,2)
A adresa
asambleaza un program de la adresa (>100), reg seg. CS (Exit-Ctr/Home)
G adresa
lansare un program de la adresa bazata cu CS (oprire cuCtr/Esc)
L prog
incarca un program .exe in memorie la adresa
W fis,adr,lung
scrie intr-un fisier o zona de memorie de lungime specificata
QUIT
terminare AFD si iesire in DOS sau Windows

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