¿Hay un libro canónico sobre el montaje x86? [cerrado]

25

Hay muchos libros en asamblea. Sin embargo, generalmente tratan con ISA que no me importan, como MIPS o ARM. No trato con estas arquitecturas; no hay razón para que trate de aprenderlos.

Pero los libros de ensamblaje x86 parecen ... inexistentes.

Digamos, por ejemplo, que estoy tratando de construir un compilador de juguetes que genere archivos ejecutables portátiles de Windows.

¿Existe algún libro que sea el estándar de facto para describir las mejores prácticas, las metodologías de diseño y otra información útil sobre el ensamblaje x86? ¿Qué hay de ese libro que lo hace especial?

Billy ONeal
fuente
¿Cuánta experiencia de montaje tienes? ¿Alguna vez ha intentado usar GCC sin optimización para compilar programas C simples en ensamblaje, y luego aplicar ingeniería inversa del código a un programa C?
Brian
10
@Brian: Necesitaría conocer el ensamblaje antes de poder hacer eso.
Billy ONeal
He visto una copia del conjunto de instrucciones x86. Es de 2 volúmenes, y probablemente el libro más grande que he visto. Diviértete :)
AngryBird
2
Billy, si no conoces ninguna asamblea, cualquiera de ellos sería bastante bueno para comenzar a obtener ideas generales. El ensamblaje es extremadamente cercano a la arquitectura, por lo que las instrucciones de ensamblaje reflejan en gran medida los diseños específicos de la arquitectura. Comencé con el ensamblaje x86 y leí el "Lenguaje ensamblador de Kip Irvine para computadoras basadas en Intel". Sin embargo, el libro fue emparejado con una clase en línea en un colegio comunitario. No estoy seguro de qué tipo de alumno eres, pero creo que la instrucción guiada funciona mejor para el aprendizaje.
Brian
@Brian: ¿Qué quieres decir con "alguno de ellos"? No entiendo qué es "ellos", ¿algún libro? Cualquier ensamblador? Cualquier ISA? Ya he jugado con el ensamblador MIPS; Sin embargo, no puedo encontrar nada en x86.
Billy ONeal

Respuestas:

18

Utilicé el lenguaje ensamblador para procesadores x86 como libro de texto cuando estaba en la universidad y me resultó muy fácil de entender. Tengo la cuarta edición más antigua y la comparé con la sexta edición y no noté muchos cambios, por lo que probablemente podría comprar una copia más antigua barata. La gente se queja del uso de su propia biblioteca para E / S, pero él le dice cómo hacerlo de la manera "difícil" en los últimos capítulos.

dboss
fuente
1
Muy buen libro!
Codificador
Leí la quinta edición del libro de Irvine cuando se tituló "Lenguaje ensamblador para computadoras basadas en Intel". :)
Brian
1
Creo que esta es una sugerencia bastante mala, ya que la mayor parte de la segunda edición es específica de la Asamblea de alto nivel del sistema esotérico de los autores, que es esencialmente una versión bastarda de C. Nunca he leído la primera edición publicada. Sin embargo, la versión dos que puedes encontrar en su sitio de forma gratuita y nunca ha sido publicada es una gran lectura. También es aproximadamente un 50% más largo y no tiene nada de HLA (que es una pérdida total de tiempo).
Evan Carroll
1
@EvanCarroll Estoy confundido. Cambiaste el enlace al libro equivocado, luego criticaste el libro al que cambiaste el enlace. ¿Fue eso involuntario?
Merlyn Morgan-Graham
1
totalmente mi error @ MerlynMorgan-Graham es bueno con usted por atraparlo y corregirlo.
Evan Carroll
9

La programación de Art of Assembly es un excelente recurso que tiene bastante información sobre la programación x86.

La documentación de x64 ABI también es útil. Estaba tratando de encontrar un enlace a la versión que estaba en el sitio web de AMD, pero parece que ya no puedo encontrarlo, así que supongo que este tendrá que funcionar.

Algo que puede ayudar bastante [un poco] mientras se aprende es, en lugar de intentar escribir una aplicación completa desde cero en el ensamblaje, en su lugar, escribir la mayor parte en C (o en cualquier otro lenguaje compilado realmente) y luego llamar a un fragmento de código de ensamblaje desde ese. Una vez que haya hecho eso, inviértalo, escriba un programa de ensamblaje y llame a algunas funciones de C a partir de eso.

Editar: se corrigió un error tipográfico.

Orclev
fuente
1
Otra sugerencia: escriba un programa simple en C, compílelo para ensamblarlo, límpielo para que su ensamblador pueda ensamblarlo y luego mejore la versión de ensamblaje. Es una buena manera de obtener algunas funcionalidades mínimas (leer desde el teclado, escribir en la consola) rápidamente.
TMN
4

Un muy buen libro para aprender x86 Assembly es Pentium Processor Optimization Tools . Si bien el enfoque principal del libro es la optimización del código de ensamblaje, enseña el ensamblaje Pentium en el camino, y también es un buen libro de referencia.

Está agotado desde hace mucho tiempo, pero no es difícil de encontrar usado.

Viene con un disquete que contiene un "optimizador de código de ensamblaje". En realidad, no optimiza su código, sino que produce una lista comentada que señala dónde se encuentran las ineficiencias, como las paradas de canalización.

La herramienta que viene con un libro es una versión limitada de un producto más funcional que la compañía del autor solía vender, pero por razones que no conozco, hace mucho que no están en el negocio. No sé por qué, creo que tal herramienta se vendería como hotcakes.

x86 en general es un tema muy complejo ya que hay muchas variantes que son compatibles con diferentes modelos de microprocesadores. Una vez que conozca los conceptos básicos, querrá consultar los libros de datos de Intel o AMD para conocer el chip preciso al que se dirige. Lamentablemente, el código que se ejecuta rápidamente en un modelo de CPU puede no ser tan rápido en un chip diferente.

Mike Crawford
fuente
Realmente no voy por el rendimiento; solo quiero poder generar binarios. Todavía
echará
2
También deberá aprender a usar un ensamblador en particular, no solo los códigos de operación del ensamblaje. Cada ensamblador hace las cosas de manera totalmente diferente. Si va a escribir mucho código de ensamblaje, use masm ya que fue desarrollado con codificadores humanos en mente. Si solo va a escribir pequeños fragmentos de ensamblaje en línea, puede usar gcc con GNU como (también llamado gas) ensamblaje en línea. La sintaxis de GNU as 'es completamente diferente de la de masm. Como se escribió principalmente para su uso como back-end para gcc, para generar el código ejecutable, no proporciona muchas de las características que los codificadores humanos desean.
Mike Crawford
1

¿Por qué no probar el wikilibro - http://en.wikibooks.org/wiki/X86_Assembly . Da un buen comienzo introductorio al lenguaje ensamblador.

Lo difícil del ensamblaje es darse cuenta de lo simple que es y de que debe permanecer con esa simplicidad.

Philip Oakley
fuente