Programación en Lenguaje Ensamblador

-El Verdadero Lenguaje de las Máquinas-

La Puerta está Cerrada

–¿Como comunico Windows y Linux en un mismo sistema?–

puerta rpg

Siguiendo los consejos del buen bushwaca quien en los comentarios me recomendo correr una versión minimalista (yo mas bien diría enana) de Linux llamada Puppy sobre Virtual Box, todo iba bien hasta que topé con un pequenísimo e insignificante obstáculo del que hablaré al final. Por ahora esto fue lo que pasó:

Primero intenté correr el mentado CoLinux, que era una especie de todo en uno que incluía una terminal básica y su propio emulador (o como sea que se llame eso). Me harté de él cuando no pude configurarlo adecuadamente.

Luego, tuve que bajar un poco mi orgullo y hacer caso de los comentarios, donde se mencionaba lo del Virtual Box. Y aunque lo pude instalar aún no logro entender mucho de su funcionamiento básico.

Cuando el Virtual Box dio muestras de funcionar, me di a la tarea de buscar una distribución de linux adecuada para correr en modo virtualizado. Al principio pensaba que no habría mas que diez o veinte distribuciones contando las cuatro o cinco que todos los geeks linuxeros mencionan, pero me fui de espaldas al ver la enorme cantidad de distribuciones que existen. Pareciera que cualquiera con la capacidad de medio configurar linux hubiera hecho su propia distribución.

Confundido apagué la computadora y me puse a hurgar entre la basura de mi habitación de 8 metros cuadrados (como referencia una celda del penal mide en promedio 9) y me encontré un disco de instalación de Ubuntu Linux que me habían regalado en una de esas reuniones fantasmas de geeks llamadas “install fest”. Y aunque logré instalarlo dentro de una de las maquinas virtuales del Virtual box, el sistema me dijo que esa versión de Ubuntu estaba mas obsoleta que una Commodore 64 y que mejor descargara una mas actualizada. ¡Haberme dicho eso antes de perder 6 horas en la instalación!

Aunque había tenido algunas pocas horas de experiencia manejando Ubuntu linux en años pasados no había hecho nada que valiera la pena, solo recuerdo que el sistema te pedía el password maestro hasta para levantarte a cagar y que no quedaba claro donde terminaba el sistema de archivos y comenzaba el hardware de la máquina.

Luego de esto busqué el famoso Puppy de Linux que presumía de su arranque rápido y su “pequeño” tamaño. Pequeño entre comillas porque la imagen iso medía 100 megas, use la ISO para crear un Live CD. ¡Pero la maldita maquina virtual se atascó durande el arranque! Un valioso disco perdido que ahora no sirve ni para portavasos.

La ISO siguió sin funcionar hasta que configuré la maquina virtual para usar el archivo ISO como drive virtual de CD/DVD. Entonces pude continuar el arranque, hasta que llegué a la configuración de video. Parece que el Xorg era demasiado pesado y tuve que conformarme con el Xvesa. A riesgo de decir un disparate, tengo una vaga idea de que la famosa X es algo que controla la interfaz gráfica de un sistema Unixoide como lo es Linux. A la fecha no se la diferencia entre un escritorio, un manejador de ventanas y un servidor X. Solo se que se necesita de toda esa enredada interacción para darle capacidades gráficas a estos sistemas.

Finalmente, luego de casi una semana de estar investigando logré hacer que el mentado Puppy de Linux corriera en modo virtualizado. No pude dejar de compararlo con el famoso MenuetOS, con la diferencia de que MenuetOS hace lo mismo o mas que Puppy con tan solo un disco de 3.5 y 1.44 mb.

Pero era necesario hacer que el sistema corriera como un verdadero sistema en la maquina virtual y no como un Live CD. Lo bueno es que dentro del propio Puppy venían rutinas para instalarlo en el disco duro (en este caso el disco duro virtual). No dejaba de asustarme un poco la posibilidad de que la maquina virtual estuviera mal configurada y acabara por sobreescribir mi disco.

Bueno, al final pude correr en versión virtualizada un sistema operativo tipo linux mas o menos funcional, aunque comparado con otros linux este no tiene tanta burocracia. Esto es bueno tomando en cuenta de que solo se trata de una maquina virtual. Ahora solo quedan 2 problemas por resolver, el primero es que no encontré como configurar el teclado para que funcionara en modo “Right Handed Dvorak” y que no tenía manera de intercambiar archivos entre la máquina virtual y la real. Sobre lo del teclado Dvorak les hablaré otro día pero ahora lo que me importa es el intercambio de archivos entre los 2 sistemas.

