Programación en Lenguaje Ensamblador

-El Verdadero Lenguaje de las Máquinas-

Gulliver en el Pais del Ensamblador.

Una de las cosas mas notorias de la antigua guerra entre Intel y Motorola era precisamente la manera en que los bytes se acomodaban en la memoria cuando se movían datos entre esta y el CPU. Intel se considera Little Endian y Motorola Big Endian.

Estos términos fueron descaradamente pirateados de una de las novelas de aventuras mas famosas de la literatura antigua: “Los Viajes de Gulliver”. Esa historia trata de un aventurero que en sus andanzas pasa por paises poblados por enanos, gigantes, se enfrenta a piratas y todas esas cosas. En cierta parte de esas historias este personaje se involucra en una guerra entre 2 naciones. La causa del conflicto era por lo demás absurda, ¡Era sobre como debía romperse un huevo!.

Como bien sabemos, los huevos (de gallina) tienen un extremo mas grueso que el otro. Entonces un bando, los “Little Endian” afirmaban que para romper un huevo había que romperlo por el extremo mas delgado mientras que sus mortales enemigos, los “Big Endian” defendían a capa y espada la idea contraria, de que un huevo debía de romperse por el extremo grueso. En cierto momento, Gulliver pregunta que porqué demonios no rompían el huevo por la mitad como se hace en la mayoría de las cocinas de la gente normal. Cuando vio que esta era la manera mas rápida de quedar mal con ambos bandos decidió mejor callarse.

Y bueno, pues siendo Intel “Little Endian” nos dice que los valores que miden mas de 8 bits deben de ser leidos desde el byte mas significativo. Si recuerdan la nota “Cuantos Bits Tiene un Byte” recordarán que los bits mas significativos están mas a la derecha del registo y que conforme nos movemos a la izquierda va aumentando su valor posicional hasta llegar hasta los mas significativos que son los que están mas a la izquierda. Quiero dejar claro que esto son solo matemáticas y que no tiene nada que ver con mis ideas políticas. Pero veamos un ejemplo de esto:

Supongamos que en EAX tenemos el hexadecimal 12345678 y que queremos guardarlo en una zona de memoria que para simplicidad tiene su offset en cero. Esto es lo que pasaría

EAX = 12345678

mov [00000000], eax

offset 0 1 2 3

00000000: 78 56 34 12

De los 4 bytes que se necesitan para representar el número de 32 bits 12345678 hexadecimal el Byte mas significativo (Referido como LSB) contiene 78. le sigue en valor posicional el que contiene el valor 56, luego el 34 y al final el mas significativo es el que contiene 12. En un editor hexadecimal tradicional da la idea de que un número muy grande se almacena “al reves”. La verdad es que en toda la documentación de Intel, la memoria se representa al reves de como la representan la mayoría de los editores hexadecimales tradicionales. De este modo los offsets avanzan de derecha a izquierda y de abajo hacia arriba. De ahi el término ‘Upper Memory’ usado por los antiguos. Es mejor que se acostumbren a voltear los números grandes, pues cuando entremos a la programación gráfica, un editor hexadecimal que acomodara los valores de derecha a izquierda no nos serviría para nada. He aqui como se vería la operación anterior en un editor hexadecimal del tipo “Little Endian”:

EAX = 12345678

mov [00000000], eax

3 2 1 0 offset

12 34 56 78 :00000000

Esa cosa que dice “mov [00000000], eax” es una instrucción que mueve, o mas bien copia, el contenido del registro EAX a la posición de memoria 00000000. Los corchetes [] indican que 00000000 es una posición de memoria. Mas adelante veremos como trabaja la instrucción MOV. Por ahora, el dibujo que acompaña a esta entrada debería de ser suficiente para entender la diferencia entre Little Endian y Big Endian. Así que no me queda mas que despedirme y advertirles que van a estar programando en Lenguaje Máquina mucho antes de lo que se imaginan. Hasta entonces nos veremos. Mientras ¡Echenle huevos al rompope!. Pero no se les olvide romperlos por el lado mas delgado.

Anuncios

enero 7, 2009 - Posted by | Uncategorized | , , , , , ,

Aún no hay comentarios.

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: