Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Instructiuni pe siruri

Informatica


Instructiuni pe siruri

Scopul lucrarii

Aceasta lucrare continua prezentarea instructiunilor setului ISA x86 cu instructiunile speciale pe siruri de caractere.



Consideratii teoretice

Aceste instructiuni s-au introdus cu scopul de a accelera accesul la elementele unei structuri de tip 717j913h sir sau vector. Instructiunile folosesc în mod implicit registrele index SI si DI pentru adresarea elementelor sirului sursa si respectiv destinatie. În mod implicit registrul DS pastreaza adresa de segment a sursei iar registrul ES adresa de segment a destinatiei. Dupa efectuarea operatiei propriu-zise (specificata prin mnemonica instructiunii), registrele index sunt incrementate sau decrementate automat pentru a trece la elementele urmatoare din sir. Indicatorul DF determina directia de parcurgere a sirurilor: DF=0 prin incrementare, DF=1 prin decrementare. Registrul CX poate fi folosit pentru contorizarea numarului de operatii efectuate.

Instructiunile MOVSB, MOVSW

Aceste instructiuni transfera un element din sirul sursa în sirul destinatie. Instructiunea MOVSB opereaza pe octet (eng. move string on byte), iar MOVSW opereaza pe cuvânt. La operatiile pe cuvânt registrele index se incrementeaza sau se decrementeaza cu 2 unitati, deoarece un cuvânt ocupa 2 locatii în memorie. Instructiunile nu au parametrii; programatorul trebuie sa încarce în prealabil adresele sirurilor în registrele SI si DI, si lungimea sirului în CX.

Exemplu:

mov si, offset sir_sursa ; "offset" este un operator care determina adresa

mov di, offset sir_destinatie ; de offset a variabilei

mov cx, lung_sir

et: MOVSB ; DS:[SI]=>ES:[DI], SI++, DI++

jnz et

Instructiunile LODSB, LODSW, STOSB si STOSW

Primele doua instructiuni realizeaza încarcarea succesiva a elementelor unui sir în registrul acumulator. Urmatoarele doua instructiuni realizeaza operatia inversa de salvare a registrului acumulator într-un sir. si la aceste instructiuni registrele index (SI pentru încarcare si DI pentru salvare) se incrementeaza sau se decrementeaza automat. Terminatiile "B" respectiv "W" indica lungimea pe care se face transferul: octet sau cuvânt.

Instructiunile CMPSB, CMPSW, SCASB si SCASW

Aceste instructiuni realizeaza operatii de comparare cu elemente ale unui sir. Primele doua instructiuni compara între ele elementele a doua siruri, iar ultimele doua compara continutul registrului acumulator cu câte un element al sirului (operatie de scanare).

Instructiunile REP, REPZ, REPE, REPNZ, REPNZ

Aceste instructiuni permit executia multipla a unei instructiuni pe siruri. Prin amplasarea unei astfel de instructiuni în fata unei instructiuni pe siruri obliga procesorul executia repetata a operatiei pâna ce conditia de terminare este satisfacuta. Registrul CX se decrementeaza automat. La prima varianta, REP, conditia de terminare este CX=0. La instructiunile REPZ si REPE operatia se repeta atâta timp cât rezultatul este zero sau operanzii sunt egali. La REPNZ si REPNE operatia se repeta atâta timp cât rezultatul este diferit de zero sau operanzii sunt diferiti.

Exemple:

mov si, offset sir_sursa

mov di, offset sir_destinatie

mov cx, lungime_sir

rep movsb ; transfera sirul sursa în sirul destinatie

Instructiunile CLD si STD

Aceste instructiuni modifica starea indicatorului de directie DF. Prin acest indicator se controleaza modul de parcurgere a sirurilor la operatiile pe siruri: prin incrementare (DF=0) sau prin decrementare (DF=1).

Mersul lucrarii

  1. Se vor scrie secvente de program cu instructiunile studiate. Se va analiza efectul fiecarei instructiuni si efectul global al programului.

Exercitii si probleme

Se dau doua siruri cu un numar egal de elemente. Sa se interclaseze elementele celor doua siruri.

2. Sa se scrie o rutina care efectueaza operatii aritmetice de baza între doi vectori. Parametrii de intrare:

DS:SI - adresa primului vector

ES:DI - adresa celui de al doilea vector

DS:BX - adresa vectorului rezultat

CX - lungimea vectorilor

AL - codul operatiei (0 - adunare, 1 - scadere, 2 - înmultire, 3 împartire)

O depasire de capacitate va fi indicata prin setarea indicatorului CF (CF=1). Pentru un rezultat corect indicatorul va fi sters (CF=0|)


Document Info


Accesari: 1543
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2025 )