Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2021-22 loggatevi e attivatelo nella vostra pagina dei corsi preferiti. A quel punto il corso appare nel menù personale cliccando sul proprio avatar. Per i materiali degli anni precedenti seguite lo stesso metodo.

To join the Programming/Lab 2021-22 course, log-on and select it on the my courses page. It will appear on the personal menu of your avatar. For earlier years use the same method.

VIDEOLEZIONI DEL CORSO DI FONDAMENTI DI PROGRAMMAZIONE AA20-21

PROGRAMMING COURSE VIDEOCONFERENCES AY20-21

Chiarimenti esercitazione giovedì 15/3 -- .align

L
LucaStravato (1360 points)
7 31 38
in Programmazione in Assembly by (1.4k points)
recategorized by

Salve, rivedendo l esercitazione fatta in aula giovedi 15/03, ( quella in cui si legge e stampa un vettore di interi separati da spazio in ordine opposto ) non riesco a capire il motivo per cui si utilizza .align 2 ( riga 8 del .asm http://twiki.di.uniroma1.it/pub/Architetture2/MZ/AA17_18/DiarioDelleEsercitazioni/vettore.asm ) sia in questo caso, ma anche in generale trovo difficile comprendere il suo significato. So che .align n allinea il prossimo dato ad un indirizzo multiplo di 2^n, ma non riesco a trovare un esempio chiaro da farmi capire il vero utilizzo pratico dell .align .

Grazie  

260 views
closed with the note: answered

1 Answer

Best answer
andrea.sterbini (173640 points)
516 941 1795
by (174k points)
selected by

Quando si fa load word (lw) l'indirizzo deve essere un multiplo di 4.

Se si definiscono dei dati e alcuni di questi possono essere di dimensioni non multiple di 4, i dati definiti successivamente possono non essere allineati.

Con la direttiva .align 2 ci si assicura che tutte le strutture in memoria da quel punto in poi siano allineate a un indirizzo multiplo di 4.

Se (senza direttiva .align) avessi definito le stringhe prima della zona del vettore avrei potuto avere un vettore con elementi non allineati a seconda del numero di caratteri delle stringhe, generando in esecuzione degli errori difficili da riconoscere.