2009-06-20 30 views
7

¿Qué hace exactamente esta instrucción? Sé que trata de alinear los datos con un múltiplo de un número específico, pero ¿por qué tendrías que hacer esto? ¿Hay alguna instrucción equivalente en otros ensambladores?'alinear' instrucción en MIPS

Respuesta

9

Normalmente alinea los datos para obtener un mejor rendimiento. Para la mayoría de los procesadores, el acceso a memoria tiene alguna penalización cuando no se accede a límites de bytes específicos. Para otros ensambladores, a menudo hay algún tipo de pseudo-op.align para esto. La mayoría de los compiladores también alinean sus estructuras de datos (aunque puede deshabilitarlo para depuración).

Ver también Wikipedia entry.

Tenga en cuenta que los sistemas MIPS no emulados pueden incluso bloquearse si intenta acceder a las celdas de memoria desalineadas (consulte here y here).

+0

Gracias por las aclaraciones adicionales en los enlaces externos! –

0

se alinea todo a la enésima potencia de dos. No es una instrucción, es una directiva que se traduce en instrucciones

En cuanto a su uso, por exampe:

instrucciones MIPS32 son siempre 32 bits de longitud. Entonces, cada instrucción debe comenzar en un límite de palabras. Agregar una directiva .align antes de que comience el código, alinea las cosas a 32 bits. Esto tiene muchos beneficios, incluyendo que solo se necesita 1 acceso a la memoria para la recuperación de la instrucción, y que probablemente sea beneficioso en la caché de instrucciones.

+0

¿Qué tal almacenar doble flotador en la pila? Necesita alineación de 8 bytes ¿verdad? –

+0

Sí, los dobles se alinean con 64 bits – Tom