Y fue así como topé con la piedra que detiene hoy mis andanzas, la imposibilidad de declarar una zona neutral de intercambio. Hasta donde investigué hay que declarar una “carpeta compartida”en la máquina huesped. (la parte sencilla) y… si supiera que sigue de aquí no estaría escribiendo esto.

Según parece, hay primero que declarar un directorio en el sistema linux y luego, tras un rarísimo y blasfemo conjuro que involucra el comando MOUNT es posible crear la carpeta compartida. Esto es extraño, mas que una carpeta compartida me parece que es algún tipo de periférico de entrada/salida o una especie de portal interdimensional, pues tiene 2 extremos y lo que se pone en uno aparece en el otro por medios mas o menos desconocidos. Veamos lo que he averiguado sobre este asunto.

Se supone, o mas bien supongo porque no se gran cosa de linux, que en el directorio MNT se debe de crear una carpeta que funciona como salida del ‘portal’. De acuerdo con las indicaciones de Virtual Box y algunos foros que he leido por ahí el comando se parece a esto:

mount -t vboxsf share mount_point

Aunque dice algo de las “Guest Additions” que aun no entiendo que significa. Creo que de momento seguiré explorando. Solo escribí esta nota para recordarles que sigo con vida y continúo mis andanzas. Mas adelante les platicaré no solo de la programación en Ensamblador, sino como cosas que parece que no tienen nada que ver con la programación pueden desgraciarle la capacidad para programar a uno hasta entonces, seguiré buscando como crear esta carpeta compartida. Por cierto, no estaría de mas que la tribu de Linux, que hasta ahora solo me ha dado algunas amistosas pero enérgicas palmadas en la espalda me echara una mano con esto.

Anuncios

julio 16, 2009 - Posted by | Uncategorized | , ,

