with plugin files exclude example assembly documentation

assembly - plugin - maven jar with dependencies jar



¿Cuál es la mejor manera de aprender Asamblea? Específicamente, para alguien que tenga experiencia en lenguajes dinámicos (9)

He estado usando Python durante bastante tiempo, y me encanta la facilidad de uso y la flexibilidad, pero realmente quiero acercarme más al hardware para algunas matemáticas iter en las que estoy trabajando. También estoy intrigado por estar tan cerca del hardware, sin absolutamente nada que te impida usar todo lo que tiene.

Investigué sobre las presentaciones en Assembly y para mí van mucho más rápido de lo que deberían. Saltan directamente a los registros y operaciones sin explicar qué son exactamente y por qué son importantes.

Me gustaría ver una introducción en profundidad a Assembly, para asegurarme de que entiendes los conceptos antes de continuar con cualquier tipo de programación con él.


Como han dicho otros, comenzar con un lenguaje de nivel inferior como C / C ++ es un buen comienzo. Familiarícese con sus características, como punteros , referencias, máscaras de bits , etc., y luego intente ensamblar .

Un tutorial que realmente me gusta es el Tutorial de PC Assembly (el PDF se puede encontrar aquí ) que se encuentra aquí. Hasta que cree y ejecute un programa simple y lo depure, será difícil comprender el ensamblaje.

Más importante aún, conocer su arquitectura de computadora Von Neumann y otra información básica es extremadamente importante: diseño de procesador , diseño de memoria , arquitectura de bus , varias memorias caché , sistema de números binarios y operaciones, etc. Es imposible comprender el ensamblaje sin una sólida comprensión del las matemáticas que está utilizando y el hardware que está programando, porque está tan cerca del hardware cuando programa en ese nivel.

En muchos casos es más fácil aprender en un procesador más simple. Aprendí primero en un simulador de Java que usaba una derivada más simple del conjunto de instrucciones x86, con menos registros, luego pasé a la programación en una placa de proyecto Motorola MC68HC12 .


Como han dicho otros, comenzar con un lenguaje de nivel inferior como C / C ++ es un buen comienzo. Familiarícese con sus características, como punteros, referencias, máscaras de bits, etc., y luego intente ensamblar.

Este debería ser el primer paso. Después de eso, podría usar un libro como Escribir gran código, Volumen 2: Pensar a bajo nivel, Escribir a alto nivel . Muestra cómo el compilador convierte el código de alto nivel en ensamblaje.


@Chris Fournier brindó una excelente respuesta sobre cómo aprender Asamblea. No puedo proporcionar nada mejor que él ya lo haya hecho, pero algunas referencias más:

  • Arte de ensamblaje : este es un gran recurso para aprender a ensamblar
  • Steve Gibson : el hombre tiene habilidades de ensamblaje. Escribió su herramienta SpinRite en nada más que en Assembly. Este es un enlace a algunos recursos que recomienda y también algunos programas de muestra que escribió en el ensamblaje.

Además de los tutoriales y las referencias mencionadas, sugiero que te familiarices con C primero, ya que no será tan grande como Python para el ensamblador. C también es lo más cercano posible (en rendimiento y proximidad de hardware) al ensamblador, con menos curva de aprendizaje.

Una vez que se sienta cómodo con C, obtenga una comprensión básica de las instrucciones y registros para su arquitectura, luego ejecute un depurador (GDB en Linux y WinDbg o OllyDebug en Windows) sobre algunas aplicaciones C básicas para ver cómo se ejecutan en ese nivel.

Los beneficios que mencionas de la codificación en ensamblador son algo cierto, pero experimentarás mucho menos dolor haciéndolo en C. Como la mayoría de las cosas, si codificas mal en ensamblador (y sin ofender, pero probablemente lo harás como principiante), funcionará más lento que una aplicación C bien escrita.

Y ... siempre puede ensamblar en línea en C.


Asistí a un curso en mi universidad donde escribimos la asamblea de MIPS . Es un procesador RISC, que hace que el esfuerzo humano sea un poco más humano. Y, para ser sincero, es divertido y no tan difícil una vez que lo dominas.

Desafortunadamente, no recuerdo los libros que usamos en ese curso, pero estoy seguro de que Amazon tiene algunas buenas propuestas.

Pruebe SPIM como una plataforma de simulación.


Daniel Auger tiene razón.

Dependiendo de su inclinación, encontrar un emulador CP / M Z80 o 6502 Apple] [emulador es una buena apuesta.

"De vuelta en el día" todos aprendimos assembler, porque en realidad era un lenguaje práctico de usar. Sin caché, sin ejecución predictiva, etc. Tienes un puñado de registros, un par de docenas de instrucciones, etc. Y un gran programa (¡para mi nivel!) Era de 8 o 10 kilobytes.


Personalmente, creo que es divertido trabajar con ensamblajes en computadoras retros como c64 o Apple II. Es casi tan básico como funcional. Una vez que te sientas cómodo allí, deberías poder saltar al ensamblaje x86.


MIPS, MIPS, MIPS, MIPS, MIPS. Eso es lo que dije.

MIPS es el conjunto de instrucciones más simple, limpio y elegante jamás concebido en mi opinión. Básicamente es "el RISC original". Si tiene un enrutador basado en MIPS u otro dispositivo pirateable, escriba un código para ello.

Otra arquitectura muy limpia e incluso más simple es AVR, que es una arquitectura de 8 bits utilizada en microcontroladores de Atmel. Muy ortogonal y simple de aprender y usar.

Obviamente, si necesita realizar un trabajo específico en el ensamblado (como optimizar el código de tiempo crítico), aprenda el lenguaje ensamblador para la arquitectura que esté usando ... lo más probable es x86. El ensamblaje x86 es potente, pero bastante desordenado.


Aprender a programar en C es una buena idea porque C es el lenguaje de programación de alto nivel más bajo, pero si quiere aprender primero el hardware, le recomiendo este libro: "Una guía completa ilustrada del hardware de la PC".

Y para aprender a programar en lenguaje ensamblador, le recomiendo comenzar con la arquitectura 8086, que tiene los registros en 16 bits y le permite comprender mejor cómo maneja la computadora los datos. "The Art of Assembly Language" es un gran libro desde este punto de vista.