miércoles, 26 de noviembre de 2014

M68K Assembly: Empezando por lo básico

Después de empezar a leer teoría, asimilar conceptos y ganas de empezar a tocar la parte práctica, he comenzado a trastear con la parte mas básica de todas, mover registros dentro del microprocesador, que es lo que me trae aquí hoy, un pequeño tutorial de como mover registros en ensamblador y para qué se mueven.

Un primer paso para hacer un videojuego para mi consola por excelencia

Es muy importante saber que, al fín y al cabo, la programación a alto nivel, enmascara u oculta esta tarea que en un proceso pequeño puede ser relativamente "sencillo" pero a la hora de hacer un videojuego o en definitiva, un software con algo de complejidad, puede ser todo un infierno trabajar con el, pero lo importante es que realmente, trabajamos con esto, y hoy voy a dar aquí el primer paso de teoría básica para entenderlo.

En computación, las instrucciones son leidas por el procesador en binario, aquí tenemos un ejemplo de instrucción binaria que procesaría realmente un procesador:

0011 0000 0011 1100 0000 0100 1111 0000

Algo que realmente para una persona puede ser sumamente complicado de asimilar como dato, si, no estamos especialmentes acostumbrados al binario y es mucho mas largo y difícil de memorizar que texto simple o una cifra en concreto, pero es lo que el procesador va a entender realmente.

Usando los "mnemonicos" o en otras palabras, las instrucciones que nosotros usamos, que la máquina luego entenderá en su propio lenguaje, es mas simple que usar el código máquina directamente, solo que, desde ensamblador es el lenguaje mas bajo que podemos usar después del lenguaje de la máquina directamente, que ahí si que es agua de la que espero nunca tener que beber.

Las instrucciones se dividen en cuatro partes que veremos a través de este ejemplo asociado por colores para que quede un poco mas claro:

move.w #$04F0,d0

Comando: La orden que vamos a usar, como move, add, sub, jmp, bra, etc... el lenguaje en sí.
Size: El tamaño que vamos a usar de datos, se usa b para byte, w para una palabra y l para una palabra larga.
Operando base: Aquí tendremos el valor que vamos a leer o usar.
Operando destino: Y aquí donde moveremos o manipularemos el valor base.

Y por último explicar los símbolos % y $ que añadimos a la instrucción junto al Operando Base, los cuales son para dar un formato a nuestros número:

%:Especifica que el número será en binario y no un número decimal.
$: Especifica que el número es hexadecimal y no un número decimal.

Por último también tenemos el símbolo # que quiere decir que el valor que tenemos a continuación es un "Valor inmediato", es decir, y espero no equivocarme con ello, es un número en bruto y no una dirección de memoria.

Así que finalmente, para analizar la línera de código de esta primera instrucción de prueba, se mueve una palabra, que es el número 04F0, a la dirección de memoria d0.

¿Para qué quiero mover un registro? ¿Para que sirven el resto de comandos? ¿Como hacer un pequeño programa sencillo?

Creo que es interesante poder tener una pequeña guía desde cero, paso a paso, tanto para quien quiera aprender, como para poder yo mismo afianzar mi conocmiento y poder recordarlo aquí, todas esas preguntas se irán respondiendo en los próximos tutoriales al respecto, que espero que sean muchos.

Últimamente por diversos motivos tengo bastante falta de tiempo para dedicarle al blog pero pronto podré traer no solo tutoriales, si no alguna que otra sorpresa que espero poder dar pronto si las condiciones ajenas a mi persona me lo permiten.

No hay comentarios:

Publicar un comentario