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 AH BH CH DH 8 AL BL CL DL 0 Acumulator Baze register Counter register Data register

15

0 Stack pointer Baze pointer Source index Destination index

Registre de baza pentru segmente 0 15 Code segment CS Data segment DS Stack segment SS Extra segment ES (la Pentium exista si reg.segment FS, GS) Registre de stare 31 15 0 . Instruction pointer IP Adresa instructiune curenta Flag register FLAG .NT O D I T S Z A P C Biii din registrul Flag sunt indicatori de stare care se poziioneaz funcie de rezultatul ultimei operaii aritmetice sau logice si se testeaz de instruciunile de salt. Instruciunile de transfer a datelor si salt nu poziioneaz indicatorii. O Overflow flag depire capacitate registru la operaii aritmetice D Direction flag direcia deplasrii la instr. pe iruri de caractere( d=0 spre dreapta) I Interupt enableflag ntreruperi 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 Numr de bii 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 poat fi ncrcate oriunde in memorie si sa poat rula din acea zona. Modulele vor cuprinde informaii de acelai 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 conine numai instruciuni de program cu adrese relative la nceputul segmentului, bazat cu registrul de segment CS; segment de date ce conine numai date din program, bazat cu registrul DS ; segment de date comune pentru mai multe segmente, bazat cu registrul ES ; segment de stiva ce conine datele gestionate ca stive, bazat cu registrul SS ; Implicit adresele datelor din program se bazeaz 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 Segment de cod CS=1000 000 JMP CS :250 -salt la adresa 250 din seg. de cod plasat la adresa 1000 indicata de CS (adresa absoluta 1250) - incarc z din seg. de date bazat cu DS de la adr. 150 - incarc x de la adr.40 din seg.Extern bazat cu ES

250 MOV AX,DS :[150]

MOV BX,ES :[40] Segment date locale DS=2000 000

150 Z=350 Segment date extern (comune) ES=5000 000 40 X=333 Segment de stiva .. .

- adresa absoluta 2000+150=2150

- adresa absoluta 5000+40=5040

SS=7500

Conine toate stivele folosite in program

Calculul adresei fizice


15

Cod instr.
15

Offset Adresa (Deplasament)

0 Adresa relativa in segment 0

+ =

CS

Adresa inceput segment


19

0000
0

Adresa de memorie fizica 1.3. Moduri de adresare


La microprocesorul Ix86 poate exista o singura adresa de memorie in instruciune (exceptnd instruciunile pe siruri de caractere). Un operand este n registru iar celalalt n memorie sau alt registru. Adresarea registru - registru ADD AX,DX se aduna coninutul lui DX la AX pe 16 biti ADD BH,CL se aduna coninutul 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 instruciune ADD AX,5000 se aduna 5000 la AX ADD SI,25 se aduna 25 la registrul SI COD instr 5000 (valoare) - valoarea operand poate fi pe 1, 2 sau 4 octeti

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

- un operand este in memorie coninutul lui alfa se aduna la AX (bazat cu DS) coninutul adresei 500 se aduna la AX - adresa poate fi pe 1, 2 sau 4 octeti - codul poate fi pe 1 sau 2 octeti

Adresa relativa in segment

Adresarea indirecta ADD AX,[BX] continutul adresei indicate de BX se aduna la AX (bazat cu DS) BX Adresa relativa operand RAM Operand2

COD instr.

Adresarea indexata ADD AX,X[SI] din tabloul X se ia elementul indicat de SI (adr.in tablou) Tablou X X1 X2 X3 +SI Xi

COD instr.

Adresa relativa tablou X

Adresarea cu baza ADD AX,[BX+5]

BX indica o zona de date, iar 5 este adresa relativa in zon Zona de date +5 Oper2

COD instr.

BX Adresa relativa zona

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 Xi X1 X2

1.4. Formatul instruciunilor


