Sunteți pe pagina 1din 2

OPERATII CU SIRURI

Prin ir se nelege o secven de octei sau de cuvinte, aflate la adrese succesive de memorie. Setul
de instrucini cuprinde operaii primitive (la nivel de octet sau cuvnt) i prefixe de repetare, care
pot realiza repetarea operaiilor primitive de un numr fix de ori sau pn la ndeplinirea unei
condiii de tip comparaie. Denumirea instruciunilor fr operanzi la nivel de octet se termin cu
litera B, iar a celor la nivel de cuvnt cu litera W. Aceste instruciuni folosesc registrele DS:SI ca
adres surs i ES:DI ca adres destinaie. Exist i variantele cu operanzi ale acestor instruciuni, i
ele se folosesc n situaia n care se utilizeaz alt segment pentru irul surs, dect segmentul de date
implicit (DS).
1.
.model small
Prin aceast directiv se specific dimensiunea i modul de dispunere a segmentelor n memorie.
Datele i stiva formeaz un segment i codul un alt segment. Fiecare din acestea va avea
dimensiunea maxima de 64KB. Apelurile de procedur i salturile sunt de tip NEAR i se folosesc
adrese efective (offset) pentru accesarea datelor
2.
.stack 100
Aceast directiv aloc o zon de memorie de dimensiune specificat pentru segmentul de stiv.
Dac nu se specific parametrul dimensiune, aceasta va fi implicit de 1KB.
3.
.data
Aceast directiv precede segmentul de date. Utilizatorul trebuie s iniializeze, n mod explicit,
registrul de segment DS, cu adresa segmentului de date. Simbolul @data primete adresa
segmentului de date dup linkeditare.
4.

V0 db 11111111 - pentru ca nu se poate interschimba ubuntu cu fedora fr o variabila


auxiliara
V1 db ubuntu
V2 db fedora
V3 db pupi
- variabilele pe care vrem sa le schimbam intre ele
V4 db mint
V5 db debian
- s-au mai adaugat spatii bonus pentru a fi 8 caractere n total
adr1 dw ?
adr2 dw ?
- spaiu de o adresa pe care l putem folosi mai ncolo

5.
.code
Aceast directiv precede segmentul de cod. ncrcarea adresei acestui segment n registrul CS se
face automat de ctre sistemul de operare, la ncrcarea segmentului pentru execuie. Opional se
pot asocia nume (maxim 6 caractere) pentru segmentele de cod.
Start:
6.

Mov ax, @data


mov ds, ax
Utilizatorul trebuie s iniializeze, n mod explicit, registrul de segment DS, cu
adresa segmentului de date. Simbolul @data primete adresa segmentului de date

dup linkeditare.
7.

mov es, ax
Ne trebuie adresa de nceput a sectiunii de date pentru a putea folosi intructiunile cu
siruri

8.

mov adr1, offset v1


mov adr2, offset v2
adresa efectiv a v1 i v2 n adr1 i adr2 adica deplasamentul sau offset-ul
operandului n cadrul segmentului.

9. I. muta v1 ubuntu n v0
schimba proc
prin directiva PROC, numele procedurii fiind interpretat ca o etichet cu tipul derivat
din tipul procedurii (NEAR sau FAR).
mov di, 0
destinaie = 0
mov si, offset v1
sursa = AE a lui v1
mov cx, 8
contor = 8
ne pregtim pentru a utiliza operatiile cu siruri
rep movsb
schimba endp

- repeta instruciunea movsb pana cnd n cx e 0, cx e de asemenea


decrementat
finalul procedurii

10. II. muta v2 fedora n v1


schimba proc
mov di, offset v1
mov si, offset v2
mov cx, 8
rep movsb
schimba endp

destinaie = AE a lui v1
sursa = AE a lui v2

11. III. Muta v0 n v2


schimba proc
mov di, offset v2
mov si, 0
mov cx, 8
rep movsb
schimba endp
12.

destinaie = AE a lui v2
sursa = 0

mov ah, 4ch


int 21
revenire n DOS
end start

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