¿Qué sintaxis utiliza este código de ensamblaje y dónde puedo aprenderlo (un curso / libro / guía para principiantes)?

Esta es la sintaxis mnemónica de Intel AT&T versión de lenguaje ensamblador. Puede usar el ensamblador nasm para Intel original o el ensamblador GNU “como” o “gas” GCC con la opción -mmnemonic = intel para compilar Intel. Hay dos mnemónicos para procesadores i386, Intel y AT&T. El primero se usó principalmente en DOS y, por lo tanto, todavía en sistemas basados ​​en Windows, el último se usa principalmente en sistemas similares a Unix, como Linux y lo considero el futuro del ensamblaje de Intel.

Hay muchos libros para esto, pero muchos de ellos están desactualizados. Muchos libros dejan de usar el 8086, algunos suben al 80386 pero se vuelve más delgado cuando intentas superarlo.

Pruebe estos recursos en lenguaje ensamblador. Realmente, ¿qué tan difícil puede ser?

Aún así el estado es difícil. Si lees el manual de Intel 4000 páginas, solo obtienes el conjunto de comandos de Intel presentado y dejan de lado el conjunto de comandos de AT&T. No hay buenos libros de los que yo sepa. La gente ha ignorado la asamblea durante bastante tiempo, incluso si es más importante que nunca.

Los procesadores Intel son enormes y a Frankenstein les gustan las pesadillas en comparación con los procesadores de riesgo ARM, el código Motorola 68k, el ensamblaje VAX IEEE o el antiguo MOS 6502. Para cada problema hay al menos tres formas de resolverlos, cada registro tiene funciones especiales que debes aprender y que no son visuales debido al uso de mnemotécnicos. Todos los códigos de error de todos los ensambladores solo le darán una “Pequeña Gran Bretaña” “la computadora dice que no” si está utilizando el registro incorrecto para una determinada forma de direccionar la memoria. Entonces eso es lo que yo llamo una pesadilla.

Paul Olaru ha vinculado GCC-Inline-Assembly-HOWTO, que es una buena manera de comenzar. Hoy en día, combinar ensamblaje con C es un enfoque mucho más práctico que escribir programas completos de ensamblaje. Pero no es suficiente aprender el código de AT&T. Tiene que combinar eso con esa especificación de chip Intel de 4000 páginas. Pero tiene suerte, puede ignorar las especificaciones de hardware y concentrarse principalmente en la parte del ensamblaje en ese folleto “pequeño”.

Para hacerlo en Windows, puede leer los consejos de Nabeel Omers. Probé YASM yo mismo, un ensamblador que dice ser multiplataforma completo, pero se bloqueó en una entrada simple. Y el último accidente de ensamblador con core-dump fue 1984 para mí, así que dejé caer esa herramienta. Tendrás que usar nasm o MinGW en Windows.

Un mejor entorno para el desarrollo está en Linux. Puedes cruzar el desarrollo por allí.

Deje de usar MinGW, vaya a Descripción general de los productos de Visual Studio 2015, descargue la edición comunitaria de Visual Studio, y luego compile el mismo código usando VS y pídale que genere una lista de ensamblaje. La sintaxis de ensamblaje de AT&T es realmente horrible, la sintaxis de Intel es mucho más simple (encuentre una referencia aquí). Si está en Windows, use VS siempre que pueda, es realmente bueno.

Y debido a que tiene curiosidad sobre cómo funciona el código de máquina, le sugiero que use el depurador de VS para recorrer el código desmontado, encuentre aquí cómo hacerlo.

La colección del compilador GNU (gcc, que incluye g ++ para compatibilidad con C ++) utiliza la sintaxis “AT & T / UNIX”. Ver más en GCC-Inline-Assembly-HOWTO

Contrasta con la sintaxis de Intel realmente.