În limbajul de asamblare operanzii care se definesc folosesc descriptorii care au următoarele lungimi și restricții de aliniere:
dt - operandul are lungime de 10 bytes și adresa trebuie să fie un număr divizibil prin 2;
dq - operandul are lungime de 8 bytes și adresa trebuie să fie un număr divizibil prin 8;
dd - operandul are lungime de 4 bytes și adresa trebuie să fie un număr divizibil prin 4;
dw - operandul are lungime de 2 bytes și adresa trebuie să fie un număr divizibil prin 2;
db- operandul are lungime de 1 byte și adresa trebuie să fie un număr divizibil prin 1.
Dacă într-un program ASM se scriu primii operanzii definiți cu descriptorul dq apoi cei cu descriptorul dd, apoi cei cu descriptorul dt și dw, iar numai în final toți operanzii cu descriptorul db contotul de locații va efectua amplasări compacte, pentru că sunt respectate cerințele de divizibilitate.
În secvența:
a dq 15
b dq 31
c dq 100
x1 dw 40
x2 dw 110
x3 dw 564
y1 dt 4000
y2 dt 8000
z1 db 11
z2 db 3
z3 db 111
z4 db 1
se alocă 3*8+3*4+2*10+4*1 = 60 de bytes.
Dacă se construiește secvența:
a dq 15
z1 db 11
b dq 31
z2 db 3
c dq 100
x1 dw 40
z3 db 111
x2 dw 110
x3 dw 564
y1 dt 4000
z4 db 1
y2 dt 8000
rezultatul este absolut nefavorabil pentru că necesarul de zonă de memorie va impune alinieri și deci bytes neutilizați. În cazul operanzilor care nu sunt aliniați se vor executa operațiile dar forțarea necesită cicluri suplimentare.
Lungimea se calculează după expresia:
L = 8+1+7+8+1+7+8+2+1+1+2+2+10+10= 75 bytes.
Cei 15 bytes apar pentru a fi respectată cerința de aliniere, adică divizibilitatea cerută de descriptori. În acest caz este vorba de un supliment de memorie care se evită prin regruparea tipurilor de operanzi. dacă însă un operand este definit la o adresă impară, el va fi referit cu un număr mai mare de cicluri mașină, ceea ce scade eficiența prelucrării.
Optimizarea alocării de memorie la definirea operanzilor este un mod de a face economie de memorie și de a reduce numărul de cicluri mașină, știindu-se că în assembler se face orice, cu orice. Totul depinde de programator.
Optimizarea alocării de memorie la definirea operanzilor este un mod de a face economie de memorie și de a reduce numărul de cicluri mașină, știindu-se că în assembler se face orice, cu orice. Totul depinde de programator.
(13 decembrie 2017)
No comments:
Post a Comment