2009-06-20 17 views
7

Che cosa fa esattamente questa istruzione? So che cerca di allineare i dati con un multiplo di un numero specifico, ma perché dovresti farlo? C'è un'istruzione equivalente in altri assemblatori?istruzioni "allinea" su MIPS

risposta

9

Di solito allinea i dati per ottenere prestazioni migliori. Per la maggior parte dei processori, l'accesso alla memoria ha qualche penalità quando non accede a specifici limiti di byte. Per gli altri assemblatori, spesso esiste una specie di pseudo-op.align per questo. La maggior parte dei compilatori allinea anche le loro strutture di dati (anche se è possibile disabilitarli a scopo di debug).

Vedere anche questo Wikipedia entry.

Si noti che i sistemi MIPS non emulati potrebbero persino bloccarsi se si tenta di accedere alle celle di memoria non allineate (vedere here e here).

+0

Grazie per i chiarimenti aggiuntivi nei link esterni! –

0

si allinea tutto all'ennesima potenza di due. La sua non è un'istruzione, la sua una direttiva che sarà tradotto in istruzioni

Per quanto riguarda il suo utilizzo, per exampe:

istruzioni MIPS32 sono sempre lungo 32 bit. Quindi ogni istruzione dovrebbe iniziare su un confine di parole. Aggiungendo una direttiva .align prima dell'avvio del codice, si allineano le cose a 32 bit. Questo ha molti vantaggi, incluso il fatto che richiede solo 1 accesso alla memoria per il recupero delle istruzioni e che probabilmente sarà vantaggioso nella cache delle istruzioni.

+0

Che ne dici di immagazzinare il doppio galleggiante nello stack? Ha bisogno di un allineamento di 8 byte giusto? –

+0

Sì, raddoppia l'allineamento a 64 bit – Tom