Estoy trabajando a través del de Kip Irvine "Assembly Language for x86 Processors, sexta edición" y estoy realmente disfrutando.¿Por qué el código debe estar alineado con los límites de direcciones pares en x86?
acabo de leer sobre la tecla de acceso NOP en el párrafo siguiente:
"It [NOP] is sometimes used by compilers and assemblers to align code to
even-address boundaries."
El ejemplo dado es:
00000000 66 8B C3 mov ax, bx
00000003 90 nop
00000004 8B D1 mov edx, ecx
Luego, el libro afirma:
"x86 processors are designed to load code and data more quickly from even
doubleword addresses."
Mi pregunta es: Es la razón por la que esto es así es porque para los procesadores x86 a los que se refiere el libro (32 bits), el tamaño de palabra de la CPU tiene 32 bits y, por lo tanto, puede extraer las instrucciones con el NOP y procesarlas de una vez. Si este es el caso, supongo que un procesador de 64 bits con un tamaño de palabra de un quadword haría esto con un hipotético 5 bytes de código más un nop?
Por último, después de escribir mi código, ¿debo revisar y corregir la alineación con NOP para optimizarlo, o el compilador (MASM, en mi caso) hará esto por mí, como parece sugerir el texto?
Gracias,
de Scott
Todo lo que desea saber sobre la arquitectura de los procesadores modernos está en http://www.agner.org/optimize/. La alineación requerida para las instrucciones es independiente del tamaño de la palabra, y tiene 16 bytes para los procesadores Intel modernos.No quiero arruinar tu diversión, pero no debes confiar en un libro que hace afirmaciones generales sobre el rendimiento de los "procesadores x86". Cada modelo individual tiene diferentes características. –
¡Gracias por tu comentario! No has arruinado mi diversión. ¡La alegría está en el aprendizaje y acabo de aprender algo más de ti! Verificará el sitio web también. –
Este libro se ve horriblemente desactualizado. 16bit x86 es realmente antiguo, TBH. No veo el valor de enseñar esto incluso con fines educativos. Tal vez como un ejemplo de contador, como _no_diseñar un lenguaje de procesador/ensamblador. – hirschhornsalz