• Programación en ensamblador de x86-64 desde Ubuntu [PDF|2,5 MB] [ENG]


    El propósito de este texto es proporcionar una referencia para el lenguaje ensamblador de nivel universitario y los cursos de programación de sistemas. Este texto aborda el conjunto de instrucciones x86-64 para la popular clase de procesadores x86-64 que utilizan el sistema operativo Ubuntu de 64 bits. Si bien el código proporcionado y varios ejemplos deberían funcionar bajo cualquier sistema operativo de 64 bits basado en Linux, solo se han probado bajo Ubuntu 14/16/18 LTS (64 bits).

    Leer en meneame.net | Noticia original

7 Comentarios

  1. paco_camps_2011 /  hace 11 meses

    Una guía muy completa. En su día aprendí algo de ensamblador solo para crackear algún programa en la época de Astalavista.

  2. raistlinM /  hace 11 meses

    Un muy buen envío.

    Muchas gracias!!!

  3. Pastis /  hace 11 meses

    Me acuerdo de mi proyecto fin de curso en ensamblador en el 96. Hice el Tetris, con sonido por el altavoz del pc, jostick, modo gráfico x, editor de niveles, y cada vez que pasabas de nivel aparecía una tía en tetas. Además usaba el reloj de sistema para que fuese a la misma velocidad en todos los pc. Que no le metí horas.

    • R47_Dramaba /  hace 11 meses

      Tetas? Vaya tela, qué pensarían de tí tus compañeras de clase en el 96!! Y tus profesoras? En fin... :troll:

      • Black_Diamond /  hace 11 meses

        En el 96, profesoras pocas, y compañeras menos. </viejuno>

        • R47_Dramaba /  hace 11 meses

          Ya ya, por eso he remarcado lo del '96. xD

    • Black_Diamond /  hace 11 meses

      Y aprendiste lo que es el retrazado vertical en el CPV.

  4. DPM /  hace 11 meses

    ¿Esto qué es?. ¿Menéame o prográmame?. Irrelevante
    Lo dice un informático

    • pawer13 /  hace 11 meses

      Mira en qué sub está, que haya llegado a portada en la general es casi accidental

      • DPM /  hace 11 meses

        Si si, que me parece correcto, pero a mi me interesan que lleguen a portada noticias, temas, etc que en mi opinión resultan interesantes o distintas y que pueda entender todo el mundo. Esto es algo muy concreto que poca gente va a entender. El tema es que soy consciente que aquí hay mucho nformático y yo respeto que la gente lo menee. Pero a su vez también tengo mi derecho a votar negativo

        • BkNgh /  hace 11 meses

          Menéame debería tener una portada hecha de subs configurables, como Reddit. Por defecto sysdevs no aparecería en las suscripciones básicas, y así nos ahorraríamos el problema de que una noticia de un sub raro llegue a portada y la crujan.

    • BkNgh /  hace 11 meses

      En portada la verdad me parece que no pega mucho. Salvo que sea algo muy bueno (habría que verlo).

  5. miguelangelriveiro /  hace 11 meses

    Por que los votos negativos? No comprendo.

    • paco_camps_2011 /  hace 11 meses

      Son programadores de Visual Basic.

  6. demostenes /  hace 11 meses

    Ensamblador rulez. Los viejos rockeros nunca mueren.

    • uno_ke_va /  hace 11 meses

      en el año 2018 salvo que uses procesadores raros, el compilador va a hacer un mejor trabajo de optimización que cualquier programador...

      • flixter /  hace 11 meses

        Hablas así porque te dedicas a esto, o porque te lo ha contado alguien?

        • uno_ke_va /  hace 11 meses

          mi cuñado en la cena de Navidad.

          • flixter /  hace 11 meses

            Igual te lo has tomado mal, pero la pregunta era seria. La razón por la que lo pregunto es: me dedico a optimización de codigo numérico desde hace +/- 12 años, y sí que es verdad que el compilador hace, en términos generales, un buen trabajo de optimización. Por otro lado, tambien es verdad que si conoces la arquitectura de tu procesador, de tu sistema, y inviertes algo de tiempo, puedes hacer un mejor trabajo (llegar al 90% de rendimiento máximo para la carga de trabajo en cuestión debería ser posible con una inversión de tiempo razonable). Conclusión: conoce tu arquitectura y, para los kernels de calculo, mejor escribe a bajo nivel (intrínsecas y demás) y sacarás bastante mas rendimiento a tu maquina.

            • uno_ke_va /  hace 11 meses

              por supuesto, y como he dicho dependiendo del procesador puede haber casos en los que es interesante hacer cosas en ensamblador.

              No estoy en contra de su aprendizaje, siempre es importante conocer cómo funciona un procesador y lo que está haciendo tu compilador si haces cosas a bajo nivel, simplemente creo que en la mayoría de entornos (especialmente si trabajas en arm o x86) no es necesario ni recomendable su uso.

        • BkNgh /  hace 11 meses

          Yo me dedico a esto. Y tiene razón.

          Mejor preocúpate de escribir código limpio, que cosas como el desenrollado de bucles ya las puede hacer el compilador y si las haces a mano son feas, inmantenibles y para colmo hay que hacerlas adaptadas a cada máquina.

          Si tú escribes un for (i=0; i<10; i++), el compilador no sólo es capaz de no escribir un bucle en absoluto, o de segmentarte el cuerpo del bucle en 3 fases para evitar que la instrucción de división, que es más larga, prevenga la ejecución de otras, sino que es capaz de hacerlo de forma diferente según el procesador elegido.

          Hay un montón de técnicas de optimización que el compilador conoce y adapta al procesador y tú no, y además te permite mantener un código legible y mantenible.

          Vete y edita un bucle segmentado y desenrollado en varias plataformas distintas.

          Esto no quita para que ciertas partes muy críticas a veces ganen en ensamblador, pero no es lo habitual.

          • box3d /  hace 11 meses

            Luego están los que programan compiladores

            • BkNgh /  hace 11 meses

              Yep. Goto #29

          • flixter /  hace 11 meses

            Lo que dices es cierto, pero la palabra mágica es "heuristica": el compilador va a decidir qué hacer, en muchos casos, a partir de algunas métricas de coste y del conocimiento que tenian los tipos que hicieron el compilador en ese momento (de la misma manera que igual no te desarrolla el bucle porque el cuerpo usa demasiados datos y no cabe en cache). Lo suyo es escribir codigo limpio, sin optimizar, y ver qué hace el compilador (sacar unas metricas de roofline, de IPC, etc.) y, en función de eso, meter mano donde sea necesario.

            El compilador hacer un buen trabajo en términos generales, pero si quieres qué el código vaya a toda pastilla con el procesador que tienes a mano, del que tienes un cluster, y en el que tu empresa se ha gastado una pasta (típico caso de empresas "grandes", tipo aeronauticas, oil & gas, finanzas) en las que hay un conjunto de aplicaciones en las que un número reducido de kernels se comen el 80% del tiempo... El código va a quedar "sucio", la mayor parte de las veces porque el compilador es bueno en términos generales, pero no necesariamente en términos específicos.

            • BkNgh /  hace 11 meses

              Totalmente de acuerdo.

      • Skalextric /  hace 11 meses

        Discrepo. Lo hará más rápido, pero no mejor y mucho menos que cualquier programador. Luego vienen los lloros porque los que si saben leer ensamblador tienen un exploit para alguna vulnerabilidad introducida por algún compilador.

        • uno_ke_va /  hace 11 meses

          efectivamente, no que cualquier programador. Pero los que pueden hacer un trabajo mejor que el compilador son tan, tan pocos, que en el 99,9% de los casos el resultado va a ser una aberración. Yo personalmente me incluyo en ese 99%, y estoy cansado de arreglar chapuzas que algún genio decidió hacer en ensamblador que ni son rápidas ni son mantenibiles.

          • Skalextric /  hace 11 meses

            Jajaja te puedo entender, pero eso no quita de que a fin de cuentas estas dejando en un proceso automático la responsabilidad de traducir correctamente las instrucciones de tu programa. No digo de usar ensamblador, mas bien que hay que tener en cuenta cada vez que se compila un programa lo que se hace, que a mucha gente en la facultad prácticamente le dijeron que eso es magia negra y luego pueden venir sorpresas. Por lo demás, totalmente de acuerdo, salvo quizá en el porcentaje que mencionas ;)

            • uno_ke_va /  hace 11 meses

              ya sabes, el 80% de las estadísticas son inventadas ;)

              Como he dicho en otro comentario, no estoy en contra de aprender ensamblador, y es interesante saber lo que está haciendo tu compilador, pero hoy en día su uso debería reducirse a muy contadas situaciones (por supuesto IMHO).

          • BkNgh /  hace 11 meses

            Si un programador es capaz de escribir código más rápido que un compilador, para todas las plataformas, lo razonable en el 99% de los casos es que se dedique a escribir compiladores.

            El 1% restante es ese código crítico que en aplicaciones intensivas en el uso de la CPU, y tras un buen profiling, ha demostrado ser lento y consumir una buena parte de los ciclos de la CPU. Esto sólo pasa en cosas como el kérnel de un SO, compresores de vídeo, librerías matemáticas, etc, pero no en código normal y corriente.

        • BkNgh /  hace 11 meses

          Un compilador no sólo es capaz de optimizar el código, también es capaz de realizar un montón de comprobaciones, por ejemplo fsanitize para direcciones de memoria y leaks. Gcc tiene un montón de flags para hacerlo más o menos estricto.

          Código seguro en ensamblador, ¿estamos locos?

  7. Am_Shaegar /  hace 11 meses

    Gracias por el envío.

Ofertas

Loader noticialalminuto

Volver arriba

Esta web utiliza cookies, puedes ver nuestra política de cookies, aquí Si continuas navegando estás aceptándola