11 comentarios »

  1. Respecto a tu problema fundamental, el de compartir archivos entre windows real y linux virtual no voy a poder ayudarte por que para lo único que uso virtualbox es para correr windows virtual sobre linux real una o dos veces al año con suerte.

    Entre tanto aparece alquien que sepa mas de windows, colaboro con lo que puedo acerca de Linux:

    Si estás con la idea de instalar puppy linux para poder trabajar con ensamblador me parece que has empezado mal. Puppy linux es una ditribución de linux de lo mas minimalista, pensada para correr en escenarios donde el hardware es mas que escaso para cualquier distribución de linux actualizada… Puppy linux hace maravillas corriendo en un pentium mmx de 200mhz con 64Mb de ram, pero ¿De ahí programar ensamblador? Lo veo muy dificil… Los paquetes disponibles para puppy no son los mas actualizados y no estás mantenidos por una comunidad gigantesca de desarrolladores con lo que librerías mal enlazadas e incompatibilidades entre versiones son cosa de todos los días.

    En este sentido, si fuera por recomendarte, te diría que pruebes Gentoo, donde todo se compila desde el código fuente con un cómodo gestor de paquetes pero veo que no te has amigado (ni tienes la intención de hacerlo) con la consola de comandos, así que no me queda otra que sugerirte que pruebes con Ubuntu, Fedora, Mandriva, alguna de esas distribuciones mas “point and click” que están bien mantenidas y disponen de todo lo necesario para programar (No instalado de serie como en Gentoo pero disponible por medio del gestor de paquetes).

    Usualmente en estas distribuciones point and click el usuario que inicia sesión por defecto no tiene privilegios administrativos. Con esto se persigue evitar errores catastróficos. Por eso es que se pide una contraseña para cada vez que sea necesario elevar privilegios de usuario común a superusuario.
    En windows por mas que intentes no podrás borrar la carpeta “windows”, en linux, un usuario con privilegios amdinistrativos puede borrar todo el contenido del disco rígido de muchas formas diferentes y el sistema seguirá funcionando desde la ram, colapsando de a partes…

    Una vez que le hayas tomado la mano a linux, comprenderás que la gran potencia del mismo radica en que justamente no hay una línea que marque la diferencia entre en un archivo y un dispositivo. Para linux todos son archivos, directorios o nodos de dispositivo.
    Esto te permite por ejemplo, tomar lo que está sonando por la placa de sonido y guardarlo en un archivo accediendo directamente al hardware con algo como esto:
    cat /dev/dsp >> Mi_archivo
    O tomar la misma salida de la placa de sonido y enviarla por la red para que suene por los parlantes de otra pc:
    cat /dev/dsp | nc otra_pc y cosas por el estilo.

    El servidor X es el encargado de gestionar y dialogar directamente con el hardware de la pc para proveer de un entorno visual controlado por dispositivos de entrada: Teclado, mouse, touchpad, etc..

    Sobre este entorno gráfico uno puede correr una aplicación puntual (Puedo correr mozilla firefox como única aplicación sobre X) o una serie de aplicaciones interrelacionadas entre si para proveer lo que se conoce como entorno de ventanas o display manager.

    El típico display manager consta de varias aplicaciones separadas o no que te dan un escritorio simil el de windows, con fondo personalizable, íconos para que puedas poner sobre el escritorio, una o mas barras donde gestionar tareas, menú de inicio, botones de acceso rápido, reloj, sensores, título en las ventanas y botones de minimizar, maximizar y cerrar, etc…

    ¿Se entendió la diferencia entre una cosa y la otra?

    X es entorno gráfico y es autosuficiente. Manejador de ventanas es todo lo que hay a la vista, para darle (pero no por que sea estrictamente necesario) usabilidad a X.

    Saludos!

    Comentario por malditonerd | julio 16, 2009 | Responder

    • Gracias, no cabe duda de que cada dia se aprende algo nuevo. Creo que tengo que releer mas despacio la explicacion sobre los manejadores graficos. Ahora que buscar una distribucion mas ‘robusta’ de linux para correr en virtual box puede ahorrarme el problema de la carpeta compartida. He escuchado que hay un buen debugger de Linux llamado GDB. Aunque la unica ventaja de usar un Linux virtualizado solo seria el no tener que cargar con 2 computadoras.
      Vi en un libro algo sobre Fedora, era un libro de Ensamblador para linux. Creo que le dare una probada antes de opinar.

      Comentario por asm86 | julio 16, 2009 | Responder

      • A ver, parece que no se entendió del todo lo que quise decir (si bien es cierto que no se programar ni dos mas dos en ensamblador):

        La posibilidad de encontrarse con herramientas puntuales para editar, compilar,debuggear en puppy linux es mucho menor que en otras distribuciones.
        Simplemente, esa especie de gestor de paquetes que tiene con dos repositorios, uno mantenido por su único desarrollador y el otro por los usuarios, no es suficiente.

        Además está el tema de las dependencias mal mantenidas…

        Que me corrija algún usuario de puppy linux programador de assembler si no estoy en lo cierto (y si es que existe tal cosa).

        Saludos!

        Comentario por malditonerd | julio 17, 2009

      • A ver, antes de que comiencen a volar los toma-hawks, quiero aclarar un punto insignificante sobre la programacion en Ensamblador en general:

        A diferencia de otros lenguajes de programacion, en ensamblador no necesitas entornos de desarrollo tan avanzados como el Microsoft Visual Studio o su equivalente en Linux. Hasta donde he investigado en este sistema basta con un ensamblador como NASM/GAS/o FASM para Linux que se reducen a simples comandos de linea. Ya si uno se quiere ver muy a la moda puede editar sus programas en el Gedit. El GDB y su frontend DDD parecen ser suficientes para depurar programas en ASM. Si el sistema que te muestra el catalogo de los programas que puedes descargar es a lo que se refieren cuando hablan del gestor de paquetes, hasta ahora no he visto grandes herramientas para el desarrollo de Ensamblador en el, al su numero y calidad no se compara con las que existen para desarrollar en otros lenguajes como C, java y todos los demas que se usan para colorerar paginas de internet.

        Un segundo punto es que el plan original era conseguir una version minima de Linux tan solo para ejecutar los programas. Pues la parte de desarrollo se daria en Windows con FASM que es donde por ahora tengo las mejores de mis herramientas. Aunque ahora que lo pienso, puede que desarrollar completamente dentro del sistema Linux Virtualizado suena emocionante. Aunque primero tendria que respaldar algunos de mis videos archivos porque de momento tengo mas megabytes en libres en RAM que en el disco duro. Porque el Ubuntu pide por lo menos 10 Gbytes libres para correr en modo virtualizado.

        Guarden sus animos de pelear cuando hablemos de optimizaciones(tanto en performance como en tiempos de desarrollo). Ahi es donde los fundamentalistas de los sistemas operativos paren chayotes.

        Ahora que asi es como se suma 2 mas 2 en un procesador de Intel:

                mov eax, 2
                add eax, 2
                mov [resultado], eax
        

        Ahora ya sabes como sumar 2 + 2 en ASM.

        Comentario por asm86 | julio 17, 2009

    • Malditonerd me enconto esta parte que comentaste:

      Puppy linux hace maravillas corriendo en un pentium mmx de 200mhz con 64Mb de ram, pero ¿De ahí programar ensamblador?

      Epale! este pendejo no sabe que el ensamblador no se limita en cuanto al procesador con el que vas a programar. independientemente del ambiente donde te encuentres, linux, windows, macOSX, Menuetos.

      Ya se porque Cartman(digo Mario) se encabronaba con los linuxeros.

      Comentario por b1ackpig | julio 17, 2009 | Responder

  2. Que onda cartman, si el problema es pasar un archivo de windows a porque no intentas con un editor hexadecimal en windows abres tu executable, lo copias y luego con un editor hexadecimal de linux pegas el contenido que copiaste, lo guardas, le das al archivo los privilegios de archivo ejecutable y listo. Es una talacha por si no encuentras alguna otra forma.

    Otra que se me ocurre es transmitir el archivo por los sockets de winsock y resivirlo en el emulador de linux.

    Bueno son solo ideas…. Es muy facil decirlo que hacerlo :(

    Saludos desde Zombilandia

    Comentario por b1ackpig | julio 17, 2009 | Responder

    • la unica parte dificil es la de lo copias pues no hay compatibilidad en el portapapeles, aunque creo que esa es una de las funciones ocultas del Virtual Box. Aunque si asi fuera, de una vez hago el ejecutable en FASM de Windows y lo muevo a Linux haciendo Copy/Paste sin pasar por el editor hexadecimal. Ya veremos si es posible la comunicacion con el portapapeles.

      Comentario por asm86 | julio 17, 2009 | Responder

  3. antes que nada Hola ( inclino mi sombrero de copa y sonrio cortezmente)
    Yo comparto archivos entre linux y windows ( winXp – debianLenny )
    mi solucion :
    el proposito es tener una particion en ext2/ext3 ( como espacio neutral ya se que es de linux )bueno ya sea que instales en este a linux o no pero el proposito es tener una particion ext entonces en windows instalas Ext2IFS_1_11.exe ( http://www.fs-driver.org/download.html )es un programa para leer este sistema de archivos ( ext2/ext3 ) desde win
    Y por k windows lee a linux y no al reves ?
    en linux existe un paquete para poder leer fat inclusive ntfs (creo ahora que pienso en las siglas NTFS se me hace chistoso pensar que se llama NewTecnologyFileSystem ( esk noc que signifique ntfs )HAHAHAHAHAHA xD ) pero este paquete no lo probe y como siempre es un desmadre configurar linux es mas comodo como lo planteo ademas que este paquete tiene aun problemas con ntfs ( ya que como sabemos MICROSOFT es especial con sus trabajos y muy muy egoista y no libera la informacion de la forma en la cual trabaja ntff )pero como el FS ext2/ext3 es todo lo contrario es decir , es mas facil escribir en ext que en ntfs bueno esa es mi escusa para hacerlo de esta manera.
    Un pequeño detalle:
    si te dice que no tiene formato la unidad descarga esto
    mountdiag.exe en http://www.fs-driver.org/troubleshoot.html
    y PAPAS te dice como usarlo algo de cambiar no qeu que madres de 256B a 123B bueno eso tiene solucion.
    UPSS otro detalle:
    algunos ejecutables creados en esta particion (ext)no me corren en windows corectamente ( imagino que tienen que ver los permisos ) pero lo soluciono solocando el ejecutable en c: ( ntfs )
    Bueno esos son los detalles per te digo comparto musica videos archivos imagino que los ejecutables son por los permisos queria instalar AgeOfEmpires ( si si si si , hay quienes aun lo jugarmos ) desde d: ( el Ext2IFS_1_11 le asigna una letra ala particion ext2/ext3 ) bueno y no lo corrio , tonslo coloque en el ntfs y pude jugar xD WIII

    Es una solucion en lo personal me funciona espero te pueda servir de algo .

    Comentario por raul = sirmonodemar | julio 18, 2009 | Responder

  4. ¿Volar toma-hawks? jeje…

    Quizás mi comentario haya sonado tosco o provocativo pero no era la intención.

    Así que era tan sencillo sumar en ensamblador… Todos los días se aprende algo viejo!

    Saludos!

    Comentario por malditonerd | julio 18, 2009 | Responder

  5. Si por comodidad(o desconocimiento de adónde te encuentras ó de cómo llegar)viajas en un medio de transporte que te impide elegir con precicsión el lugar donde iràs….Ej: un Bus(colectivo-micro-WINDOWS), lo más seguro es que deberás caminar unas cuantas cuadras para llegar “a ése destino tan ansiado”…..Pero no por éso te la tomas contra la compañía de transportes y se la dás de BARDEADAS(o insultos)a los choferes de Línea pues éstos podrìan reaccionar mal ¿OK?.
    Luego si quieres que un tranporte “te deje en la puerta”, primero: DEBES MANEJAR TÚ MISMO..(o bién “pagarle el TAXI” a programas CARÍSIMOS prohibidos y en la mayoría de los casos lentos, pesadísimos y que no se adaptan a tu forma de pensar y hacer las cosas puesto que sólo tu mismo puedes programar un “way” así; o PIRATEAR sus licencias lo cual puede…(o al menos debería); meterte en problemas legales). Yo elegí aprender a manejar(programar)en vez de andar dando vueltas en el BUS de la máquina), y sobre todo a ABARCAR el entorno de programación que me rodea cuando uso un S.O.(OS) XXX.
    Si no sabes manejar o no conoces “la ciudad”…Pues: a caminar o a andar en el Bus unos meses al menos para orientarte en el entorno pero la frustración puede ser grande al principio y DEBES APOYARTE EN LOS QUE PUEDEN AYUDARTE(que no faltan en el entorno de LinuX-)…Hombre por ningún motivo desearía que te sientas insultado por lo que escribiré (puesto que te privaría de la posibilidad de que logres lo que propuse arriba), pero deberías analizar mejor las cosas antes de tomártelas a “echar tierra” sobre cualquier idea, personas, o cosa que fuere creo yo.
    En fin aclarando un poco más creo que tú te encuentras en la etapa de querer “dejar el Bús” pero sin haber aprendido a manejar….Atrévete a dar el paso o sinó pagarás “Taxis igualmente caros e inapropiados” toda la vida!!!!!!!…..
    P.D: Un “ejemplito” de ayuda que te hubiese ahorrado por lo visto un MONTÓN DE COMPLICACIONES en tu tan negativa primera odisea por “UBU”: LA CONTRASEÑA QUE USAS EN UNA SESIÓN DE LINUX PUEDE SER RECORDADA EN LA SESION AUTOMÁTICAMENTE UNA VEZ AUTENTICADA(como lo hace tu navegador Web si se lo pides)y no debes ingresarla cada vez que realizas tareas administrativas. Un saludo y un abrazo y espero se te pase el encono que te vas a agarrar con la shell cuando la conoscas mejor jejeje!!!!!. Arriba el ánimo y que triunfe la libertad de una vez por todas xD….Nadie dijo que ser libre fuera un trabajo fácil pero en un ser sano debería estar casi sobre cualquier otra prioridad…Recuerda que el arbol cercano es la FRUTA FÁCIL pero no te deja ver el Bosque!!!!!!!!…

    Comentario por SPOT@ | mayo 30, 2010 | Responder

    • Se agradecen los tips, y si algo aprendí de esa experiencia es que es mucho mejor trabajar directamente con linux sin necesidad de hacer “cross-plataform” como tenía pensado hacerlo desde el principio. Hoy en día tengo una computadora solo con linux y ahi me entretengo programando. Afortunadamente soy lo bastante viejo para recordar el MS-DOS y acostumbrarme al shell no fue tan traumático.

      Por otra parte, es interesante ver como programar en ensamblador para linux y windows es casi igual cuando ambas computadoras tienen procesador Intel o compatible y aunque linux puede tener muchas caras su parte interna es la misma en todas las versiones con las que he jugado hasta ahora y a diferencia de los ambientes windows en linux no me siento como delincuente cuando intento aprender su funcionamiento mas interno.
      Puede que en un futuro cercano escriba mas notas con lo que he aprendido de programación en ensamblador para Linux.

      Comentario por asm86 | mayo 30, 2010 | Responder


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: