Grupul instruc?iunilor de lucru pe ssiruri de caractere
Scopul lucrarii
Lucrarea prezinta succint grupul de instruc?iuni pe ssiruri de
caractere ale limbajului de asamblare al microprocesoarelor I8086/I8088.
Dupa o scurta prezentare a sintaxei acestor instruc?iuni, urmeaza o serie
de exemple care sa eviden?ieze modul de utilizare al acestora.
Grupul instructiunilor pe ssiruri de caractere
Pentru toate instruc?iunile pe ssiruri de caractere, se considera ca
ssirul sursa este con?inut in segmentul curent de date (a carui adresa de
inceput este con?inuta in registrul DS), iar adresa relativa a ssirului in
segment este con?inuta in registrul SI. ?irul destina?ie este con?inut in
segmentul de date suplimentare (a carui adresa de inceput este con?inuta
in registrul ES), iar adresa relativa a ssirului in segment este con?inuta in
registrul DI. Pentru ssirul sursa se poate considera ssi alt registru de
segment utilizand un prefix de registru adecvat. Flagul DF indica sensul
de parcurgere in memorie al ssirurilor sau, altfel spus, modul in care se
actualizeaza registrele SI ssi DI dupa execu?ia opera?iei. Astfel, daca
flagul DF are valoarea zero, atunci se considera ca ssirurile se vor
parcurge de la adrese mici catre adrese mari. Actualizarea registrelor SI
ssi DI se face prin incrementarea acestora cu 1 sau cu 2 dupa cum ceea ce
se executa este o operatie care implica un octet sau un cuvant. Daca
flagul DF are valoarea unu, atunci se considera ca ssirurile se vor parcurge
de la adrese mari catre adrese mici. Actualizarea registrelor SI ssi DI se
face prin decrementarea acestora cu 1 sau cu 2 dupa cum se executa o
operatie care implica un octet sau un cuvant.
Opera?iile elementare pe ssiruri de caractere sunt:
1. LODSB (LODSW) SRC ; Load String
Instruc?iunea incarca fiecare octet (cuvant) din ssirul sursa SRC
adresat prin DS:SI in registrul AL (AX), cu actualizarea corespunzatoare
a registrului SI. Con?inutului ssirului sursa nu se modifica.
2. STOSB (STOSW) DST ; Store String
Instruc?iunea memoreaza con?inutul registrului AL (AX) in octetul
(cuvantul) din ssirul destina?ie DST adresat prin ES:DI, cu actualizarea
corespunzatoare a registrului DI. Con?inutului registrului AL (AX) nu se
modifica.
Exemplu:
STOSB ; Memoreaza continutul registrului AL la adresa
; ES:DI si incrementeaza continutul lui DI cu 1
STOSW ; Memoreaza continutul registrului AX la adresa
; ES:DI si incrementeaza continutul lui DI cu 2
3. MOVSB (MOVSW) DST, SRC ; Move String
Transfera un octet (o pereche de octe?i) intre ssirul sursa SRC
adresat prin DS:SI in octetul (perechea de octe?i) din ssirul destina?ie DST
adresat prin ES:DI, cu actualizarea corespunzatoare a registrelor index SI
ssi DI. Con?inutului ssirului sursa nu se modifica.
Observatie: Este clar ca inaintea operatiei de transfer trebuie incarcate in
registrele SI ssi DI adresele de inceput ale celor doua ssiruri (sursa,
respectiv destinatie), iar in CX numarul elementelor ce trebuie
transferate. Pentru claritate prezentam urmatorul exemplu:
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
mov ax, extra_sgm ; Se incarca registrul ES cu adresa de
mov es, ax ; baza a segmentului de date suplimentare
mov si, OFFSET SRC
mov di, OFFSET DST
mov cx, numar_elem
cld ; DF = 0 - ssirurile se vor parcurge in sens crescator
MUTA:movsb ; Transferul octetilor de la sursa SRC la
loop MUTA ; destinatiaDST se executa pana cand CX = 0
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4. CMPSB (CMPSW) DST, SRC ; Compare Strings
Compara un octet (o pereche de octeti) din ssirul destinatie DST
adresat prin ES:DI cu octetul (perechea de octe?i) din ssirul sursa SRC
adresat prin DS:SI, cu actualizarea corespunzatoare a registrelor SI ssi DI.
Compara?ia se realizeaza prin scaderea octetului (cuvantului) sursa din
octetul (cuvantul) destina?ie, fara inscrierea rezultatului, dar cu
Documentul este oferit gratuit,
trebuie doar să te autentifici in contul tău.