Programación en Lenguaje Ensamblador

-El Verdadero Lenguaje de las Máquinas-

Lenguaje Ensamblador:

escritorio

–¡El mas dificil de dominar de todos los lenguajes de programación en la historia de las computadoras! ¿Serás tú uno de los pocos privilegiados capaces de lograrlo?–

122 comentarios »

  1. Hola. Primero decir que he decidido escribir, sobre todo porque comparto tu defensa del ensamblador, aunque solo soy aficionado. Mi experiencia en la programacion comenzo con visual basic 6, pero faltaba algo y busque en C, y seguia faltando algo, entonces encontre ensamblador y me senti bien con el control que me daba. Aunque tengo que decir que empece hace poco a tocar la programacion en win32 y lo hago con tasm5 y la verdad que hay muy poca informacion en castellano con este ensamblador. Bueno sigue asi con el Blog. Y queria saber si podria hacerte alguna consulta, gracias. Hasta luego.

    Comentarios por Javier | abril 14, 2009 | Responder

    • Somos tan pocos los que nos interesamos en Ensamblador que puedes considerarte de los mejores con lo que has logrado. Casi nadie pasa la barrera del 8086. Asi que se bienvenido a este blog y no temas preguntar. Yo tambien comence usando TASM en mi epoca de los 16 bits.
      Sin embargo, aunque hay muchos ensambladores (MASM, TASM, NASM, GAS, FASM, etc) todos generan el mismo codigo maquina. Y si entiendes el lenguaje maquina obtendras un dominio de la computadora que ningun otro lenguaje podra ofrecerte.

      Comentarios por asm86 | abril 14, 2009 | Responder

  2. Hola Mario. Me gustaria saber que ensamblador utilizas para win32 y queria preguntarte tambien que ensamblador crees que tiene mejor sintaxis para programar aplicaciones GUI.
    Gracias y que sepas que aunque no participo demasiado en el blog, si lo visito casi todos los dias buscando informacion, asi que espero que no te canses del blog.

    Comentarios por Javier | abril 17, 2009 | Responder

    • Mi Ensamblador de Eleccion es el FASM. Puedes encontrar un link en mi blog en la parte derecha bajo en apartado Herramientas. Di con este excelente ensamblador cuando intente hacer uno propio. Fasm esta programado en Ensamblador, por lo que es muy rapido y puedes estudiar su codigo fuente. Su sintaxis es mucho mas sencilla que la del MASM y TASM y se apega mas a las normas de Intel. A diferencia de los Ensambladores con sintaxis AT&T que es la mas confusa de todas.
      En cuanto al API de Windows para aplicaciones GUI, en el sitio del FASM hay un archivo de ayuda sobre la API de Windows. Puedes llamar a cualquier funcion de Windows desde Ensamblador como se estuvieras programando en C++ o Visual Basic. Para mas informacion lee las entradas «Al fin un Codigo en Ensamblador», «CALL, una llamada perdida»1,2 y 3 y «Corazones y Estomagos». En estas notas viene un Hola mundo con la GUI de Windows, como hacer llamadas al sistema operativo y la gestion de mensajes del sistema. Te recomiendo que tambien leas libros sobre Windows, como el de Charles Petzold, aunque no dicen nada de Ensamblador explican cosas como los mensajes, DLL, COM y otros temas avanzados. En Windows, el manejo de la GUI corre a cargo del sistema y uno solo llama funciones ya hechas. Aun en Ensamblador. Esto es un poco decepcionante pero funciona.
      En cuanto al blog, puede que de pronto pase una o dos semanas sin escribir, pero eso no significa que el blog ha muerto. Asi que tampoco dejes de visitarlo. Creo que hay una forma en la que los lectores reciben un aviso cuando un blog cambia. Creo que investigare como hacer eso.

      Comentarios por asm86 | abril 17, 2009 | Responder

      • macho valoro mucha a esa gente bueno yo tengo 15 anos y de la vida que e tenido con la computaciomn me han jodido todo siempre me frisaban el ordenadr que tenia y quiero tener conocimientos para la informatica sobre el lenguaje no se si parecere un poco tonto deiciendo que es como aprender otro idiotma los mios son : espanol y aleman bueno me gustaria unirme al ejercito pensante como ustedes con mucho encanto y ue me puedan explicar mas afondo sobre los ensamladores como se enpieza si no tienen nada mejor que hacer me pudieran responder muchas gracias si me oyen.

        Comentarios por manule esteban priteo alemania | abril 11, 2010

      • Pues se bienvenido al mundo de la programacion en ensamblador!

        Comentarios por asm86 | abril 11, 2010

  3. En mi caso… ahora si que el FASM no lo cambio por nada.

    EDIT + FASM, que mas puede uno pedir?

    ademas c.bat que compila el codigo y m.bat que me deja el EDIT del msdos listo para modificar mis programas.

    Saludos!

    Comentarios por Puerco | abril 20, 2009 | Responder

    • EDIT + FASM, gran combinacion que alguna vez use. Aunque si se configura adecuadamente el editor del FASMW y el teclado en Windows puedes obtener un poco mas de comodidad. Aunque el resultado es el mismo. Creo que escribire una entrada donde se hable sobre como programar con velocidad y confort. Por cierto, para los que no sepan, EDIT era un viejo pero muy practico editor de MS-DOS. Y superaba por mucho a los editores de texto de su tiempo (tanto de DOS como de UNIX)

      Comentarios por asm86 | abril 21, 2009 | Responder

  4. Es bueno saber, que hay gente en habla hispana que este interesada en el Lenguajes Ensamblador, El lenguaje mas antiguo de programacion. Ya se estan viendo los frutos de tu proyecto pinche puerko.

    Un voto mas para el FASM, es Open Source y muy facil de programar, no andas con chingaderas como con el TASM que compilas para crear un ARchivo Objeto(que pedo sera eso, solo los de Borland lo saben) y luego lo enlazas con TLINK para crear el EXE o el COM dependiendo de lo que deseas hacer.

    Con el MASM(Microsoft Assembly) no he tenido experiencia en programar con el, pero he visto los codigos que utilizan ese compilador y me dan hueva ver tantas macros, Pero es el que utiliza el libro de Bray, asi que ni pedo.

    Suerte Javier, vas a ver el la vida de otra manera, empiezas con esto y ya no hay marcha atraz

    Uiiiiiiiiikkkk uik uik

    Comentarios por blackpig | abril 21, 2009 | Responder

    • Originalmente los archivos objeto .OBJ («punto OVEJOTA» como dirian algunos) se crearon para programar en mas de un lenguaje. En los noventas era muy comun que quienes hacian juegos programaban casi todo en C y solamente programaban las rutinas graficas mas complejas en Ensamblador. Dicen que asi hicieron con DOOM pero no me consta. Recuerdo hace mucho cuando combinaba codigos con mis amigos nerds. Se creaban archivos intermedios .obj con los compiladores TASM y TC y se pegaban con MAKE. Eso hacia yo en ese tiempo hasta que lo unico de C que tenia el codigo era el MAIN( ).

      Comentarios por asm86 | abril 21, 2009 | Responder

  5. Hola a todos, gracias por vuestras opiniones. Ya me baje el paquete de FASM para windows y ahora estoy leyendo el manual, a la vez que pruebo algun codigo.
    Un saludo.

    Comentarios por Javier | abril 23, 2009 | Responder

    • El manual del Fasm es bueno para empezar, pero si quieres realmente aprender Ensamblador necesitaras los Mauales de Intel (Link en el blog) Y no olvides descargar la ayuda de la Win32 API del sitio del FASM.

      Comentarios por asm86 | abril 27, 2009 | Responder

  6. Actualmente en el sitio de flatassembler.net, ya no puedes descargar el archivo de la ayuda de la Win32 API

    Comentarios por blackpig | abril 28, 2009 | Responder

    • Bueno, de todas formas ese formato de ayuda ya no funcionaba en Windows Vista sin una actualizacion especial. Aunque cualquier referencia a las funciones, sin importar si es para C, Visual o cualquier otro lenguaje funciona. Si Aun asi tienes dudas, busca un programa que sepas que usa la funcion de la API que quieres y estudialo con el OllyDbg. Ahi puedes ver como se hace la llamada en ensamblador. Es posible saber que funciones DLL usa una aplicacion porque al abrir su .EXE con un editor de texto puedes leer sus nombres en cadenas ascii. Mas adelante pondre un link a estas llamadas API. Creo haber visto un sitio web con toda la referencia a la API de Windows en castellano.

      Comentarios por asm86 | abril 28, 2009 | Responder

  7. Hola Mario. Queria comentar que viniendo del TASM (en MASM es igual), lo que mas me choca es la necesidad de escribir directamente en el codigo la seccion .idata, para saber que APIs va a utilizar el ejecutable, mientras que en TASM se necesita una sola linea (ejem: extrn ExitProcess:PROC). Hasta luego y gracias por todos los comentarios.

    Comentarios por Javier | abril 29, 2009 | Responder

    • Eso es cosa del compilador. Por ejemplo, FASM tambien puede usar macros para definir llamadas a funciones como esa, incluso tienen una para declarar todas las funciones de Windows en un solo renglon. Este es un Hola Mundo con Macros de FASM:

      ; example of simplified Win32 programming using complex macro features
      
      include 'win32ax.inc'
      
      .code
      
        start:
      	invoke	MessageBox,HWND_DESKTOP,"Hi! I'm the example program!","Win32 Assembly",MB_OK
      	invoke	ExitProcess,0
      
      .end start
      
      

      Aunque en lo personal no me gusta usar macros porque me parecen mucho mas complicadas que el propio ensamblador. La macro Invoke permite llamar una funcion API de una DLL en un solo renglon. Pero con funciones con muchos parametros en notacion hungara hacen falta muchas pantallas horizontales para leer las llamadas.
      La decision de usar o no macros es asunto de cada programador, todo estara bien mientras uno sepa que codigo maquina esta siendo generado.

      Comentarios por asm86 | abril 29, 2009 | Responder

  8. Buenas Mario. Aunque no tienes porque saberlo, pero queria preguntarte si sabes porque el FASM crea ejecutables mas reducidos que TASM. He observado con un editor hexadecimal que en los ejecutables de TASM la Header PE empieza en el offset 0100h, mientras que en FASM empieza en el 80h. Venga hasta luego y gracias.

    Comentarios por Javier | May 5, 2009 | Responder

    • Aunque la estructura de un formato ejecutable PE de Windows es la misma para todos los códigos, hay muchas diferencias en la forma en como MASM y FASM almacenan la información y hacen las llamadas al sistema. Por ejemplo, El encabezado de un PE incluye mucha información sobre el compilador y el sistema para el que fue creado. Casi ninguno de esos campos es indispensable para funcionar y el FASM no los utiliza, por ejemplo, el números de versión del compilador puede ser 0.0 y Windows no protesta. Otra diferencia está en las llamadas al sistema. FASM se involucra directamente con el llamado a las DLL, mientras que MASM usa una técnica llamada ‘Jump Table’ o Trampolín. Si rastreas una llamada a la API de Windows de un programa hecho en MASM, la instrucción CALL te lleva a una zona de código donde solo hay JMP’s. Dependiendo en cual de esos JMP caigas es la función que se ejecuta. Este modo ocupa mucho mas espacio pero permite separar el ensamblado del enlazamiento del programa y hace mas sencillo para MASM interactuar con otros lenguajes. Hay algunas diferencias en las secciónes de importació y exportación de funciones.
      Otra gran diferencia es la ‘granularidad’. Un programa ejecutable en Windows no puede tener segmentos mas pequeños que lo que permita la granularidad. Para Windows 95 este valor era una página (512 bytes) pero en Windows NT este valor es mucho menor. Si desensamblas PEDEMO.EXE o lo metes a un editor Hexadecimal verás que se despercicia mucho espacio con ceros. Pero todos los segmentos están alineados a 512 bytes.
      Incluso hay gente sin quehacer que compite por hacer ejecutables de windows de menos de 1kbyte. Esto es posible si creas un solo segmento para datos y código y declaras los encabezados como estructuras del propio programa. Windows se confunde y lo ejecuta. Pero esto no es siempre seguro y en los equipos mas avanzados hasta pueden confundir la aplicación con un virus. Todo depende de que te toque.

      Comentarios por asm86 | May 5, 2009 | Responder

  9. Hola Mario, como va ese editor, espero que bien, me parece buena idea. Bueno a ver si me puedes echar una mano con un tema, que supongo sera facil, pero no termino de conseguir. Bueno el caso es que no consigo cambiar fondo de un control static. He estado buscando info, y he leido algo sobre un mensaje WM_CTLCOLORSTATIC, que entiendo que se mandaria con SendMessage a la ventana padre del control. Tambien habla sobre otra API la SetBkColor. Pero bueno, que no consigo relacionar todo esto y que funcione. Si me puedes echar una mano, te lo agradezco. Ah, tambien comentarte que la ventana es normal, no es un dialogbox. Gracias, hasta luego.

    Comentarios por Javier | May 15, 2009 | Responder

    • las constantes de Windows que controlan los Static controls comienzan con “SS_” por Static Style. Hay varios estilos que copian el color de diversas partes de la propia ventana. Pero creo que el que mas podria interesarte es SS_BITMAP, pues este te permite acomodar un bitmap al control estatico que puede ser un color plano o hasta una foto. Ese bitmap lo defines en la seccion de recursos.

      Recuerda que esto es un estilo y que tienes que definir el control estatico con CreateWindow o CreateWindowEX y pasarle estas constantes el parametro de estilo. Para el windows todo son ventanas, no importa si son ventanas, cajas de texto, botones,etc.
      Para manipular la apariencia de una ventana puedes leer un poco sobre el Device Context. En cuanto a la seccion de recursos, FASM te permite definirla dentro del propio codigo, o puedes usar un compilador de recursos pero eso ya es harina de otro costal.

      Comentarios por asm86 | May 15, 2009 | Responder

  10. Hola Mario. Bueno he tardado un poco. Comentarte sobre lo que me dijiste, que no utilizo archivo de recursos, sino que creo los controles como respuesta a WM_CREATE. Me recomiendas utilizar un archivo de recursos o hay otra forma de cambiar el fondo de un control, sin utilizarlo? Voy a buscar informacion sobre el Device Context como me dijiste. Igualmente gracias, y hasta luego.

    Comentarios por Javier | May 23, 2009 | Responder

  11. Hola Mario, me alegro de haber encontrado un sitio donde se hable de ensamblador en castellano, yo sin embargo todavia me cuesta programar ensamblador directamente en FASM o MASM. Quisiera saber si hay algun ejemplo en FASM lo mas simple posible donde se obtenga una direccion a la video memoria en WIN32 o tambien añadiendo DDRAW. Mi problema es que las llamadas a librerias o funciones acaban por desorientarme… Gracias !

    Comentarios por Javier | junio 7, 2009 | Responder

    • Lo que buscas esta en el archivo DDRAW que viene en el directorio EXAMPLES de FASM. Ahi inicializan el DirectDraw y mueven algunos sprites escribiendo directamente en la memoria de video. La parte dificil es aprender sobre como hacer llamadas al COM. Para entender este archivo necesitas un depurador porque el codigo tiene demasiadas macros. Un depurador te dira realmente lo que el programa esta haciendo.
      Ya cuando logres inicializar el DirectDraw busca una estructura llamada DirectDrawSurface. En esa estructura hay un valor que contiene la posicion de la memoria de video. Creo que la estructura se llama DDSCAPS. Pero debes de llamar a Lock y Unlock antes y despues de escribir a esta memoria o puedes causar un Fallo de Proteccion General. Sea como sea, la respuesta es el COM

      Comentarios por asm86 | junio 7, 2009 | Responder

  12. Holap:

    «¡El mas dificil de dominar de todos los lenguajes de programación en la historia de las computadoras!»

    Absolutamente cierto, por eso prefiero programar en el lenguaje Supremo… o sea: C… xD

    Saludooos :P

    Comentarios por carlosruizortega | junio 11, 2009 | Responder

    • De hecho, muchas cosas del C vienen directo del Ensamblador, como la aritmetica de punteros, el hecho de que el primer elemento de un arreglo sea el cero y no el uno y las llamadas por referencia por mencionar unas pocas. De todos los lenguajes de alto nivel, al que mas respeto le tengo es al viejo C. Incluso algunos compiladores tienen la instruccion __emit__(); que te permite introducir lenguaje maquina en C.

      Comentarios por asm86 | junio 11, 2009 | Responder

  13. necesito ayuda para estas preguntas ya que no se muy bien de lenguaje y tengo que realizar mis practicas gracias
    Escribir las funciones e interrupciones requeridas para ejecutar las siguientes actividades:
    a. Abrir un archivo:
    Función:
    Interrupción:
    b. Leer un archivo:
    Función:
    Interrupción:
    – Escribir la línea de código que debe modificar para que genere el archivo en la unidad de disquete:
    Escribir la línea de código que debo modificar para que genere un error al crear el archivo

    Comentarios por janeth (jan) | julio 28, 2009 | Responder

    • Como lo adverti, las respuestas gratuitas a esa tarea ya no estan disponibles, espero que las hayas leido antes de esto. Para todos los demas que creen que detras de google hay un enano que entiende busquedas del tipo:«Escribir la línea de código que debe modificar para que genere el archivo en la unidad de disquete» y no int 21h A: mejor busquen algun libro de programacion en ensamblador como el viejo libro de Brey «Los Microprocesadores Intel» (si es que saben leer).

      Parece que mas gente de tu misma escuela vino aqui buscandoles que les haga esa misma tarea. De todos modos, si al terminar tus practicas aun te interesa la programacion en Ensamblador aqui estara este blog para ayudarte.

      Comentarios por asm86 | agosto 1, 2009 | Responder

  14. Hola ,interesante web , te dejo mi correo para ver si podemos hacer un intercambio de codigos para que publiques en la pagina

    Comentarios por Yuri | agosto 6, 2009 | Responder

    • Todos los codigos de ensamblador son bienvenidos

      Comentarios por asm86 | agosto 6, 2009 | Responder

  15. Me puedes escribir para saber tu correo y mandártelos , saludos y sigue así

    Saludos !!

    Comentarios por Yuri | agosto 10, 2009 | Responder

  16. es que tengo unos codes pero están en masm y quiero ponerlos en fasm y de paso lo publiques aquí , y de paso me des tu opinión !!

    Los tengo publicados en un foro .
    Esta es una forma de convertir a hexadecimal
    muy rápida
    http://foro.elhacker.net/asm/convertir_a_hexadecimal-t263826.0.html

    Para convertir a Binario (011100110)
    sencilla
    http://foro.elhacker.net/asm/de_ascii_a_binario_01011001-t261008.0.html

    Buscar una string dentro de otra
    (Soporta Búsqueda con asterisc*s)(o Patrones) ;-)
    http://foro.elhacker.net/asm/codigos_de_yuri_grille-t257809.0.html;msg1257143#msg1257143

    Invertir una string (codigo sencillo y sin usar la pila)
    http://foro.elhacker.net/asm/codigos_de_yuri_grille-t257809.0.html;msg1255196#msg1255196

    Par o Impar?
    http://foro.elhacker.net/asm/codigos_de_yuri_grille-t257809.0.html;msg1255115#msg1255115

    De minúsculas a MAYÚSCULAS
    http://foro.elhacker.net/asm/codigos_de_yuri_grille-t257809.0.html;msg1254101#msg1254101

    Son codigos sencillos , pero bueno no me exijas mucho que de esto no se mucho ! , soy principiante!

    Comentarios por Yuri | agosto 11, 2009 | Responder

    • no entiendo aun si tu correo esta en los servidores de yahoo o los de sourceforge, por eso aun no te he escrito. Por lo de los codigos voy a leerlos despacio a ver que tal. Igual puede y hasta yo aprenda algo que no sepa aun. Ahora mismo estoy leyendolos…

      Ya les di una ojeada, tus codigos son interesantes aunque te recomiendo poner algunos comentarios y usar lineas en blanco para hacer mas entendible el codigo. Algunos comentarios de los programas:

      conversion rapida a hexadecimal: Ni a mi se me hubiera ocurrido una manera mas sencilla de acelerar esta conversion. No se si se pueda acelerar aun mas con instrucciones como XLAT o XCHG.

      Convertir a binario: Este se ve dificil, pero creo que toma un numero binario y lo convierte en una cadena de simbolos ASCII imprimible de ceros y unos (30h y 31h), Yo inicializaria una mascara con el bit mas significativo en 1. (80h para 8 bits, 80000000h para 32 etc) y con un TEST y SETNZ eliminaria los saltos condicionales intermedios. Las instrucciones SETcc ponen un cero o un uno en el operando destino dependiendo del estado de las banderas indicadas por ‘cc’. En este caso, SETNZ EAX escribira un uno si el TEST (que es un and) entre la mascara y el numero a desplegar es diferente de cero. A este resultado le sumas 30h para obtener un valor ascii, aunque un OR es mas rapido. En cada iteracion desplazas la mascara un bit a la derecha con la instruccion SHR. El ciclo se acaba cuando la mascara es igual a cero. No se si me explique pero eso es lo que entendi.

      Busqueda de una cadena dentro de otra: A este le tengo que dedicar mas tiempo porque no le entendi. se ve muy interesante esa capacidad de admitir el comodin asterisco * para busqueda de grupos de letras. Me huele que ya hiciste un aceptor.

      Invertir una string: Los 4 mov que haces con el registro ecx pueden cambiarse por un solo MOV y 2 XCHG. Yo tendria cuidado tambien con la condicion de terminacion.

      Par o impar: Este es el mas sencillo. Para ver si el contenido de un registro es par o impar solo hacer TEST EAX,EAX SETP edx. Esta secuencia pone un uno en EDX si el contenido de eax es par, de lo contrario lo deja en cero. Puedes usar este valor como una bandera. De hecho, si quieres ver si un resultado, como una suma da un resultado par o impar, solo tienes que hacer el SETP, sin el TEST, pues muchas instrucciones ajustan las banderas automaticamente. No olvides que el CPU ya tiene una bandera que detecta si un resultado es par o impar.

      De minusculas a MAYUSCULAS: Lo unico que le cambiaria a este codigo seria la resta de 20h por un AND con 0DFh Esto pone a cero el bit 5 del simbolo ascii. Para pasar de mayuscula a minuscula seria un OR 20h. Otra modificacion que haria seria eliminar los saltos condicionales con SETcc y convertir el resultado en la mascara que convierte los numeros, aunque de momento no se me ocurre como. Te prometo que en otra nota averiguare como hacerlo.

      FELICIDADES! Aun a pesar de tu humildad al decir que no sabes mucho, has hecho mucho mas de lo que las prestigiadas universidades les exigen a los ingenieros en computacion en las materias de Ensamblador y Microprocesadores. Si no hago una entrada de blog ahora mismo es solo porque cada una de esas entradas me toma por lo menos 2 horas. Sigue programando que vas mejor que la mayoria de los Ingenieros.

      Comentarios por asm86 | agosto 11, 2009 | Responder

  17. Yuri say >

    Hola hermano , tus palabras me han conmocionado tanto que me dan hasta miedo de creerme «genio» y dejar de ser creativo a la hora de crear algún algorithmo en asm , yo sigo pensando que mis codigos son muy simples no tienen nada fenomenal pero hay gente que me ha felicitado también ,( mi conclucion sobre asm es que hay atraso en esta area , puede que se deba a que en las universidades dan ASM para micros muy viejos y les cojen odio a asm ).Aun tengo muchos baches y instrucciones por aprender , me he estancado un poco ya que con pocas instrucciones se puede hacer «mucho»

    He iniciado un blog aquí en wordpress se llama kapetres (kp3 búscalo en la wikipedia y veras de donde soy);)
    http://kapetres.wordpress.com/

    No pienso ser la competencia solo una hermandad para elevar al ASM a un grado superior
    Mi correo esta en yahoo y los de sourceforge , sourceforge es solo una mascara de correo , en realidad el reenvia a otra dirreccion (esto es solo un filtro antibasura ya que esa dirreccion se cambia)

    Solo quiero pedirte un favor , tengo un problema con las apis de lectura y escritura y me hace falta la ayuda de un experto como tu para poder terminar un (preprocesador de datos)(es sobre compresion) , ya tengo terminado el algorithmo pero me falta la parte de interaccion con el sistema (Win) , necesito tu ayuda ya que aun no se como leer y escribir. Disculpame , pero me puedes ayudar?

    tiene algo que ver con redes neuronales?

    Saludos y escribeme.

    Comentarios por kapetres | agosto 12, 2009 | Responder

    • Si puedes llamar una API en Windows puedes hacer todo lo que el sistema te permita. Si por leer y escribir te refrieres a leer valores en cajas de texto y desplegar resultados en la ventana la manera mas sencilla es mediante CreateWindowEx con el parametro EDIT en el lpClassName y mostrar resultados por MessageBox. Mas adelante podras hacer cajas de dialogo mas elaboradas si quieres.

      En cuanto a lo de la competencia no te preocupes, somos tan pocos los que programamos en ASM que el esfuerzo individual ayuda a todos por insignificante o grande que sea. Mas adelante veremos si enlazamos nuestros blogs para compartir informacion y trafico de manera mas eficiente. Seria bueno un Webring de blogs sobre Ensamblador.

      Por ultimo, y respecto a lo de creerse «genio», en la programacion en ASM pasa algo muy gracioso: No hay programadores mediocres. Para siquiera entender lo minimo sobre el ensamblador hace falta un nivel de conocimientos y habilidades muy superior al que los programadores experimentados en otros lengujes mas «humanos» tienen. Obvamente, los niveles superiores de la programacion en Ensamblador son tan dificiles y sorprendentes que rayan en la ciencia-ficccion. En pocas palabras, no cualquiera programa en Ensamblador. De hecho, el ensamblador es dificil de entender e imposible de dominar. Y cuando crees que ya lo has dominado te encuentras con otro CPU y comienzas de nuevo.

      Comentarios por asm86 | agosto 12, 2009 | Responder

  18. Los aceptores tienen algo que ver con las redes neuronales?

    Saludos

    Comentarios por kapetres | agosto 12, 2009 | Responder

    • Los aceptores se relacionan directamente con la Inteligencia Artificial y otras materias de nombre rimbombante, pero las redes neuronales tienen sistemas de decision y cambio de estado que usan matematicas mas pesadas. Un simple aceptor tan solo recibe una entrada y actua con un cambio de estado en consecuencia, un simple aceptor tampoco es capaz de aprender como las redes neuronales con «perceptrones».

      No dejo de reirme de lo complejos que se oyen estos nombres.

      Comentarios por asm86 | agosto 12, 2009 | Responder

  19. bueno , escribeme al correo para intercambiar de una forma mas rápida , y de paso para que veas el algorithmo talves me indiques algo que pueda cambiar!!
    Gracias otra ves por tus comentarios y puedes usar mis codigos para hacer tu aceptron (siempre que indiques de donde salio)(no te conviertas en lammer XD jajaja )

    Saludos y escríbeme !!

    Yuri

    Comentarios por kapetres | agosto 13, 2009 | Responder

    • ya te escribi al correo de yahoo.es

      Comentarios por asm86 | agosto 13, 2009 | Responder

  20. ok hermano , puedes borrar el comentario donde pongo mi direccion de yahoo ??
    Saludos

    Comentarios por kapetres | agosto 13, 2009 | Responder

    • Asunto arreglado…

      Comentarios por asm86 | agosto 13, 2009 | Responder

  21. Hola , parece que no te han llegado mis correos o estas ocupado !
    Saludos

    Comentarios por kapetres | agosto 14, 2009 | Responder

  22. QUE TAL MUCHACHOS SOY NUEVO EN ESTO DE PROGRAMACION. NECESITO PROGRAMAR EL PIC16F84 Y LO QUIERO HACER (OBVIO) CON ENSAMBLADOR (POR LO QUE HE AVERIGUADO LOS DEMAS LENGUAJE, DE ALTO NIVEL, SON FACILES)
    ESTE LENGUAJE SEGUN COMO LO VEO ES LA BASE DE TODO Y NO HAY MAS. ¿SERIA FACTIBLE EDITAR EL PROGRAMA EN BLOCK DE NOTAS ? Y COMPILARLO CON «PICSIMULATOR IDE». ALGUIEN QUE ME AYUDE POR FIS….

    Comentarios por RELKAN | agosto 16, 2009 | Responder

    • ¿Me juras por los dioses de la computación que no se trata de una tarea?

      Es sorprendente cuanta información en español hay en internet sobre este microcontrolador y tan poca sobre como programarlo en ensamblador. Aqui hay un enlace a un PDF que incluye datos sobre herramientas de desarrolla (como el ensamblador MPASM) un sumario del conjunto de instrucciones y su formato. Pero si quieres mas información directo del fabricante puedes encontrarla en su propio sitio web en: http://www.microchip.com

      Aunque con el simulador y las herramientas que mencionas yo creo que solo te hace falta una referencia de las instrucciones y unos cuantos programas de ejemplo.

      Comentarios por asm86 | agosto 17, 2009 | Responder

      • Que onda cartman, ya le hiciste la tarea, jajaja

        Comentarios por b1ackpig | agosto 17, 2009

  23. Si puede programar un PIC con la informacion que le di no creo que necesite que alguien le haga la tarea.

    Comentarios por asm86 | agosto 17, 2009 | Responder

  24. me das asco..estaba leyendo tu blog y la verdad es q es malisimo..me estoy iniciando en lenguaje ensamblador y la verdad q la actitud q tenes con los demas programadores es pesima, ademas si te estas muriendo de hambre como ensamblador es porque no sos nada…

    Comentarios por daniel | octubre 8, 2009 | Responder

  25. Hola daniel , gracias por llegarte a este BLOG , lee esto:

    BLOG:
    Un blog, o en español también una bitácora, es un sitio web periódicamente actualizado que recopila cronológicamente textos o artículos de uno o varios autores, apareciendo primero el más reciente, donde el autor conserva siempre la libertad de dejar publicado lo que crea pertinente

    http://es.wikipedia.org/wiki/Blog
    ———–

    «me das asco»

    Asco:
    Asco es la denominación de la emoción de fuerte desagrado y disgusto hacia sustancias y objetos, como determinados alimentos, excrementos, materiales orgánicos pútridos o sus olores. El asco puede ser suscitado también por personas o comportamientos.

    «..estaba leyendo tu blog y la verdad es q es malisimo»

    Pues no lo leas (masoquista) , no es obligatory.

    ..me estoy iniciando en lenguaje ensamblador y la verdad q la actitud q tenes con los demas programadores es pesima, ademas si te estas muriendo de hambre como ensamblador es porque no sos nada…

    ——–
    Pues que bueno que te inicias en esto del Asm , lee libros y punto , no aprenderás mucho en un blog. Estudia

    ——–
    Esto es mas cómico :
    además si te estas muriendo de hambre como ensamblador es porque no sos nada…

    «como ensamblador» , esto es un error , el no es un emsamblador el programa en Ensamblador.

    Además quien te dijo que los que mueren de hambre no son nada , grandes hombres han muerto de hambre por mantener una postura determinada en esta puta vida .

    «Todos los días mueren de hambre 35.615 niños y hoy no será una excepción»
    —-
    Donde mas razón tienes es aquí:
    la actitud q tenes con los demas programadores es pesima

    Pero como te dije , es un blog y esto le agrega algo de comicidad .


    «no sos nada» Debes ser argentino.

    Saludos y tomalo suave

    Comentarios por Kape3 | octubre 9, 2009 | Responder

  26. Que onda mario, intente ver los temas de enero, en el combo me aparece que son 28 temas pero al darle click me aparece solo 10 temas que son apartir del 23 enero hasta 30 de enero, no se si lo puedas solucionar, ya que en esa fecha esta la mayor parte del tutorial del Lenguaje ensamblador.

    Te comento, por que quize buscar el tema de «El Doble Filo de las Macros en el Ensamblador», pero no lo hayaba, hasta que le hice una busqueda esaustiva con el google. Y pude notar que es el 13 de Enero pero no aparece en el Blog.

    Saludos

    Comentarios por b1ackpig | noviembre 11, 2009 | Responder

    • Por default, WordPress solo muestra las ultimas 10 entradas, sean del mes que sean comenzando por la mas reciente. Si quieres leer entradas mas antiguas de principios del mes debes de hacer click en un renglon azul que dice «entradas anteriores» y te mostrara las 10 entradas anteriores a las que ya viste. Ya encontre la nota que dices, solo que su nombre es «Ojos que ven pueden ser enganados», la parte que dice –El doble filo de las macros en ensamblador es un subtitulo que en realidad pertenece al texto de la entrada–

      Comentarios por asm86 | noviembre 11, 2009 | Responder

      • Gracias por la pronta respuesta, si no habia visto ese link, pero si esta medio oculto, y hay mucha informacion valiosa. No se si lo has notado pero casi nadie a comentado en esos temas, tal vez sea porque estan medio escondidos.

        Comentarios por b1ackpig | noviembre 12, 2009

  27. Que onda mario, Ya tiene un año este blog, deberias hacer algo por el aniversario, algo como… mmm, no se, un pdf de la primera temporada. (Manual de Programacion en ensamblador por Mario.pdf)

    Comentarios por b1ackpig | noviembre 19, 2009 | Responder

  28. Hola.
    Esta muy bueno tu blog, ya que son pocos los que verdaderamente son programadores, no como los hay ahora copiar y pegar y ya tienen un programa y ni siquiera ellos mismos saben como funcionan, yo no soy programador en ensamblador yo programo en c y c con el api de windows, pero tengo algo de conocimieto de ensamblador y hay que reconocer que con este lenguaje si se puede tener el control total de la maquina y como tu mismo lo has dicho es el lenguaje de las maquinas, son pocos los que llegaran al final y en el futuro solo los que entendamos a estas maquinas podremos sobrevivir en este mundo.

    Comentarios por Cesar | noviembre 21, 2009 | Responder

  29. Hola buenas tardes, soy newbie o novato como quieran ustedes, he empezado en ensamblador hace muy poco y me encanta a pesar del frecuente desprecio que se siente en general, diciendo que es un lenguaje desfasado y que no se utiliza para nada y que es perder el tiempo.

    A pesar de todo ello sigo leyendo antes de practicar, ya se sabe primero teoria y despues practica. Es curioso que cuanto mas leo y veo todas las posibilidades que me ofrece me corroe la curiosidad por dentro de como se hace determinadas cosas, el porque y me gusta profundizar al maximo, buscando en libro,preguntando.

    El libro en el cual estoy inmerso y me encanta, he de decir que es una maravilla, es El Universo Digital libro digital que nada por la net, y es este libro el que me motiva a seguir, pero esoty deseando incarle el diente a uno nuevo que tengo, lenguaje ensamblador 2009, segunda edicion de ensamblador para ms-dos, windows y linux, que tambien poseo.

    Por todo ello pido permiso para poder tomar parte en su blog y poder aprender de ustedes ya que compartir no tengo mucho ya que estoy aprendiendo.

    Estoy seguro que aprendere mucho de ustedes y espero poder aprvechar su sapiencia.

    Manifiesto mi voto incondicional al lenguaje ensamblador y ojala nunca caiga en el olvido, que nunca caera mientras haya gente dispuesta aprender algo nuevo.

    Me despido de ustedes, dandole las gracias y sera una placer aprender de ustedes, si me lo permiten. Con muchas ganas de aprender.

    Un cordial saludo.

    Lucas.

    Comentarios por Lucas | diciembre 1, 2009 | Responder

    • Pues puedes participar en este blog con tus comentarios, aunque si quieres tratar con otros programadores puedes entrar a la Red Social de Programadore de Ensamblador donde podras intercambiar conocimientos con aficionados al Ensamblador de todos los niveles, comparar codigos y leer (y escribir si quieres) tutoriales sobre este lenguaje.

      La red social tiene pocas semanas pero seguro va a crecer para ser importante punto de reunion para los programadores de Ensamblador de habla castellana. O al menos eso espero.

      Comentarios por asm86 | diciembre 1, 2009 | Responder

  30. Hola asm86(o Mario como veo que te llaman aquí), he visto tu blog y me gustado bastante, he de decirte que me fascino ver que hay personas que defienden el lenguaje (¡y personas de habla hispana!), yo soy de esos que empezó hace años programando en lenguaje C y también para el micro 8086, me gustaba mucho programarlo y ponerle hacer de todo, luego descubrí los micro controladores y me fascinaron, recuerdo que llegue a crear un respirador artificial con uno (simulando las válvulas solenoides) , pero por cosas del destino me toco dejarlo hace ya unos 7 años, yo soy programador de VB.net, C#, java y C++(casi no lo uso ya y me estoy olvidando de él), pero debido a este aprendizaje me olvide por completo de las instrucciones de ese micro y del micro controlador, ya no recuerdo ninguna.

    Mi cuestión es que me recomendarías para empezar a programar en este lenguaje ya que mi conocimiento en esta área es nulo. Que libros, manuales, textos, compiladores, etc. Aunque mi campo fuerte son las aplicaciones empresariales y los sistemas de información, no descarto aprender ensamblador, pues para mi es la cima del conocimiento en las ciencias de computación.

    Nota 1: no veo información de tu correo en el blog (bueno tampoco busque mucho), en el comentario dejo el mío por si tienes alguna información.

    Nota 2: Una recomendación no mas, no es muy acertado usar la palabra “difícil“en el slogan que tienes, eso es debido a que la palabra difícil es como es una pared que te pones( o le pones a otro) al frente y que te impide el paso, eso ahuyenta a las personas nuevas que vienen con hambre de aprender, se podría usar por ejemplo la palabra “complejo”, que denota que se requiere trabajo duro para aprender, pero no produce el efecto de detener a alguien que al ver la palabra “difícil” le mueve algo en el subconsciente impidiéndole seguir adelante.

    Te agradezco la atención y suerte con tu blog.

    Comentarios por Carlos | diciembre 16, 2009 | Responder

  31. Guauuuuuuuuuuuuuuuuuuuuuu…..

    Deberas que me sorprendio tu blog, yo hace unos 6 meses empese la materia de lenguaje ensamblador y la verdad hasta este tiempo aun me sige constanto escribir mi nombre en ensamblador.

    A nosotros nos empesaron a enseñar MASM pero por desgracia nuestro profesor fue un desastre, en fin. Voy a seguir leyendo mas tu blog y espero me puedas ayudar y dar algunos consejos acerca de como programa.
    de antemano gracias y espero sigas escribiendo mas acerca de este lenguaje, hasta pronto y que pases un feliz año nuevo saludos ^_^

    Comentarios por Joakin | diciembre 25, 2009 | Responder

  32. necesito hacer un test por visual basisc como lo hago gracias por su colaboracion

    Comentarios por camilo | marzo 8, 2010 | Responder

    • no entiendo, como que hacer un test en visual? Porque si te refieres a llamar a la instruccion TEST de ensamblador de intel vas a necesitar buscar a alguna funcion que ejecute codigo ensamblador. Recuerdo en versiones antiguas de basic que existia una funcion llamada ABSOLUTE capaz de correr codigo maquina, si la encuentras yo te paso el codigo, aunque el efecto es el mismo que hacer un AND y no guardar el resultado sin necesidad de combinarlo con ensamblador

      Comentarios por asm86 | marzo 8, 2010 | Responder

  33. Hola Mario/asm86, me encontré con tu blog hace como una o dos semanas mientras buscaba si existía alguna implementación del algoritmo que genera numeros perfectos en Assembler (no es que sea matemático, pero a veces me pongo a ver este tipo de cosas solo para ver como funcionan) y lo he estado revisando desde entonces. Ciertamente la programación en este lenguaje me parece muy interesante y tengo planes para escribir algunos programas que requerirán mucho uso de procesador y por ende deben tener un gran rendimiento a la hora de trabajar. A diferencia de los demás que visitan tu blog, yo empecé a estudiar programación el año pasado en una universidad de mi país (bueno, un tiempo atrás había tenido algún acercamiento a uno o dos lenguajes, pero no fue gran cosa ya que no logre mucho con eso) y si bien solo hemos visto algunos de los «lenguajes de moda» (C#, Java y ASP.NET) yo el año pasado también empecé a ver Python por mi cuenta mientras iba aprendiendo lo fundamental de la programación (rutinas de repetición, variables, listas, y cosas así) además de que con un profesor también vimos un acercamiento muy básico a Assembler del procesador 8086 que no te agrada mucho (igualmente solo duro 3 o 4 semanas y todo lo hacíamos por escrito y en pseudocódigo), pero aun así me pareció fascinante, por lo que logre hacer algo que genera una especie de desbordamiento (no me acuerdo de que, pero me parece que era de pila o de buffer) en un simulador llamado Simuproc y no he hecho nada mas por falta de tiempo y por dedicarme mas a otras cosas. Eso fue hace como un año, pero pienso retomar la practica de este lenguaje en cuanto me sea posible y tu blog de seguro me será de mucha ayuda para ello.
    Por cierto, he visto que quieres subir material a tu blog, pues se me ocurre una curiosa forma de hacerlo, la cual consiste en bajarte este programa, ejecutas el programa uuencode.exe tal como se indica en el archivo readme.txt, y cuando revisas el archivo resultante con cualquier editor de texto, veras que es texto plano que puedes poner en tu blog dentro de cualquier post. Resulta que el archivo esta codificado en el formato UUEncode (el cual es un algoritmo de codificación que transforma código binario en texto) y este puede ser abierto con WinZip y WinRAR (que son los mas usados), así, si quieres publicar tus códigos y programas en formato UUE, solo bastaría hacer ese procedimiento y luego indicar en el post de tu blog en donde lo hayas publicado que si se quiere ver el contenido de ese archivo, solo hay que copiar y pegar (desde el «begin» hasta el «end») en un editor de texto y guardarlo como un archivo con extensión uue. Si decides usar eso en tu sitio, solo te aviso que ese formato no comprime, sino que el archivo resultante te queda un 33% mas grande que el original. Aunque si quieres probar suerte guardando tus archivos en algún lugar externo, entonces puedes revisar esto (FTP gratuitos) y si te sirve de algo, también esto (hostings gratuitos de archivos para «descarga directa»).
    Para ir terminando, es posible que muchos de tus visitantes vean al Assembler como algo insignificante, obsoleto y/o sin mucho valor en la actualidad, pero desde hace un tiempo me he encontrado con algunas cosas interesantes implementadas en ASM (de las cuales quizás podrías comentar algún día en tu blog) tales como códigos ASM utilizado en la misión Apolo 11 hace 40 años, un recuperador de contraseñas de hashes MD4/MD5/RIPEMD-128/RIPEMD-160/SHA-1 (aunque cuando la probé con un hash MD5 el programa fallaba al probar contraseñas de mas de 5 caracteres de longitud), una implementación del algoritmo MD5 (creo que es para MASM32), un manual que dice sobre instrucciones de salto en lenguaje ensamblador (aunque no indica a que compilador o procesador esta orientado ese manual), ordenamiento burbuja o shake (es solo un pseudocódigo incompleto, pero quizás a alguien le sirva de algo), uFMOD (librería para reproducir archivos XM), KolibriOS, MenuetOS y RadiOS (sistemas operativos hechos en ASM o casi), un reproductor de MP3 hecho en NASM (en la pagina del autor también hay muchas otras cosas interesantes y otros programas de su sutoria). Por ultimo, si te sirve de algo, aquí te dejo un par de tutoriales con los que me he encontrado hace tiempo y que te podrían servir para ese curso que estas desarrollando en tu blog (o al menos como información adicional o algo así): http://www.taringa.net/posts/info/828308/manual-de-Assembler.html http://foro.elhacker.net/asm/tutorial_asm_basico_ejemplos-t102701.0.html y como una especie de «bonus» también encontré este libro de «El Universo Digital del IBM PC, AT y PS/2» que contiene algunas cosas sobre ASM.

    Comentarios por Swicher | julio 6, 2010 | Responder

    • LONGCOMMENT IS LONG!!!

      Buena informacion la que me das en este comentario, sobre todo ahora que estoy algo carente de inspiracion para escribir notas nuevas.

      Comentarios por asm86 | julio 6, 2010 | Responder

  34. me parecio interesante este link
    http://www.abreojosensamblador.net/

    Comentarios por blackpig | agosto 30, 2010 | Responder

    • esta pagina habria sido un sueño hecho realidad cuando recien empezabamos a programar en asm :o

      Comentarios por Puerco | May 19, 2011 | Responder

      • Espero que asi sea para los mas jovenes que apenas se inician en esto de la programacion en ensamblador

        Comentarios por asm86 | May 19, 2011

    • Incleible! me sirve para aprender :D gracias por compartir el enlace! :)

      Comentarios por JavierJV | May 20, 2011 | Responder

  35. hola, he tenido muy poco contacto con este lenguaje de programación y ps igualmente no se mucho de los demás lenguajes.
    en mi universidad vi un semestre de programación de micros en asm, pero igualmente fue muy corto. Lo poco que pude hacer en este lenguaje me llamo mucho la atención, y ahora lo quiero retomar pero no se por donde comenzar ni como debo comenzar, que compilador usar y cosas así quisiera que me orientaran respecto al tema.
    gracias.

    Comentarios por jorge | junio 18, 2011 | Responder

    • El mejor modo de empezar a programar es ir a paginas como flatassembler.net, ahi tienen compiladores, herramientas y un buen foro con muchas respuestas, los manuales de intel son gratuitos y actualizados. Solo no te desesperes, el ASM es muy diferente a cualquier otro lenguaje que hayas manejado.

      Comentarios por asm86 | junio 19, 2011 | Responder

  36. hola amigos bueno lo que estoy buscando es: un software que comvierta la voz humana a ceros y unos asi para controlar el pic bueno he visto que se hace la prograamcion en visual basic pero no me es comveniente……………

    Comentarios por emerson | junio 24, 2011 | Responder

    • Entender literalmente el habla es muy complicado, pero hay un truco que consiste en usar un DSP muy barato para detectar senales muy burdas, con diferencias muy grandes entre tonos y tiempos. No hacen falta muchas matematicas para distinguir un aplauso, un grito o un murmullo. Solo mide la intensidad y el tiempo y asunto arreglado. Que el aparato pueda convertir la voz en palabras y que estas tengan sentido es tema aparte.

      Comentarios por asm86 | junio 24, 2011 | Responder

  37. Hola, bueno yo soy estudiante de Sistemas Digitales y apenas comienzo a usar el lenguaje ensamblador y no entiendo mucho! Ando buscando información sobre las rutinas de perdida de tiempo. espero me puedas ayudar. Gracias

    Comentarios por Sara | octubre 16, 2011 | Responder

    • No entiendo que quieres decir con rutinas de perdida de tiempo. Pero si te refieres a hacer pausas en el programa basta con que hagas un ciclo infinito que se corte luego de cierta cantidad de iteraciones o cuando se oprime una tecla. El resto depende del sistema operativo, revisa la documentacion para buscar este tipo de funciones si es que las tiene. El metodo del ciclo es bueno, pero para hacer uno que se detenga uno o dos segundos tendria que ser un ciclo de mas de 1000 millones de vueltas.

      Comentarios por asm86 | octubre 16, 2011 | Responder

  38. Muy bueno tu blog. Con abundante contenido y muy bien trabajado.

    Comentarios por Ione Soles | octubre 27, 2011 | Responder

  39. porfavor no se rian; el dia de hoy me decidi comenzar a programar en ensamblador, mi objetivo (sin saber nada) es lograr programar los microcontroladores de ATMEL, pero uno nunca sabe y podria gustarme este lenguaje, lo unico que se es c, c++ y java que practicamente son lo mismo, por favor ayudenme digan cuales son los compilaores necesarios , donde puedo buscar informacion etc

    Comentarios por jcm2389 | noviembre 16, 2011 | Responder

    • Si quieres programar los microcontroladores Atmel en ensamblador puedes buscar en google «AVR Assembler». Si ya tienes una idea del sistema binario y arquitectura de computadoras (registros, memoria, etc) este documento puede ayudarte.

      Por regla general, si quieres programar en ensamblador cualquier microprocesador o microcontrolador puedes encontrar informacion actualizada y gratuita en el sitio web de sus fabricantes. Estos mismos ofrecen herramientas gratuitas que aunque no sean las mejores son bastante confiables. En cuanto a lo de reirse lo tomare como un cumplido. Lo bueno es que cuando aprendes el ensamblador de una maquina, ya los aprendiste todos, solo tienes que cambiar las instrucciones y la arquitectura del sistema. Te recomiendo que leas algunas entradas de este mismo blog si es que nunca has manejado ensamblador, hay unas que explican conceptos muy basicos para los principiantes

      Comentarios por asm86 | noviembre 16, 2011 | Responder

  40. Hola amigo, yo recién me he iniciado en C++ y ahora estoy ingresando a Arrays. Pero finalizando C++ me gustaría introducirme de lleno a lo que es ASM, sin embargo, desde ahora he buscado un poco de información incluso para desarrollar en x32Bit pero no ha sido posible. Me pregunto si usted que tiene gran experiencia en esto puede crear un curso de ASM ya sea gratuito o pagado para que más personas nos unamos a esta causa.

    Gracias & buen día mi estimado!

    Comentarios por Luis Coronel | diciembre 19, 2011 | Responder

    • aprender a programar para procesadores intel de 32 bits es incluso mas sencillo que para 16 bits. El problema es el sistema operativo. Entender como trabaja por ejemplo Windows a nivel interno y como funcionan los programas en ese ecosistema toma mucho mas tiempo que aprender el propio ensamblador de intel de 32 bits. Hacer un curso asi me tomaria mucho tiempo pero si quieres puedes revisar el enlace del lado derecho que dice WEB DE IZCELION. Ese es el tutorial de ensamblador para windows mas famoso del internet. Aunque para entenderlo vas a necesitar un desensamblador y un editor hexadecimal. Te recomiendo que leas un poco sobre ensambladores de 64 bits porque ya hay muchas computadoras que tambien lo usan.

      Para entender como funcionan los procesadores de intel de 32 y 64 bits puedes entrar al enlace de la barra derecha que dice MANUALES DE INTEL y descargar documentos muy buenos y gratuitos en formato PDF

      Comentarios por asm86 | diciembre 19, 2011 | Responder

      • Amigo voy a comprar 02 libros porque este lenguaje me interesa mucho. He leído un poco y me ha llamado la atención; los libros son: Lenguaje Ensamblador 2009 y su guía práctica. Voy a revisar todo este sitio web.
        Gracias

        Comentarios por Luis Coronel | diciembre 21, 2011

      • Ese libro es bastante bueno, otras buenas opciones son «Los Microprocesadores Intel» de Barry Brey y otro que no recuerdo el nombre pero es sobre ASM de 32 bits y el autor es Kip R. Irvine. De todos modos no olvides leerte los manuales de intel que ademas de actualizados son gratuitos. Puedes descargarlos del link en la barra de la derecha que dice «Manuales de Intel»

        Comentarios por asm86 | diciembre 21, 2011

      • Otra pregunta, yo estuve aprendiendo C++ y ahora me he quedado en lo que es Punteros. Básicamente yo pienso dedicar todo mi tiempo a Lenguaje Ensamblador y por eso deseaba preguntarte si yo puedo aprender ASM sin haber finalizado de estudiar C++ ya que C++ también me enseñarán en la universidad dentro de 03 meses. Lastimablemente no soy de España y por ello tengo que pagar el envío de esos libros a mi país, me dijeron que llegarían el 28 de diciembre o el 09 de enero.

        Comentarios por Luis Coronel | diciembre 21, 2011

      • En mi país nunca llevaremos ASM. La única ingeniería es Ing. de Sistemas que desde mi punto de vista me servirá en una mínima parte en lo referente a programación. Aunque no lo creas, quizás si, solamente tengo 16 años y pienso llegar en cierta manera muy lejos con lo que es ASM. Gracias por crear este blog para miembros de habla hispana.

        Comentarios por Luis Coronel | diciembre 21, 2011

      • Disculpa por el Spam. Ya me pude responder la pregunta Nº 01 leyendo la información mostrada en la guía básica para principiantes y si piensas que puede ser necesario para no confundir este blog con un foro por favor borra las 02 respuestas anteriores brindadas por mí.

        Gracias

        Comentarios por Luis Coronel | diciembre 21, 2011

      • Es bueno que no te hagas muchas ilusiones con los estudios universitarios. Estudia para no preocupar a tu familia y asegúrate de dejar siempre tiempo para aprender a programar por tu cuenta. A menos que quieras dedicarte a la docencia debes de ser consciente de que los estudios universitarios no te van a ayudar cuando te quedes solo con la computadora. Ten cuidado con no caer en una de esas granjas de código en las que caen muchos egresados de las carreras de ingenieria en computación y si caes en un estado de pobreza muy desesperante es mejor que busques un empleo donde no pienses mucho y que no te tome mas de 8 horas. No importa que te agotes fisicamente. Vas a tener mas oportunidad de programar que cualquiera de los ingenieros que cumplen jornadas laborales de noches enteras y que lo último que quieren ver al regresar a su casa es una computadora. La mente se agota mas rápido que el cuerpo y el agotamiento mental es mas perjudicial para el programador incluso que el peor agotamiento físico.

        Lamento haberme tardado tanto para contestar pero este fin de año he presenciado algunas cosas muy feas y no he tenido tiempo para atender el blog. Tengo en reserva unas cuantas notas extra que iré publicando a lo largo de lo que queda del mes.

        Comentarios por asm86 | enero 11, 2012

  41. Wow pense que yo era la unica persona interesada en lenguaje ensamblador a estas alturas de la tecnologia xD! leyendo los comentarios me dan ganas de hecharle codigos al asm de nuevo… aunque nunca pude para de una calculadora LOL!!!

    Comentarios por Dk! | febrero 18, 2012 | Responder

  42. lo de la calcuradora no lo entiendo bien xD osea como una calculadore lee juegos? esta echa para acectar juego en ASM o bien son simplemente los juegos que se hacen en ASM para esas calculadoras son adaptaciones como por ejemplo

    un amigo mio y to jugamos un juego que nos aburreo por ser puras carreras pero los autos se dañan y cuanod se dañan mucho se queda frenado y se resetea y nosotros haciamos una adaptacion y lo jugabamos como carritos chocones el que se le quedara el auto frenado perdia xD

    es eso? los juegos se adaptan a lo que soporta la calculadora?

    Comentarios por armoryneSKY | febrero 19, 2012 | Responder

  43. :S no pues solo logre hacer suma,resta,multiplicacion y division usando asm xD y no podia mostrar el resultado en la pantalla T-T…

    Comentarios por Dk! | febrero 20, 2012 | Responder

    • No lo dudo, en ensamblador hacer operaciones básicas solo son unos pocos bytes de lenguaje máquina pero leer números desde el teclado y desplegarlos en pantalla involucra en el mejor de los casos llamadas al sistema operativo y en el peor hacer toda la programación de entrada y salida desde cero. Aunque este último caso solo se presenta si uno quiere hacer sus propio sistema operativo o construye un dispositivo electrónico.

      Comentarios por asm86 | febrero 27, 2012 | Responder

  44. ¿Alguien sabe como obtener el codigo fuente de un programa exe compilado en QBASIC 4.5?
    Saludos
    NCN

    Comentarios por NCN | febrero 29, 2012 | Responder

    • Puedes desesamblarlo con un desensamblador como IDA u Ollydbg o incluso verlo en hexadecimal con un editor hexadecimal cualquiera. El problema es que las viejas aplicaciones de Qbasic tienen demasiado codigo basura. Reconstruir un programa a partir de su ejecutable es igual independientemente del lenguaje con el que fue creado, aunque hay que conocer sobre ingenieria inversa.

      Para acabar pronto, un programa ejecutable no tiene ya la informacion del codigo fuente original, a menos que este se haya incluido en momento de compilacion

      Comentarios por asm86 | febrero 29, 2012 | Responder

  45. necesito el calculo de la suma de todos los elementos de un vector, asi como la media aritmrtica. por favor En lenguaje ensamblador

    Comentarios por jose | marzo 16, 2012 | Responder

    • Realiza un ciclo que lea una cierta cantidad de valores a partir de una posición de memoria. Ve sumando los valores en el acumulador con la instrucción ADD mientras incrementas el puntero, no olvides poner a cero el acumulador al empezar. Eso te da la suma de todos los elementos. Guarda el contenido del acumulador en alguna posicion de memoria para que no se pierda.

      Para obtener el promedio o media aritmética, usa la instrucción DIV y pásale como único argumento la cantidad de números que sumaste, si sumaste 10 cantidades le pasas un 10. No olvides que DIV no acepta argumentos inmediatos, asi que vas a tener que pasarle ese valor por medio de un registro. Como por ejemplo el contador ECX. Luego de la división, el acumulador va a tener la media aritmética redondeada a enteros. Dudo que tus maestros quieran que lo hagas en punto flotante.

      Para hacer las cosas mas sencillas escribe los valores a modo de «arreglo» y manda imprimir los resultados con una llamada al sistema operativo o usa el emulador para leer directo de las posiciones de memoria en la máquina virtual

      Comentarios por asm86 | marzo 16, 2012 | Responder

  46. hola que tal!! me parece uno de los mejores blogs sobre lenguaje ensamblador!!
    di con este blog ya que necesito hacer una interfaz donde conecte un brazo robot con el puerto USB pero manipularlo en lenguaje ensamblador.
    el brazo con el que cuento es el que compre en Steren Modelo: K-682, lo que no se es que pic o como hacer la placa para hacer la interfaz y que necesito saber para programarlo en Lenguaje ensamblador conTurbo Assembler (TASM).
    espero pueda ayudarme o sugerirme algo, ya que soy principiante en esto,
    por el momento gracias!
    saludos!

    Comentarios por isluan huerta | abril 18, 2012 | Responder

  47. Hola a todos. Me he topado con este blog y me ha gustado mucho. Trabajé durante 6 años programando pics en ensamblador, como el 16f84, 12c5xx, 16f87x y otros.(Si no recuerdo mal solo habia 31 instrucciones y con eso se hacia de TODO ) También hice pinitos con el 80×86 ( 96 instrucciones ) y probé cosas con el AT&T. Utilicé el ASM tanto en Win como en Linux.
    Bueno el tema es que no quiero perder de mi cabeza todo aquello y me gustaria seguir practicando algunos programillas aunque fuese de forma anecdótica. …..y la pregunta es : ¿ Han cambiado mucho las cosas desde 1998 ? Me refiero a los editores y compiladores y tal . Ahora tengo Windows 7 y he encontrado muchos editores por el google pero me encantaria que algún experto de hoy me aconsejara un poco.
    Sigo en contacto diario con la programación pero me he pasado al lado oscuro y utilizo JAVA ( si , lo siento ) , ANDROID, PHP, AJAX, MySQL, etc…..
    Un saludo a todos y me alegra mucho que la gente siga programando en ASM, para mi ha sido y es el mejor de todos, por no decir el único.

    Comentarios por Alberto Navarro | agosto 11, 2012 | Responder

    • En ensamblador todo sigue siendo igual a como era en los ochenta, se sigue escribiendo código en editores de texto y se sigue ensamblando con programas externos. Lo único diferente es que los procesadores actuales tienen mas instrucciones y algunas herramientas evolucionaron pero siguen manejándose igual. En ASM no hay grandes IDE’s como en otros lenguajes. En Windows. Si acaso el Notepad++ que es un editor de texto util para cualquier lenguaje sirve para todo y el Flatassembler que se sigue actualizando y es libre. Recientemente salieron los compiladores GCC para windows en su versión de 64 bits.

      Todo se maneja igual, si acaso actualízate leyendo la documentación de los nuevos procesadores y listo. Se trabaja igual que antes.

      Comentarios por asm86 | agosto 11, 2012 | Responder

      • Gracias por la respuesta. Al final me he decidido por el FLATASEMBLER, que al ver el icono recordé que ya lo usaba hace tiempo. Voy a empezar a probar algún «holamundo.asm» para ver si me cojo al hilo pronto. Un saludo.

        Comentarios por Alberto Navarro | agosto 12, 2012

  48. oigan yo no puedo acer mi programa es un conversion de grados farenheit a kelvin me pueden ayudar

    Comentarios por andros | marzo 21, 2013 | Responder

  49. Como puedo hacer para expresar una función derivada segunda para determinar contorno de un objeto en assembler con ATMEL ?? mi email es sergiocapilleraperg@gmail.com agradezco quien pueda ayudarme en éste proyecto. saludos.

    Comentarios por Sergio | marzo 22, 2013 | Responder

  50. hola buenas tarde me gustaria saber como puedo manipular un brazo robotico de la marca steren …pero en lenguaje ensamblador

    Comentarios por airam | abril 29, 2013 | Responder

    • Los he visto pero nunca he controlado ninguo. Yo lo que haría sería buscar si tiene algún microcontrolador o memoria en chip y cambiarla por uno programado por mi mismo. Si cambiar el hardware no es opción buscaría que al conectarlo al Windows me dijera que tipo de hardware es y usar algo de HID (human interface device) del propio sistema para programarlo.No debe de ser mas dificil que controlar un joystick. Las funciones de Windows de ReadFile y WriteFile permiten comunicación con periféricos. Si investigas estas cosas en google tal vez des con la clave para programarlo porque yo nunca intenté reprogramar uno de esos brazos

      Comentarios por asm86 | abril 30, 2013 | Responder

  51. Hola necesito realizar un programa en lenguaje ensamblador para procesador intel 8086, es para hacer mover un micro-robot fabricado con piezas de lego, dos motores y 2 sensores que deben detectar color blanco=0 y Negro=1, los motores son controlados mediante dos bits(P y S) con valores (0,0= Parado) (0,1=Parado) (1,0) giro derecha) (1,1= giro izquierda) y la secuencia es de acuerdo a los sensores: 2 sensores= negro avanza linea recta, sensor derecha detecta blanco e izquierda detecta negro girara a la izquierda en caso contrario gira derecha, si ambos detectan blanco permanece parado, no se por donde comenzar, alguien me puede ayudar a aclarar esto, gracias

    Comentarios por Iris Martinez | octubre 2, 2013 | Responder

  52. A quién le interese programar en ensamblador conjuntamente para x86 y 32 bits estoy totalmente abierto a cualquier sugerencia. Programo en FASM aunque abuso de lenguajes de alto nivel con asm en linea.

    Comentarios por Javier | noviembre 24, 2013 | Responder

    • Como puedo contactarte,

      Comentarios por Iris | noviembre 25, 2013 | Responder

    • Hola, estoy interesado.

      Saludos

      Comentarios por Martín Muñoz | febrero 13, 2014 | Responder

      • Hola, podemos empezar proponiendo posibles programas y decidir uno de ellos.
        para trabajar conjuntamente y enviarnos archivos pasame tu correo al mio. javier07b9@hotmail.com

        Comentarios por Javier | febrero 24, 2014

  53. Me encantó este blog, no creí llegar a encontrar un buen lugar sobre ensamblador, casi no hay y la verdad apenas inicio ya que ando saliendo de C#, he estudiado de igual manera como la mayoría de aquí JAVA, C y C++ así como el hijo menor (Visual Basic .NET/6), bueno seguiré indagando por su blog y si me atoro en algo le preguntaré y ojalá me pueda responder, sin querer hoy a las 1:46 de la mañana programando algunas cositas sin querer encontré el blog, gracias :’)

    Comentarios por Horacio Espinosa Barceló | agosto 23, 2014 | Responder

  54. Buenas Alguno sabe como leer el encabezado de un archivo bmp en assembler 480*640, necesito mostrar una imagen de ese tamaño pero no encuentro para eso y solo veo para 200*320 y no entiendo esa rutina xD!!

    Comentarios por Evis | febrero 28, 2015 | Responder

    • Aqui hay una entrada de wikipedia sobre el formato BMP y su cabecera
      http://es.wikipedia.org/wiki/Windows_bitmap

      La cabecera te dice cuanto mide de largo y ancho y cuantos colores ocupa cada pixel Por cierto, los BMP se leen desde abajo hacia arriba. Te recomiendo que descargues un visor de imagenes llamado IrfanView. Es libre y puede mostrarte un archivo de imagen como el BMP en formato hexadecimal si presionas F3

      Comentarios por asm86 | marzo 1, 2015 | Responder

  55. Realmente es un blog muy interesante, comenzare a leerlo, me quiero ahogar y aprender este lenguaje desde hace tiempo y creo que es un buen lugar donde empezar.

    Comentarios por tutoriales de programacion | marzo 28, 2015 | Responder

  56. lo de lenguaje ensamblador esta genial, quisiera que se pudiera continuar, apenas y estoy recopilando info para ver que puedo hacer, no he programado nada nunca, hasta ahora, vere como seran mis inicios, espero sigas con el post de ensamblador.

    Gracias

    Comentarios por Jorge Lezama | julio 3, 2015 | Responder

  57. Alguien sabe como hacer un programa que lea un numero en decimal y despues imprima su equivalente en octal?

    Comentarios por Sammy | abril 25, 2016 | Responder

  58. Hola quiero crear carpetas o directorios, estoy usando MASM611 uso la interrupción INT 21h, con 039h en Ah, y se crean bien, lo que pasa es que cuando lo hago en rutas de más de 64 bytes, no me genera la carpeta, investigue y es porque está limitado a rutas de 64 bytes, la ayuda que busco es, como poder crear directorio mas halla de los 64 bytes en la ruta, además de buscar amigos que gusten en programar en este lenguaje y podamos entre todos hacer algún proyecto, se me ocurre algún video juego o alguna otra idea que se tenga en mente, saludos y gracias de antemano, mi correo es mariocasta2015@gmail.com

    Comentarios por Mario Casta | agosto 18, 2017 | Responder

    • Puedes intentar crear rutas de 64 en 64 y cuando llegues a ese límite moverte al último directorio con la función 3Bh para cambiar el directorio actual y a partir de ahí seguirte extendiendo. Recuerda que no es obligatorio que la ruta vaya del directorio raiz. Puedes crear un subdirectorio desde donde quiera que estés. Aunque nunca intenté hacer directorios tan profundos cuando programaba en DOS. Experimenta.

      Comentarios por asm86 | agosto 18, 2017 | Responder

      • Muchas gracias por el consejo, lo intenrare asi

        Comentarios por Mario casta | septiembre 8, 2017

  59. bien lamentablemente empece tade en en el ensamblador tantos años en la red y programando en otros lenguajes hasta que descubri todo el poder que te da el ensamblador y perderle el miedo total a todo lo abstracto que parecia ser.. no hay que olvidar nunca que todas las aplicaciones del nivel que sea del lenguaje que sea todo tiene que aterrizar tarde que temprano en codigo maquina.. ahora yo estoy con NASM Pero talvez ya no exista ninguna comunidad. busco ejemplos en nasm algun codigo fuente de como montar una fat32 y un kernel bien explicado. gracias.

    Comentarios por Daniel Alejandro Corona | agosto 30, 2017 | Responder

  60. Buenas tardes Mario, lo que pasa es que tengo Fresh Ide y quiero saber como usarlo pero no encuentro documentacion ni nada. ¿No tienes algo de documentacion por ahí? gracias karnal

    Comentarios por Cuckberto may cry | septiembre 13, 2017 | Responder

  61. hola, quiero hacer un programa que convierta los grados celsius a fahrenheit en lenguaje ensamblador. ¿alguien puede ayudarme?

    Comentarios por Cheche | junio 4, 2018 | Responder

  62. Hola, yo me estoy aventurando en hacer un nuevo lenguaje de programación, según yo mas fácil de entender, para una programación mas rápida, haber hasta donde llego, si gustas seguirme en esta aventura, cree un canal en youtube https://www.youtube.com/watch?v=0aZU_uOyKbU

    Comentarios por Mario Casta | diciembre 27, 2018 | Responder

  63. Hola mi nombre es Cristian, soy Argentino y llevo muchos años programando. Despues de ver la cantidad de nuevos lenguajes que han salido (O que se estan utilizando) en los ultimos 2 años. Me inclino a tomar Assembler como el lenguaje mas libre y completo. Lamento no haber entrado antes, pero nunca es tarde.
    No veo articulos actualizados ultimamente, asi que voy a estar atento desde ahora. Saludos, y gracias por lo que compartes. 22 de Septiembre del 2019.

    Comentarios por Cristian | septiembre 22, 2019 | Responder

  64. Hola Cheche entre a tu canal en youtube, solo tenes 3 videos publicado. Una lastima que no siguieras. Saludos y si publicas otros te apoyo como pueda, saludos.

    Comentarios por Cristian | septiembre 22, 2019 | Responder

  65. Estoy interesado de muy buena gana con la idea de crear videojuegos de la manera tradicional. A mi los conceptos de caja negra me desagradan mucho y quiero tener el control completo de la computadora, sin contar que pese a que puedo adaptarme bien a los engines, no termina de gustarme demasiado, a eso súmale mi gusto por lo retro y me tienes listo para avanzar.

    Sin embargo, no tengo ni la menor idea por donde empezar pese a que ya estoy mas o menos familiarizado con arquitectura de computadores aunque de mera elemental. Si algún compañero se toma la molestia de hacer una listita de los temas necesarios a tener para desarrollar videojuegos a la antigua, ya sea temas matemáticos, de arquitectura de los computadores y de los propios lenguajes ensambladores.

    Comentarios por mbrey | abril 24, 2024 | Responder

    • El programador Micheal Abrash dijo:

      «Dime cómo leer un botón y pintar un pixel y te hago un videojuego»

      Cada época tiene su hardware. Hoy aunque Windows es de 64 bits todavia se puede programar en ASM y puede llamarse al sistema operativo con una versión de 64 bits del viejo Win32. Aunque no es sencillo.

      Aunque por como funciona el Windows es imposible acceder al Hardware como en tiempos del MS-DOS. Pero las versiones antiguas de DirectX se le acercan Bastante. Si puedes leer el teclado, crear un bloque de memoria virtual y pasarlo a pantalla será lo más cercano que estarás de hacer un juego moderno del modo tradicional. Y todo se puede hacer con assembly.

      En cuanto a la lista, esta no tendria mucho sentido. Habria que actualizarla muy seguido. En lo que llevo programando he visto 3 cambios radicales de arquitectura de CPU, usado incontables compiladores e incluso intenté programar uno. Una guia de herramientas y documentos para principiantes cambiaria casi cada 6 meses.

      Comentarios por asm86 | abril 24, 2024 | Responder

  66. Gracias por la respuesta, el avance tecnológico es mucho mas rápido de lo que esperaba, así que como dijiste no serviría de mucho un temario. Así que por lo pronto me infiltrare en las catacumbas del 8086 y 8088 para aprender los fundamentaos y intentaré leer con constancia algunos libros de arquitectura de computadores. Durante mi actual cruzada me surgieron varias preguntas respecto al mismo:

    ¿Por qué en algunos videos y manuales y videos que he visto mencionan el .model small y el las secciones divididas en .code .data y despues veo otros que dicen data segment y code segment ?Sin contar que a veces siemplemente con poner la ubicación ya lo toma como un segmento de codigo como el org2000h que a veces veo que lo ponen otras no.

    En fin, esteré en esta cruzada por mucho tiempo y cualquier consejo que venga de su persona que posee tanta experiencia en el campo será mas que bienvenida y si puede responder este mensaje, lo agradeceré mucho.

    Comentarios por mbrey20 | May 2, 2024 | Responder

    • Te doy un consejo que aprendí muy tarde:

      Todos los libros de programación sirven. En especial los que hablan de tecnologia que ya no está vigente como el 8086. Tal vez no puedas correr el código que viene en los libros sin ayuda de un emulador pero lo que aprendas lo puedes aplicar en sistemas actuales.

      Si quieres empezar entra a los foros de Flatassembler. FASM es un compilador de ASM libre que uso desde hace años. En sus foros tienen muchos ejemplos de código que corre en sistemas modernos. Nada más no te distraigas con las macros. Usalas cuando ya sepas lo que hace el verdadero código.

      Comentarios por asm86 | May 4, 2024 | Responder


Deja un comentario