Informaiile din memoria RAM pot fi: - date in binar, in virgule flotanta, in zecimal si pe diferite lungimi - instruciuni de diferite lungimi Instruciunile care se folosesc determina cum se interpreteaz acele informaii. In limbaj de asamblare nu exista tipuri de date declarate si se poate da doar lungimea. Daca o variabile in VF se adreseaz cu o instruciune binara valoarea este imprevizibila. Daca registrul IP (Instruction Pointer) se ncrca cu o adresa de date, datele se interpreteaz ca o instruciune si se pot face distrugeri in program. La ncrcarea unui program se terge toata memoria pentru a nu rmne reziduuri din vechile programe. 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 pstreaz in stive in segmentul de stiva adr. [SP]+ [SS] Setul de instruciuni al calculatorului cuprinde: instruciuni de transfer, aritmetice si logice realizate in dispozitivul aritmetic; instruciuni pentru prelucrare iruri de caractere (texte); instruciuni de control a programului (salturi condiionate instruciuni de calcul in Virgula Flotanta (VF) realizate in coprocesor; instruciuni de calcul in zecimal realizate in coprocesor Pentium si I486 cuprind procesor si coprocesor care lucreaz in paralel. Coprocesorul nu are mecanism de calcul al adresei si salt, care se realizeaz de procesor.

Structura instruciunilor I8x86 COD COD COD COD COD - instruciune pe un octet adr.rel operand2 adr.rel Mod r/m MOV AL,BL

-instr. pe 3 octei, adresare directa ADD BX,alfa - instr. pe 2 sau 3 octei instr. imediata MOV SI,55 operand2 - instr. pe 4 sau 5 oct MOV X,5200 MOV X[SI],5230

deplasament operand2 - instr 6 octei

In toate cazurile de mai sus implicit la adresa relativa se aduna coninutul registrului DS. Daca se dorete sa se specifice al registru segment dect cel implicit DS sau SS pentru stiva, se adaug in fata un octet suplimentar care specifica registrul 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 instruciune imediata d=1 rezultatul in registru d=0 rezultatul in memorie w=1 - operand pe 16biti w=0 - operand pe 8 bii

Instruciunile care fac referire la memorie conin o extensie de cod notata Mod r/m care specifica modul de adresare folosit (reg-reg, bazata, indirect, indexat) si are structura: MOD r/m Mod - 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 destinaie reg - 3cb codul registrului sursa utilizat r/m - 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 [BX+depl]

Combinaia 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 salveaz toate registrele in ordinea data de codul registrului.

Pentru utilizarea registrelor pe 32 bii se introduce un octet extensie de cod si nc unul pentru utilizarea adreselor pe 32 bii. Pentru exerciii se va folosi programul de depanare AFD si se vor studia structurile instruciunilor utilizate. Adresele din memorie au octeii inversai. Specificarea lungimii operandului cnd nu rezulta din registrul folosit se specifica prin : /B pentru un octet si /W pentru 2 octei (word). ADD W/[BX],50 operandul se consider pe 2 octei

Pentru exerciii se pot folosi instruciunile 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 ncrcare imediata in registru MOV adresa,valoare memorare imediata in memorie Cand se specifica adresa, ea poate fi directa, indirect, sau/si indexata. PUSHA memorare toate registrele in stiva POPA incarcare toate registrele din stiva ADD dest,sursa se aduna sursa la destinaie cu un singur operand in memorie SUB dest,sursa se scade din destinaie sursa AND dest,sursa operaia logica SI intre sursa si destinaie OR dest,sursa operaia logica SAU intre sursa si destinaie XOR dest,sursa operaia logica SAU EXCLUSIV intre sursa si destinaie

1.5. Utilizare AFD (Advanced Full screen Debuger)

Exist mai multe ferestre. Deplasarea cu tastele F4 sus, F8 jos,F9 stnga, F10 dreapta In fiecare fereastra se poate modifica direct pe ecran coninutul registrelor, adreselor de memorie, a coninutului celulelor de memoriei. Schimbnd adresa sau registrul segment se schimb zona de memorie afiat. Valorile din registre si memorie sunt reprezentate in hexazecimal. Fereastra din dreapta jos d coninutul ASCII al locaiilor de memoriei din fereastra 2. F4 afieaz Help-ul programului F1 Step executa o instruciune 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 - afieaz in hexa i in limbaj de asamblare o zona de program. R reg=val iniializeaz registre M n adresa afieaz zona de memorie n fereastra 1 sau 2 (n=1,2) A adresa asambleaz un program de la adresa (>100), reg segment fiind CS. Terminarea programului de asamblat se face cu Ctr/Home) G adresa lansare un program de la adresa bazata cu CS (oprire cu Ctr/Esc) G adr1,adr2 Lanseaya programul de la adresa adr1 si opreste la adr2

L prog,adresa ncarc un program .exe in memorie la adresa )implicit 100H W fis,adr,lung scrie intr-un fiier o zona de memorie de lungime specificata MOde ALTernate ON seteaz un mode alternativ ecran, care deschide o fereastra de afisare a mesajelor de dialog (shadow screen), care se activeaz cu F6 din fereastra principal. QUIT terminare AFD si ieire in DOS sau Windows

Tastnd ALT/ENTER se extinde afiajul din AFD pe tot ecranul (Full Screen).