September 21, 2008
soullost
General
2 Comments
No sabía que poner de titulo xD y, el que tiene, fue lo único que se me ocurrió para describir el video que me pasó ayer Memo por el MSN. Primero dije, que flojera!, pero después pensé que viniendo de Memo podría ser interesante. Y se, tiene escenas muy sorprendentes y chuscas, como los suertudotes que asaltaron un banco XD. Tienen que verlo, no se arrepentirán.
Luego me fije que había un video relacionado de Halo 3:
Que cagado se siente cuando cosas como esas te pasan. Yo recuerdo que jugando halo 3, a veces por mucha suerte, salia sobreviviendo cuando me faltaba un disparo para morir
(te vuelves loco cuando la barra de vida parpadea en rojo).
Que cosas tan bizarras pueden pasar en ocasiones
.
Califica el tema:

Loading ...
September 20, 2008
soullost
Lenguaje Ensamblador, Programación
2 Comments
Una aclaración antes de empezar. El lenguaje ensamblador tiene mucho que ver con arquitectura de computadoras (http://es.wikipedia.org/wiki/Arquitectura_de_computadores) y de hecho, trabaja con muchos conceptos que se generan a partir de esta. No voy a explicar cada uno de estos conceptos, lo que voy hacer es, tratar de dar las bases para que entiendan “cómo” empezar a crear programas en lenguaje ensamblador. Así que, si quieren una base teórica más profunda, pueden buscar referencias en otra parte.
¿Lenguaje ensamblador?
Según wikipedia: http://es.wikipedia.org/wiki/Lenguaje_ensamblador
El lenguaje ensamblador es un tipo de lenguaje de bajo nivel utilizado para escribir programas informáticos, y constituye la representación más directa del código máquina específico para cada arquitectura de computadoras legible por un programador.
Fue usado ampliamente en el pasado para el desarrollo de software, pero actualmente sólo se utiliza en contadas ocasiones, especialmente cuando se requiere la manipulación directa del hardware o se pretenden rendimientos inusuales de los equipos.
Conceptos básicos.
El lenguaje ensamblador tiene contrastes con los lenguajes de programación de alto nivel.
- La estructura de un programa hecho en lenguaje ensamblador es diferente a los lenguajes de alto nivel.
- El lenguaje ensamblador trabaja más directamente con el hardware (con registros del microprocesador, memoria, dispositivos,..,etc.).
- El sistema numérico por excelencia no es el decimal.
Para nuestros programas, disponemos de varios registros, 4 de lo más importantes son:
AX - Acumulador.
BX - Base.
CX - Contador.
DX - Registro.
Cada uno de estos es de 16 bits. Se puede usar sólo la mitad de esos 16 bits, seleccionando la parte correspondiente del registro. Cada uno de estos registros están formados por su parte baje y su parte alta de 8 bits.

Nota: Para el manejo de aplicaciones de 32 bist, los registros pasan a ser: EAX, EBX, ECX, EDX,..,etc.
http://es.geocities.com/e0n_ftp/TallerASM/Imagen1.jpg” alt=”Registros 32bits” />
Existe otro registro importante, es el registro de banderas. El registro de banderas (flags) te proporcionará información al hacer uso de varias operaciones (suma (ADD), por ejemplo).

Otra cuestión importante a mencionar son las Interrupciones. Las interrupciones son un conjunto de instrucciones que detiene el flujo de un programa para hacer una tarea determinada. Por ejemplo, la captura de un carácter del teclado es una interrupción.
Estructura de un programa en lenguaje ensamblador.
No existe una convención establecida para la estructura de un programa en lenguaje ensamblador (no como sucede con otros lenguajes, como C/C++). Como regla de oro, es necesarios la declaración de dos segmentos, la de código (CODE) y la de pila (STACK). En total, hay 4 segmentos principales: Segmento de datos, Segmento de código, Segmento de pila y Segmento Extra.
La diferentes segmentos tienen las siguientes funciones:
Segmento de datos: Contiene la dirección donde inicia la declaración de variables. Aquí, escribiremos nuestras variables.
Segmento de código: Contiene la dirección de inicio donde se encuentran las instrucciones del programa. Aquí, escribiremos todo el código de nuestro programa
Segmento de pila: Contiene la dirección donde se encuentra la pila.
Segmento Extra: Contiene la dirección donde podemos almacenar datos extras.
Hay que aclarar que si existen directivas dependiendo del programa ensamblador (http://es.wikipedia.org/wiki/Assembler) que se utilicé (en mi caso, estoy utilizando TASM como programa ensamblador). En TASM las declaraciones de los segmentos se hace de la forma: .[SEGMENTO].
Para declarar la estructura de un programa básico (que no hace nada), sería de la forma:
; Define el modelo de memoria
;
.MODEL SMALL ; Modelo de memoria
.STACK ; Se necesita una PILA.
.CODE ; Area de codigo
Empieza: ; Etiqueta de comienzo de programa
mov Ax,4c00h ; Regresa a MS-DOS por medio de la
int 21h ; funcion 4c.
END Empieza ; Fin del programa
En TASM también es necesario especificar el modelo de memoria. Además, hay que especificar la función (4c00h) de salir del programa mediante la interrupción 21h de MSDOS, si no, el programa nunca termina y nunca vamos a regresar al prompt.
Programando en lenguaje ensamblador.
Para programar en ensamblador es necesario conocer las instrucciones con las que podemos realizar nuestras tareas. Estas instrucciones se llaman mnemónicos (http://es.wikipedia.org/wiki/Mnemónico). Tienen la siguiente sintaxis:
[nombre] mnemónico [operandos] [;comentarios]
[nombre]. Es una etiqueta que se puede usar (es opcional) para controlar el flujo de nuestro programa.
mnemónico. Es la instrucción a usar.
[operandos]. Son los operandos con los que va a trabajar.
[;comentarios]. Comentarios.
Ejemplo: MOV AX,BX.
Si buscamos la definición de MOV, nos vamos a encontrar que mov sirve para pasar datos de un registro a otro. En este caso, pasamos los datos de BX a AX.
Declaración de variables. La declaración de variables se hace en el segmento .DATA. La sintaxis es de la siguiente forma:
[nombre] Tipo [valor]
Tipo de datos:
DB (bytes), DW (palabras), DD (palabra doble), DQ (palabra cuádruple), DT (diez bytes)
Ejemplo:
Mensaje DB 'Bienvenido!.$' ; Cadena a desplegar
Interrupciones. Existen diversas interrupciones de las que podemos hacer uso. Lo más importante no es aprendernos todas, si no tener una referencia donde fijarnos si existe una interrupción para lo que queremos hacer. Entre las que más se ocupan, son las de MSDOS (si trabajamos en un ambiente con él) y las del BIOS.
Ejemplo:
Interrupción: 21h
Entrada (rutina/función): AH=01h
Descripción: Espera entrada desde el teclado (un carácter).
Salida: Lo que tecleemos lo coloca en el registro AL.
mov Ah,01h ; Llamamos a una funcion del MSDOS
int 21h ; para leer un caracter del teclado
Ejemplo práctico y descripción.
Suma de dos valores de una sola cifra:
.MODEL SMALL ; Modelo de memoria
.DATA ; Segmento de datos
Mensaje DB 'Programa para sumar: $' ; Cadena a desplegar
.STACK ; Se necesita una pila
.CODE ; Area de codgio
Main: ; Etiqueta de comienzo del programa
mov Ax, @Data ; Inicializa DS con la direccion de
mov Ds, Ax ; @data
mov Dx, Offset Mensaje ; Direccion de mensaje en DX
mov Ah, 9h ; para poder desplegarloa traves de
int 21h ; la Int 21h de MSDOS
mov Ah,01h ; Llamamos a una funcion del MSDOS
int 21h ; para leer un caracter del teclado
sub Al,30h ; Ajuste de caracter a numero
mov Bl,Al ; Pasamos el contenido de AL a BL
; Llamamos a una funcion del MSDOS
int 21h ; para leer un caracter del teclado
sub Al,30h ; Ajuste de caracter a numero
mov Cl,Al ; Pasamos el contenido de AL a CL
add Bl,Cl ; Realizamos operacion
add Bl, 30h ; Convertimos resultado a ASCII
mov DX,BX ; Copiamos BX a DX para presentar en
; pantalla
mov ah,02h ; Int 02h mostrar caracter
int 21h ; Muestra en pantalla el valor de DL
mov Ax, 4c00h ; Regresa al MSDOS por medio de la
int 21h ; funcion 4c
END Main ; Fin del programa
Voy a tratar de explicarlo por partes:
Definición de datos e inicio de programa.
.DATA ; Segmento de datos
Mensaje DB 'Programa para sumar: $' ; Cadena a desplegar
Simplemente definimos un mensaje a mostrar en pantalla. Para mostrarlo:
mov Ax, @Data ; Inicializa DS con la direccion de
mov Ds, Ax ; @data
En esta parte, obtenemos la dirección donde inicia el segmento de datos y lo pasamos a Ax, de Ax a Ds.
mov Dx, Offset Mensaje ; Direccion de mensaje en DX
mov Ah, 9h ; para poder desplegarla traves de
int 21h ; la Int 21h de MSDOS
Ahora hacemos un offset a la dirección donde apunta la variable Mensaje, con esto, obtenemos la dirección de Mensaje en DX.
¿Para qué pasamos las direcciones correspondientes a DX y DS?. Porque la rutina Ah=09h de la interrupción 21h (que sirve para desplegar una cadena de caracteres por la pantalla de MSDOS), ocupa estos registros para encontrar la cadena de caracteres a mostrar.
Información de la interrupción.
Sacar un string a la pantalla
INT 21H AH = 9H
Descripción: Su función es la de sacar una cadena de caracteres ASCII por pantalla.
Uso: Entrada: AH = 9H
DS contiene el valor de la dirección del segmento del comienzo de la cadena de caracteres a sacar.
DX contiene el offset de dicha cadena en el segmento anterior.
El último byte de la cadena de caracteres debe ser el carácter $, que no se muestra en pantalla.
Salida: Ninguna
Registros afectados: AX
Captura de datos.
mov Ah,01h ; Llamamos a una funcion del MSDOS
int 21h ; para leer un caracter del teclado
sub Al,30h ; Ajuste de caracter a numero
mov Bl,Al ; Pasamos el contenido de AL a BL
Esta interrupción ya se explicó anteriormente, obtenemos el carácter que pulsamos en Al. Después, pasamos el valor ASCII a numérico para proceder con la operación. Además, respaldamos el número en Bl (para poder ingresar el siguiente número).
La conversión se lleva a cabo restando 30h al valor que pulsamos. Ejemplo, si pulsamos un 3, el valor que se asigna a Al es 33 en hexadecimal (33h), hacemos la operación: 33h -30h = 3h. 3h = 3 en Decimal.
int 21h ; para leer un caracter del teclado
sub Al,30h ; Ajuste de caracter a numero
mov Cl,Al ; Pasamos el contenido de AL a CL
Lo mismo que lo anterior, pero ahora, respaldamos en valor numérico en Cl.
Suma.
add Bl,Cl ; Realizamos operacion
Se hace la suma. Ejemplo: 3+2 =5. El resultado se guarda en Bl con un valor de 5h.
Muestra del resultado.
add Bl, 30h ; Convertimos resultado a ASCII
mov DX,BX ; Copiamos BX a DX para presentar en
; pantalla
mov ah,02h ; Int 02h mostrar caracter
int 21h ; Muestra en pantalla el valor de DL
Antes de mostrar el carácter, debemos convertir el valor número a ASCII para mostrarlo en pantalla. Así que, le sumamos 30h. Siguiendo con el ejemplo anterior:
5h + 30 h = 35h.
3 * 16^1 = 48.
5 * 16^0 = 5.
48 + 5 = 53. El carácter ASCII del valor 53 es ‘5′.
La rutina 02h muestra el carácter que se encuentre en Dl (por eso pasamos el valor de BX a DX, igual sólo se pudo haber pasado la parte baja de los dos registros correspondientes).
Terminación de programa.
mov Ax, 4c00h ; Regresa al MSDOS por medio de la
int 21h ; funcion 4c00h
END Main ; Fin del programa
Regreso al prompt del msdos y termina el programa (END). El Main indica en que etiqueta inicia el programa, en este caso, sólo se maneja esa.
Captura de pantalla:

Quickpost this image to Myspace, Digg, Facebook, and others!
Conclusión.
El lenguaje ensamblador no se limita a un programa de suma y resta (o similares), tiene aplicación en muchas áreas, como la electrónica digital, cracking, .., etc. Espero que con el articulo tengan una idea mejor sobre lo que trata el lenguaje ensamblador y cuando menos, dar las bases para que se animen a probarlo. Nos vemos.
Mirror: http://foros.hackerss.com/t8496/lo-que-he-entendido-del-lenguaje-ensamblador
Califica el tema:

Loading ...
September 18, 2008
soullost
Gentoo
4 Comments

En los foros de gentoo me encuentro con un tema sobre un nuevo proyecto bastante interesante. En Gentoo-user.org, con ayuda del API de Google Maps, se pueden localizar los usuarios de Gentoo regados por todo el mundo!. Si quieres dejar tu huella, basta con registrarse y llenar tu perfil con la correspondiente nacionalidad.
Datos curiosos que he observado:
- Hay hasta el momento sólo 3 usuarios de México (contando conmigo).
- El país con más usuarios hasta el momento es España (19 perfiles).
- Por ahora, hay un total de 80 perfiles creados.
- No sólo los usuarios de gentoo pueden registrarse, existen perfiles del tipo: Desarrollador, Traductor, Deseando utilizar algún día y Odiando a Gentoo.
Yo estaré revisando la página web para ver que nuevos datos interesantes voy encontrando, a todos los compatriotas (aprovechando el mes patrio), les recomiendo registrarse para tener presencia!
.
Califica el tema:

Loading ...