Creeaza.com - informatii profesionale despre


Evidentiem nevoile sociale din educatie - Referate profesionale unice
Acasa » scoala » informatica » calculatoare
INSTRUCTIUNI DE TRANSFER AL DATELOR PENTRU MICROPROCESOARELE INTEL

INSTRUCTIUNI DE TRANSFER AL DATELOR PENTRU MICROPROCESOARELE INTEL


INSTRUCTIUNI DE TRANSFER AL DATELOR PENTRU MICROPROCESOARELE INTEL

1. Scopul lucrarii

Scopul prezentei lucrari este familiarizarea cu operatiile in binar, modurile de adresare, cu instructiunile de transfer de date elementare si structurate specifice microprocesoa­relor Intel functionand "in modul real" (particularizand pentru 8086), precum si prezentarea unor directive de asamblare.

Tipuri de reprezentari binare

Intregi cu semn, de 8 sau 16 biti; numerele negative sunt reprezentate in complement fata de 2(c'2); cand se utilizeaza coprocesorul matematic, lor li se adauga intregi cu semn pe 32 sau 64 de biti



Exemplu: valoarea unui intreg reprezentat pe N biti in c'2 este:

(1)

Domeniul in care poate lua valori este: -(2 N-1 ) ÷ 2 N-1 -1

Tabelul L1.1 Conventii de reprezetare binara in complement fata de 2 a numerelor pe 8 biti:

Reprezentare binara

Valoare

Observatii

Cea mai mare valoare reprezentabila

Primul 0 indica numar pozitiv

Cea mai mare valoare negativa

Cea mai mica valoare negativa

Intregi fara semn de 8 sau 16 biti;

Unde bi - bitul din pozitia i.

Definitii:

Pointer: numere pe 32 de biti indicand o adresa; ele sunt compuse din doua entitati pe 16 biti: un selector care defineste numarul segmentului si un offset indicand deplasamantul in cadrul segmentului;

Siruri: secvente de octeti cu lungimea de la 1 octet la 64Ko;

Octeti ASCII: octeti care contin codul ASCII al unui caracter;

Numere in format BCD

BCD neimpachetat: octeti reprezentand o singura cifra zecimala;

BCD impachetat: octeti in care se memoreaza doua cifre zecimale, fiecare in cate un spatiu de 4 biti.

Exemplu: Reprezentarea numarului 5291 in

BCD neimpachetat

BCD impachetat

2. Memoriu de instructiuni

Conventii:

s: sursa;

d: destinatie;

AL|AX: acumulatorul implicit de 8 sau de 16 biti;

mem: continutul unei locatii de memorie sau continutul a doua locatii de memorie succesive, adresate cu unul dintre modurile de adresare permise pentru memoria de date, cu exceptia adresarii imediate;

mem16: continutul a doua locatii de memorie succesive adresate cu unul dintre modurile de adresare permise pentru memoria de date, cu exceptia adresarii imediate;

mem32: continutul a patru locatii de memorie succesive adresate cu unul dintre modurile de adresare permise pentru memoria de date, cu exceptia adresarii imediate;

r | ri | rj: un registru oarecare de 8 sau de 16 biti, exceptand registrele segment;

r8: un registru de 8 biti;

r16: un registru de 16 biti, exceptand registrele segment;

rs: un registru segment (CS, SS, DS, ES);

data: un operand de 8 sau 16 biti care face parte din formatul instructiunii (adresare imediata);

data8: un operand de 8 biti care face parte din formatul instructiunii (adresare imediata);

data16 un operand de 16 biti care face parte din formatul instructiunii (adresare imediata);

disp8: deplasament pe 8 biti (face parte din formatul instructiunii);

disp16: deplasament pe 16 biti (face parte din formatul instructiunii);

adr: o adresa completa (pe 16 biti);

adr8: o adresa scurta (pe 8 biti);

adr32: o adresa logica exprimata pe patru octeti succesivi;

port adresa (numarul de ordine) unui port de intrare/iesire, pe 8 biti;

AE: adresa efectiva.

Pentru fanioane:

x : fanionul se schimba in conformitate cu rezultatul operatiunii;

1 : fanionul este setat neconditionat;

: fanionul este resetat neconditionat;

? : fanionul este afectat impredictibil;

blanc: fanionul nu este afectat.

Pentru calculul numarului de stari :

cAE - timpul de calcul al adresei efective, si anume

- adresare directa: AE=disp8|disp16 - 6 stari;

- adresare indexata: AE=(SI)|(DI)+ disp8|disp16 - 9 stari;

- adresare indirecta implicita:

AE=(SI)|(DI) - 5 stari;

- adresare relativa la baza directa, fara deplasament:

AE=(BX) - 5 stari;

- adresare relativa la baza directa, cu deplasament:

AE=(BX)+disp8|disp16 - 9 stari;

- adresare relativa la baza indexata:

AE=(BX)+(SI)|(DI)+disp8|disp16 - 12 stari;

- adresare relativa la baza implicita:

AE=(BX)+(SI)|(DI) - 8 stari;

- adresare in stiva directa, fara deplasament:

AE=(BP) - 5 stari;

- adresare in stiva directa, cu deplasament:

AE=(BP)+disp8|disp16 - 9 stari;

- adresare in stiva indexata:

AE=(BP)+(SI)|(DI)+disp8|disp16 - 12 stari;

- adresare in stiva implicita:

AE=(BP)+(SI)|(DI) - 8 stari;

- pentru redirectionarea segmentului se mai adauga 2 stari.

Elemente ale limbajului de asamblare

Programul sursa este format dintr-un numar de linii, care pot fi:

  • Directive de asamblare
  • Etichete si declaratii de simboluri
  • Comentarii
  • Linii de instructiuni

O linie de instructiune a programului sursa are urmatoarea structura:

_Mnemonic__Operand1{,_Operand2}_

Comentariul este optional si trebuie precedat de semnul ";" . Tot ceea ce urmeaza pe o linie dupa acest semn este ignorat de asmblor.

Instructiuni de transfer de date

Instructiunile de transfer realizeaza transferul datelor intre registre, intre registre si memorie, intre registre si stiva. Transferurile se pot executa intre registre de aceeasi lungime, iar la transferul intre registre si memorie lungimea este data de registrul folosit.

Instructiunile de mutare nu modifica indicatorii de conditie. Toate transferurile se pot face pe 1,2,4 sau 8 octeti.

MOV  d, s - unde ca argumente putem avea combinatiile:

Copiaza sursa

OF DF IF TF SF ZF AF PF CF

MOV d,s

la destinatie

Descrierea formala a semanticii, in general: (d) (s)

reg,reg - transfer intre registre pe 1, 2, 4 octeti

reg,const - incarcare imediata constanta intr-un registru

mem, const - incarcare imediata constanta intr-o adresa de memorie

reg,mem - incarcare continut adresa de memorie intr-un registru

mem,reg - memorare continut registru intr-o locatie de memorie

mem,mem - !! este o combinatie interzisa fiindca nu pot fi doua adrese in instructiune

Operanzi

Exemple

Descrierea formala a semanticii

r, data

MOV BX,ALFA

(BX) ALFA

Transfer imediat a unei date in registru

mem, data

MOV [BP+DI],55H

((SS)0H + (BP) + (DI)) 55H

Transfer imediat a unei date intr-o adresa de memorie

AL|AX, mem

MOV AX,[SI]

(AL) ((DS) 0H + (SI))

(AH) ((DS) 0H + (SI) + 1)

Transfer continut adresa de memorie intr-un registru acumulador de 8,16 biti

mem, AL|AX

MOV [BX+SI+10H],AL

((DS) 0H + (BX) + (SI) + 10H) (AL)


Memorare continut registru acumulator (pe 8 sau 16 biti) intr-o locatie de memorie

r1, r2

MOV AX,SP

(AX) (SP)

Transfer intre doua registre

r, mem

MOV BH,[BX+1000H]

(BH) ((DS)0H + (BX) + 1000H)

Memorare continut adresa de memorie in registru

mem, r

MOV [2000H],DL

((DS)0H + 2000H) (DL)

Memorare continut registru in memorie

rs*, r16

MOV ES,CX

(ES) (CX)

Transfer date intre register pe 2 octeti ti registru segment

rs*, mem16

MOV SS,[DI]

(SS) ((DS) 0H +(DI)+1) ((DS) 0H + (DI))

Transfer continut memorie pe 2 octeti intr-un registru pe 2 octeti

r16, rs

MOV CX,CS

(CX) (CS)

Transfer continut registru segment intr-un registru pe 2 octeti

mem16, rs

MOV [SI],DS

((DS) 0H +(SI)+1) ((DS) 0H+(SI)) (DS)

Transfer continut registru segment in memorie pe 2 octeti

* registrul segment nu poate fi CS

Adresarea stivei (PUSH si POP)

Stiva este o zona de memorie temporara care este adresata prin registrul SP care indica elementul din varful stivei (top). In stiva se ia din varful stivei si apoi se incrementeaza SP iar cand se pune in stiva se decrementeaza SP.

Pentru lucru cu stiva sunt dedicate doua register SP si SS. In SS se indica segmental de memorie unde este definita stiva iar SP pointeaza pe adresa bezei stivei unde a fost depus ultimul octet. Pentru a incarca stiva cu o valoare reprezentata pe doi octeti, cel mai semnificativ octet este salvat la adresa mai mare iar celalalt la cea mai mica. In acest caz SP se va decrementa cu 2 deoarece stiva creste in jos.

Transfera in stiva

OF DF IF TF SF ZF AF PF CF

PUSH s

de la sursa

Descrierea formala a semanticii, in general: (SP) (SP) - 2

((SS)0H + (SP) + 1) (s)h

((SS)0H + (SP)) (s)l

Exemplu:

Push AX; AX=5674

Push EAX; EAX' 56741EFF

Adresa memorie de date

Continut stiva

BP

0400

04000

03FF

56

03FE

74

03FE (daca se lucreaza cu AX)

03FD

1E

03FC

FF

03FC (daca se lucreaza cu EAX)

....

0000

STIVA

0

PUSH BX SP=SP-2 si BX [SP]

POP BX [SP] BX si SP=SP+2

SP

BX

Top varful stivei

Alpha

N

Y

Operanzi

Exemple

Descrierea formala a semanticii

r16

PUSH BP

(SP) (SP) - 2

((SS)0H+(SP)+1) ((SS)0H+(SP)) (BP)

Salvare continut registru reprezentat pe 2 octeti in stiva

mem16

PUSH [DI+100H]

(SP) (SP) - 2

((SS)0H+(SP)+1) ((DS)0H +(DI) +101H)

((SS) 0H + (SP)) ((DS) 0H +(DI) +100H)

Salvare continut memorie in stiva

rs

PUSH SS

(SP) (SP) - 2

((SS)0H+(SP)+1) ((SS)0H+(SP)) (SS)

Salvare continut registu segmet in stiva

Transfera in stiva

OF DF IF TF SF ZF AF PF CF

PUSHF

registrul de

fanioane

Descrierea formala a semanticii: (SP) (SP) - 2

((SS)0H + (SP) + 1) (F)h

((SS)0H + (SP)) (F)l

Instructiunea POP

Realizeaza operatia inversa instructiunii Push. Pentru extragerea datelor din stiva salvate cu ajutorul instructiunii Push, se utilizeaza instructinea Pop in sens invers depunerii lor. Un este posibila adresarea imediata a instructiunii Pop.

Transfera din stiva

OF DF IF TF SF ZF AF PF CF

POP d

la destinatie

Descrierea formala a semanticii, in general: (d)l ((SS)0H + (SP))

(d)h ((SS)0H + (SP) + 1)

(SP) (SP) + 2

Operanzi

Exemple

Descrierea formala a semanticii

r16

POP CX

(CL) ((SS)0H + (SP))

(CH) ((SS)0H + (SP) + 1)

(SP) (SP) + 2

Salveaza in registru de 2 octeti continutul stivei de la adresa indicata de SP

mem16

POP [F0F0H]

((DS) 0H +F0F0H) ((SS) 0H + (SP))

((DS) 0H +F0F1H) ((SS) 0H + (SP) + 1)

(SP) (SP) + 2

Salveaza in memorie continutul stivei (pe 2 octeti)

rs (nu CS)

POP SS

(SS)((SS)0H+(SP)+1) ((SS)0H+(SP))

(SP) (SP) + 2

Salveaza in registrul segment continutul stivei

Transfera din stiva

OF DF IF TF SF ZF AF PF CF

POPF

registrul de

x x x x x x x x x

fanioane

Descrierea formala a semanticii: (F)l ((SS)0H + (SP))

(F)h ((SS)0H + (SP) + 1)

(SP) (SP) + 2

Instructiuni de transfer speciale

XCHG- se poate schimba continutul unui registru cu al altui registru sau cu o locatie de memorie. Un este posibila schimbari intre doua locatii de meorie si nici utilizarea registrelor segment.

Transfera sursa la

OF DF IF TF SF ZF AF PF CF

XCHG d,s

destinatie si

destinatia la sursa

Descrierea formala a semanticii, in general: (d) (s)

Operanzi

Exemple

Descrierea formala a semanticii

r16

XCHG DX

XCHG AX este NOP

(AX) (DX)

(AX) (AX) s NOP

Schimbari intre registre de 2 octeti

r1, r2

XCHG CH,CL

(CH) (CL)

Schimbari intre acelasi registru partea high cu partea low

r, mem

XCHG BX,[BX+DI]

(BL) ((DS)0H + (BX) + (DI))

(BH) ((DS)0H + (BX) + (DI) + 1)

Schimbari intre memorie si registre

Instructiunea XLAT

Translarea unor coduri hexa in alte coduri hexa.Transalrea se realizeaza utilizando o tabela de coduri.Adresa de inceput a tabelei trebuie depusa in BX iar primul cod in AL. Aceasta instructiune nu are operand si lucreza doar cu registrele AL si BX. Ca aplicatie se poate utiliza instructiunea pentru conversia codului BCD in codul BCD 7 segmente.

OF DF IF TF SF ZF AF PF CF

XLAT

Translateaza

Descrierea formala a semanticii: (AL) ((DS)0H + (BX) + (AL))

Instructiunile LAHF si SAHF

Instructiunile LAHF si SAHF sunt folosite pentru a prelua indicatorii de conditie din coprocesor si ai testa in procesor folosind instructiunile de salt conditionat JZ. In coprocesor nu exista instructiuni de salt.

Incarca(AH)cu octetul

OF DF IF TF SF ZF AF PF CF

LAHF

inferior al

registrului F

Descrierea formala a semanticii: (AH) (F)l

Incarca octetul in-

OF DF IF TF SF ZF AF PF CF

SAHF

ferior al registru­-

x x x x x

lui F cu (AH)

Descrierea formala a semanticii: (F)l (AH)

Instructiunile IN si OUT

Lucreaza cu porturile. Transfera date de la acumulator la port sau invers.

Transferul unui

OF DF IF TF SF ZF AF PF CF

IN d,s

octet sau cuvant de

la un port in acumulator

Descrierea formala a semanticii, in general: (AL) | (AX) (s)

Operanzi

Exemple

Descrierea formala a semanticii

AL|AX, port

IN  AL,0FH

(AL) (0FH)

AL|AX, DX

IN  AX,DX

(AX) ((DX) + 1) ((DX))

Transferul unui

OF DF IF TF SF ZF AF PF CF

OUT d,s

octet sau cuvant

din acumulator la un port

Descrierea formala a semanticii, in general: (d) (AL) | (AX)

Operanzi

Exemple

Descrierea formala a semanticii

port, AL|AX

OUT 10H,AL

(10H) (AL)

DX, AL|AX

OUT DX,AX

((DX) + 1) ((DX)) (AX)

Incarcarea adresei effective si a registrelor de segment

Forma generala:

Lxx reg,mem

xx: reprezinta unul dintre registrele DS, SS, ES

reg: registre generale

mem: o adresare a memoriei

A.    Instructiunea LDS

Se incarca registrul DS cu adresa de segment si cel din operand cu offsetul furnizat de al doilea operand. Cu instructiunea LDS se poate accesa o memorie mai mare de 1Mo.

Incarca un registru

OF DF IF TF SF ZF AF PF CF

LDS d,s

de 16 biti si reg.

segment de date

Descrierea formala a semanticii, in general: (r16) (mem32)l

(DS) (mem32)h

Operanzi

Exemple

Descrierea formala a semanticii

r16, mem32

LDS SI,[10H]

(SI) ((DS) 0H + 11H) ((DS) 0H + 10H)

(DS) ((DS) 0H+13H) ((DS) 0H + 12H)

B.         Instructiunea LES

Este specifica numai procesoarelor pe 32 biti, incarca registrele segment cu date pe 2 octeti, iar cei din instructiune cu date pe 2 sau 4 octeti, functie de tipul registrului.

Incarca un registru

OF DF IF TF SF ZF AF PF CF

LES d,s

de 16 biti si

registrul ES

Descrierea formala a semanticii, in general: (r16) (mem32)l

(ES) (mem32)h

Operanzi

Exemple

Descrierea formala a semanticii

r16, mem32

LES DI,[DI]

(DI) ((DS)0H +(DI) +1) ((DS)0H +(DI))

(ES) ((DS)0H+(DI)+3)((DS)0H+(DI)+2)

C.    Instructiunea LEA

Prin aceasta instructiune incarcarea adresei efective se realizeaza prin salvarea intr-un registru de 16 biti a offsetului specificat de operand.

Incarca un registru

OF DF IF TF SF ZF AF PF CF

LEA d,s

de 16 biti cu o

adresa efectiva

Descrierea formala a semanticii, in general: (r16) AE a locatiei memoriei

Operanzi

Exemple

Descrierea formala a semanticii

r16, mem16

LEA BX,[BX+DI+10H]

(BX) (BX) + (DI) + 10H

adresa fizica: AF = (DS) 0H +(BX) +(DI) +10H

adresa efectiva: AE = (BX) +(DI) +10H

Nota: Singurele instructiuni care afecteaza fanioanele sunt POPF si LAHF.

Ex: LEA AX,[BX+SI+15] - adresa operandului este memorata in AX

Este echivalenta cu: MOV AX,offset adresa offset = adresa relativa calculata

La coprocesor nu exista dispozitiv de calcul al adresei si se poate folosi LEA

LDS reg16,dwpointer - reg16=offset adresa DS= adresa segment

LES reg16,dwpointer

Incarca registrul segment DS sau ES si registrul general de la o adresa de 4 octeti unde se gaseste adresa relativa a operandului si adresa segmentului din care face parte. Se foloseste la comunicarea intre segmente pentru pregatirea registrelor de segment.

dwpointer

ofsset Adresa

Adresa segment

LDS SI,dwpointer

SI

DS sauES

3. Directive de asamblare si cuvinte rezervate in EMU8086

Definitie

Directivele sunt de fapt pseudoinstructiuni care transmit informatii asamblorului privind modalitatile de asamblare.

Forma generala a unei directive:

Nume Directiva Lista date

. ORG "ASSIGN LOCATION COUNTER" DIRECTIVA Sintaxa: ORG adr.

Efect: instructiunea urmatoare va fi plasata la adresa adr.

. DB "DEFINE BYTE" DIRECTIVA

Sintaxa: [simbol] DB data,[data,[data,..]].

Efect: rezerva spatiu, sub forma de byte, in memorie pentru date. Simbol, daca exista, va avea ca valoare adresa la care a fost plasat primul byte.

DW "DEFINE WORD" DIRECTIVA

Sintaxa: [simbol] DW data,[data,[data,.]].

Efect: rezerva spatiu, sub forma de word, in memorie pentru date. Simbol, daca exista, va avea ca valoare adresa la care a fost plasat primul word.

EQU "CREATE SYMBOL" DIRECTIVA

Sintaxa: simbol EQU expresie

Efect: asamblorul atribuie lui simbol valoarea obtinuta prin evaluarea expresiei. Expresie poate fi o data, sau o combinatie de data prin semnele + si -. Odata folosit EQU pentru un simbol, acest simbol nu mai poate fi modificat in cursul programului.

. OFFSET "OFFSET OF EXPRESSION" OPERATOR

Sintaxa: OFFSET simbol.

Efect: obtine adresa pentru simbol.

. BYTE PTR "CHANGE TYPE OF VARIABLE" OPERATOR

Sintaxa: BYTE PTR simbol

Efect: converteste simbol in tip byte.

. WORD PTR "CHANGE TYPE OF VARIABLE " OPERATOR

Sintaxa: WORD PTR simbol

Efect: converteste simbol in tip word.

Tipuri de constante

B binare

H hexazecimale

O octale

D zecimal

Directive pentru definire date. Rezumat

DB Define Byte ; definire a variabilei pe un octet

DW Define Word ; definire a variabilei pe 2octeti

DD Define Double word ; definire a variabilei pe 4 octeti

DQ Define Quadword ; definire a variabilei pe 8 octeti

DT Define Ten Byte ; definire a variabilei pe 4 octeti

EQU constanta ; defineste o constanta

ORG adresa ; indica adresa efectiva unde se va plasa programul

ALIGN n ; unde n=1,2,4,8,16 aliniere contor amplasare la multiplu

INCLUDE fisier.asm ; copiaza in acel loc o secventa de program (subprogram)

Mod de lucru recomandat

I. Utilizarea instructiunii MOV

Copiati programul de mai jos in Emu8086 si compilati-l (F5) si apoi emulati-l.

ORG 100h ; directiva ceruta de un program COM

MOV AX, 0B790h ; incarca in AX valoarea B790h

MOV DS, AX ; copiaza valoarea din AX in DS

MOV CL, 'A' ; salveaza in CL codul ASCII al lui 'A', adica 41h.

MOV CH, 01011111b ; salveaza in CH valoarea binara 01011111

MOV BX, 15Eh ; seteaza BX cu 15Eh.

MOV [BX], CX ; copiaza continutul lui CX in memorie la adresa indicata de DS si BX

MOV SI, 10h; incarca in SI valoarea 10h

MOV [BX+SI+10H],AL; incarca din AL valoarea la adresa indicata de BX+SI+10H

MOV DL, [130H]; incarca la adresa 130h continutul lui DL

MOV DX, 130h ; incarca in DL valoarea 130h

MOV word ptr cuv,3456h;incarca in locatiile de memorie cu adresele "cuv" si "cuv"+1,

octetii 034h si 056h, adresare imediata

MOV AX,var ;din memorie in acumulator

MOV AX,[var] ;adresare directa

MOV bx,offset var ;incarca in BX adresa lui var

RET; revenire la sistemul de operare

cuv db 0

1.a. Observati modificarile care se realizeaza in register si in memoria de date.

1.b. Identificati adresele la care sunt scrise instructiunile si codul fiecarei instructiuni

II. Aplicatii cu instructiunile Push si Pop

2. Copiati in Editorul simulatorului EMU8086 urmatorul program. Compilati-l si apoi cu ajutorul emulatorului executati-l pas cu pas.

ORG 100h

MOV BX,CS ;seteaza segmentul de date

MOV DS,BX ;egal cu segmentul de cod

MOV AX, 5678h

PUSH AX ;saveaza in stiva continutul lui AX

MOV AX, 7876h ;modificati continutul lui AX

POP AX ; refaceti continutul lui AX cu valoarea intiala

CLC ;se actioneaza asupra fanionului CF=0

STC; CF=1

CMC; complementare CF

RET

END

Elemente de observat pentru fiecare dintre urmatoarele instructiuni (in AFD se recomanda fixarea zonei doi de afisare a memoriei la adresa DS:124):

Vezi AX , SP si stiva.

Vezi fanioanele.

III. Aplicatii cu instructiuni de transfer speciale

3. Se copiaza in Emu8086 urmatorul program si se executa pas cu pas.

ORG 100h

MOV BX,CS ;seteaza segmentul de date

MOV DS,BX ;egal cu segmentul de cod

MOV AX, 8089h;

MOV BX, 1234h;

XCHG AX,BX; se interschimba continuturile celor doua registre

XCHG BH,BL

XCHG AX,[BX]

LAHF;incarca in AH fanioanele

SAHF;incarca fanioanele cu continutul lui AH 

END

Vezi registrele BX, AX, BH, BL, F.





Politica de confidentialitate


creeaza logo.com Copyright © 2024 - Toate drepturile rezervate.
Toate documentele au caracter informativ cu scop educational.