tutorial registers lenguaje language instruction ensamblador assembly x86

assembly - registers - lenguaje ensamblador x86



¿Qué sintaxis y arquitectura de ensamblaje es más útil saber? (11)

Primero, hay dos tipos de sintaxis: Intel y AT & T. ¿Cual es la diferencia?

Las principales diferencias son superficiales: operandos invertidos, por ejemplo.

¿Por qué todavía hay dos en uso? ¿Cuándo necesitaría usar uno versus el otro?

Intel usa una sintaxis que es una desviación importante de la sintaxis que prácticamente todos los demás documentos ISA de procesador usan.

GNU utiliza la sintaxis de AT & T para todas las plataformas y admite la sintaxis de Intel para x86 y x86_64.

Otros ensambladores (como NASM, MASM, etc.) usan la sintaxis Intel exclusivamente.

Entonces, ¿cómo puedo saber si el ensamblaje que estoy aprendiendo de una determinada página web funcionará para mi máquina?

Está documentado en los manuales del Intel de Intel y AMD . Sandpile es también un buen recurso.

Entonces, la gran pregunta es, con todas estas variables, ¿cómo puedo saber qué tipo debo aprender? ¿Qué es lo más común?

El más apoyado sería la clase Pentium-pro, llamada ''i686'', y la clase K8 (denominada ''x86_64'' o ''amd64'' o ''EM64T''). Las variaciones desde allí son si MMX o SSE o sus variaciones son compatibles. Busque las instrucciones de CPUID: le proporcionará información de soporte para el procesador en el que se está ejecutando.

¿Cómo es posible que las personas "conozcan el ensamblaje" cuando existen todas estas variaciones?

No creo que nadie "sepa" x86. Todos los que lo necesiten tienen una copia de los manuales del procesador.

Siempre quise aprender ensamblaje, pero parece que hay una jungla de información relacionada con el ensamblaje que es difícil de interpretar. No he podido googlear "aprender ensamblaje" y ponerme en marcha.

Primero, hay dos tipos de sintaxis: Intel y AT & T. ¿Cual es la diferencia? ¿Por qué todavía hay dos en uso? ¿Cuándo necesitaría usar uno versus el otro?

En segundo lugar, hay una multitud de chips por ahí. Intel vs AMD, 32 bits frente a 64 bits, x86 frente a otras arquitecturas ... incluso x86 es realmente toda una familia de chips. Entonces, ¿cómo puedo saber si el ensamblaje que estoy aprendiendo de una determinada página web funcionará para mi máquina?

Existen aún más variaciones (el sistema operativo incluso juega un papel en la determinación de cómo se ejecutará el código).

Entonces, la gran pregunta es, con todas estas variables, ¿cómo puedo saber qué tipo debo aprender? ¿Qué es lo más común? ¿Cómo es posible que las personas "conozcan el ensamblaje" cuando existen todas estas variaciones?


¿Qué tipo deberías aprender? Eso depende de lo que quieras hacer con eso. ¿Estás interesado en aprender más sobre tu PC? ¿Estás interesado en la programación integrada? Asegúrese de tener alguna forma de ejecutar su código. Probablemente quiera aprender la serie x86, pero no es la más fácil de aprender. Hace mucho tiempo, pensé que lo más fácil de aprender era la computadora a color Radio Shack con el manual que vendían.

El más común depende de lo que quieras hacer. Hay muchos chips basados ​​en x86 en computadoras de propósito general, pero muchos chips más en roles más especializados, como teléfonos inteligentes y sistemas integrados.

No conoces el ensamblaje aprendiendo todos los lenguajes ensambladores en el mundo. Lo sabes conociendo uno o dos lo suficientemente bien como para obtener todas las ideas importantes, y después de eso es en gran medida una forma de aprender nuevas arquitecturas informáticas.


¿quieres ser un hacker de Windows? aprende x86. ¿Quieres ser un tipo incrustado? ve a comprar un chip de entrenamiento DSP y aprende eso.


Como se ha mencionado, encuentre un ensamblador que le guste que admita su hardware y lo aprenda. Hay muchas opciones, no todas ellas son Intel o AMD. Varios sistemas incorporados usan otros chips, incluida la venerable serie 680x0.

En cuanto a conocer todo el ensamblaje, ¿alguien sabe todo el lenguaje de programación? ¿Alguien sabe todo el API dot net? Conoces muy bien una pequeña sección central de cualquier lenguaje de programación, un poco más que puedes usar, pero que tal vez no comprendes del todo, y una gran selección de la que conoces un poco, pero tienes que consultar el manual, y hay una cantidad desconocida de la cual no sabes nada en absoluto.

Incluso el antiguo 6502 tenía docenas de operandos y métodos de direccionamiento. Aprende lo que necesita para hacer el trabajo. Cuantos más trabajos hagas, más aprenderás.


El objetivo del montaje es que usted está codificando al usar directamente el conjunto de instrucciones básicas de la CPU. Como diferentes CPU tienen diferentes conjuntos de instrucciones, todas son diferentes. Sin embargo, una vez que conoces un "ensamblaje" y obtienes las ideas básicas, cambiar de un conjunto de instrucciones a otro es relativamente simple.

Sugiero comenzar con el ensamblaje 80386, es compatible con casi cualquier PC que pueda encontrar, pero no tiene demasiadas extensiones para confundir a alguien que acaba de comenzar.


