{"id":866,"date":"2019-01-18T22:55:17","date_gmt":"2019-01-18T21:55:17","guid":{"rendered":"https:\/\/lab.fawno.com\/?p=866"},"modified":"2022-03-07T16:32:13","modified_gmt":"2022-03-07T15:32:13","slug":"","status":"publish","type":"post","link":"https:\/\/lab.fawno.com\/en\/2019\/01\/18\/programacion-en-ensamblador\/","title":{"rendered":"","raw":""},"content":{"rendered":"","protected":false,"raw":""},"excerpt":{"rendered":"","protected":false,"raw":""},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_typography_data":[],"_editorskit_blocks_typography":"","_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_es_post_content":"\n
El ensamblador es el lenguaje m\u00e1s bajo, m\u00e1s cercano a la m\u00e1quina, que normalmente uno utiliza. S\u00f3lo hay un escal\u00f3n m\u00e1s: el c\u00f3digo m\u00e1quina. S\u00f3lo hay dos motivos por el cual alguien programar\u00eda en c\u00f3digo m\u00e1quina:<\/p>\n\n\n\n
Estoy convencido que la mayor\u00eda de programadores huir\u00e1n del ensamblador como una lengua maldita. No me extra\u00f1a, al ser un lenguaje de bajo nivel todo tiene que ser controlado por el programador y no existe ning\u00fan tipo de facilidad.<\/p>\n\n\n\n
En junio de 1996 yo estaba finalizando mi segundo t\u00edtulo de FPII: Tecnico especialista en electr\u00f3nica de equipos inform\u00e1ticos<\/em>. La asignatura de programaci\u00f3n estaba orientada a la realizaci\u00f3n de un proyecto, en quinto pod\u00edamos elegir entre C\/C++ o ensamblador. Yo eleg\u00ed este \u00faltimo.<\/p>\n\n\n\n Me gustaba el ensamblador, esa mezcla de control total y tener que hacerlo todo uno mismo era algo a lo que no pod\u00eda resistirme.<\/p>\n\n\n\n Mi proyecto consisti\u00f3 en crear una librer\u00eda para ser utilizada en QuickBasic, la versi\u00f3n \"profesional\"<\/em> de Basic que ten\u00eda Microsoft por aquel entonces. Con el MS-DOS ven\u00eda una versi\u00f3n interpretada que se llam\u00f3 QBasic. Dado que ambos interpretes\/compiladores compart\u00edan sintaxis se les denomin\u00f3 QB. Las diferencias entre QuickBasic y QBasic no s\u00f3lo consist\u00edan en que el primero permit\u00eda compilar nuestros proyectos para crear ejecutables, sino que adem\u00e1s QuickBasic permit\u00eda el uso de librer\u00edas. Oficialmente QBasic no pod\u00eda cargar librer\u00edas, pero como todo eso se pod\u00eda hacer por medio de trucos, b\u00e1sicamente leyendo la librer\u00eda y carg\u00e1ndola a mano en la memoria para que QBasic pudiera atacar las funciones almacenadas en ella.<\/p>\n\n\n\n Escribir\u00eda mi librer\u00eda en ensamblador, pero \u00bfqu\u00e9 contendr\u00eda?. El caso es que me hab\u00eda comprado el libro PC al l\u00edmite<\/strong><\/em> en el que con la escusa de ense\u00f1ar a crear videojuegos los autores (Boris Bertelsons -The CoExistence-<\/em> y Mathias Rasch -Vision Factory-<\/em>) te ense\u00f1aban a programar un mont\u00f3n de cosas fuera de lo habitual<\/em>. Entre esas cosas estaba exprimir los l\u00edmites de las tarjetas gr\u00e1ficas y los modos de v\u00eddeo normales para crear otros modos de v\u00eddeo m\u00e1s adecuados para crear juegos.<\/p>\n\n\n\n As\u00ed que dedicar\u00eda meses a desarrollar una librer\u00eda para que QB pudiera utilizar el Modo X<\/a>. En dicho modo se ten\u00eda una resoluci\u00f3n de 320x240 pixels y 256 colores, realmente asombroso en los a\u00f1os 80 y principios de los 90.<\/p>\n\n\n\n Dado que el libro me explicaba de manera detallada c\u00f3mo crear y utilizar dicho modo gr\u00e1fico la dificultad no estaba en escribir el c\u00f3digo. Adem\u00e1s contaba con todo el c\u00f3digo escrito en Pascal<\/a> por los autores. Sin tener ni idea de Pascal me sirvi\u00f3 perfectamente a modo de pseudoc\u00f3digo<\/a> para entender qu\u00e9 es lo que hab\u00eda que hacer.<\/p>\n\n\n\n As\u00ed pues, la dificultad real y lo que me cost\u00f3 mucho tiempo era descubrir c\u00f3mo ten\u00eda que escribir la librer\u00eda para que esta pudiera acceder a los par\u00e1metros pasados por el usuario en las funciones y c\u00f3mo devolver tipos de datos m\u00e1s all\u00e1 de un entero.<\/p>\n\n\n\n Tuve la inconmensurable ayuda de un par de libros en los que describ\u00eda c\u00f3mo interactuaba el int\u00e9rprete de Basic con las funciones en ensamblador. Sin embargo dichos libros s\u00f3lo daban unas piceladas y no describ\u00edan tipos de datos complejos ni diferencias ente compilador\/int\u00e9rprete que me dieron alg\u00fan que otro dolor de cabeza.<\/p>\n\n\n\n