Encontré que el ensamblaje x86 no es tan fácil de aprender como un primer ensamblador. El msp430 es realmente fácil. Hay más procesadores ARM que 80x86 en el mundo, así que no es una mala plataforma para empezar y es fácil de aprender, un número correcto de registros y otros que no sean PC y no apilan registros especiales, todos realizan las mismas tareas por igual . Aprendí primero el lsi / pdp11 (no, no del todo así de viejo) y fue tan simple y directo que realmente hizo que el aprendizaje fuera más fácil. Fue el ensamblador del que se derivó el lenguaje C. No estoy seguro de dónde aprendería, el msp430 no está muy alejado y está disponible.

La pregunta cambió después de que escribí esto. La gran respuesta es primero aprender a programar, pero sospecho que ya lo sabe y no es específico para el ensamblador. Segundo, aprender a realizar esos pasos de programación descomponiéndolo en registrar cargas y almacenamientos y operaciones de tipo alu. Entender las interrupciones y su impacto, puede producirse una interrupción entre dos instrucciones, debe preservar el estado de la máquina, los registros y las banderas, etc. Algunos procesadores hacen la mayor parte de esto por usted, por lo que es posible que deba probar algunas otras. para entender la complejidad Las rutinas de interrupción e interrupción de servicios son avanzadas, solo el hecho de poder dividir su tarea en pequeñas operaciones simples generalmente basadas en registros calificaría como programación en ensamble.


Es bastante difícil decir qué ensamblaje es "más útil" a menos que elija la plataforma que desea usar.

Si vas a PC (intel, amd), comienza con el ensamblaje x86. Hay un conjunto de instrucciones comunes para diferentes CPU + algunas instrucciones específicas de la tecnología como SSE. Si desea desarrollar para Windows eche un vistazo a MASM, para Unix FASM sería una buena opción.


FAsm

Viene como un ejecutable para Windows listo para ejecutarse de la caja; descomprimir su archivo y tenerlo desde la línea de comando. La versión de Linux es similar a la de un compilador ELF compilado, mientras que la versión BSD / Unix viene como un archivo de objeto que usted compila con su compilador nativo de C y listo para desplegar su código de ensamblador. En la actualidad, se está trabajando en el desarrollo de un FAsm evolutivo de ensamblador casi vm que también incluirá soporte nativo para chips ARM.

Los IDE que admiten FAsm incluyen WinAsm Studio con plugins de FAsm titulados WAFasm por Shoorick empaquetados en un archivo que, una vez descomprimido, está listo para ejecutarse inmediatamente. También hay IDE nuevo creado con FAsm y dirigido por un desarrollador independiente y miembro del foro de FAsm (John Found) y muchas otras alternativas.

FAsm admite COFF, 32 y 64 bits PE, así como ELF para Linux y FreeBSD en formatos de archivo .exe y .dll / bibliotecas enlazadas. Proporciona soporte de macro así como encabezados siguiendo su formato. Para obtener una lista completa de formatos de archivos ejecutables compatibles con FAsm, consulte el sitio web oficial porque hay muchos.

FAsm ahora tiene solo 20 años y todavía tiene un tamaño de poco más de 1 megabyte.

FAsm tiene un foro de usuarios bastante amplio que aborda temas relacionados con todas las plataformas a las que sirve, así como temas que van desde OpenGL hasta el desarrollo de sistemas de transparencia de imagen PNG homebrew y aplicaciones de GUI: cosas realmente increíbles.

Muy recomendable.

Recuerde que el ensamblador, contrariamente a la especulación idiota, nunca morirá porque cada compilador tiene que hacer lo mismo, solo un FYI amigable, compilar, enlazar, ensamblar ... ¿verdad?

El hilo puede ser un poco viejo, pero el tema sigue siendo relevante y en esta nota, ¡al final, disfruta!


Recuerdo haber leído un libro introductorio sobre ensamblaje x86 por (creo) Peter Norton. El libro guía a un principiante a través del proceso de creación de un editor de disco duro de pantalla completa para MS-DOS. Esta es la mejor manera de aprender, porque obtiene la experiencia completa del hardware de bajo nivel que se incluye en la arquitectura x86 y también puede aplicar ese conocimiento a otras CPU. Menos útil es el conocimiento de las interrupciones de DOS, pero sigue siendo interesante.


Siendo realistas, la mayoría de los desarrolladores no necesitan saber ensamblador en estos días. Sin embargo, es útil conocer los conceptos detrás del ensamblaje (arquitectura de la máquina, registros, memoria, etc.). Para eso, aprende una CPU y eso es todo lo que necesitas.

Eche un vistazo a http://www.grc.com/smgassembly.htm - Steve Gibson es uno de los pocos desarrolladores que escriben activamente aplicaciones en ensamblado en estos días, y tiene una gran cantidad de recursos en su sitio.


Una vez leí el excelente "Lenguaje de montaje: paso a paso" de Jeff Duntenmann hace mucho tiempo. Es probable que sea el único libro sobre ensamblador 80x86 para principiantes que he visto, y es muy bueno. Supongo que muchas cosas están un poco desactualizadas, pero la programación en ensamblador en x86 en sí misma es bastante pasajera para la mayoría de las cosas hoy en día. Pero si estás buscando comenzar y quieres una fundación, creo que su libro está donde quieres estar.