CURSO de ASM 6502 [NES]

NUMERACIÓN BINARIA

Por DaRKWiZaRDX

En esta sección nos adentraremos un poco en el sistema de numeración utilizado por los aparatos electrónicos, el sistema binario. En realidad si eres mayor de 12 años deberías saber el sistema binario, pero por si acaso lo voy a explicar rápidamente. Este sistema cuenta con sólo 2 números, 1 o 0, "encendido" o "apagado", "seteado" o "reseteado", etc. Con esos números debes representar cualquier otro, el método para pasar un número decimal a binario es el siguiente:

"Divides el número por dos (guardando los restos separados) hasta que ya no pueda ser dividido, entonces tomas el resultado final, y le juntas a la derecha todos los restos del último al primero y así se conforma el número."
...dicho así es algo complicado, pero veamos un ejemplo para entenderlo bien.

(En realidad las fórmulas que doy aquí abajo no es necesario hacerlas, ya que puedes usar la calculadora de Windows en modo binario o alguna otra utilidad, pero es algo útil para saberlo :P)
Supongamos que quiero pasar 215 a binario:
(Aquí los números de resto los pongo entre paréntesis debajo del resultado)

Entonces tendría :

215 / 2 = 107 / 2 = 53 / 2 = 26 / 2 = 13 / 2 = 6 / 2 = 3 / 2 = 1
          (1)       (1)      (1)      (0)     (1)     (0)     (1)       

Ya tenemos todos los restos y el resultado final, ponemos primero el resultado final, entonces tenemos: 1XXXXXXX, y si le agregamos todos los restos en orden de derecha a izquierda tendremos 11010111, ese número es 215 en decimal, ¿cómo comprobarlo? Muy simple, pasándolo de nuevo a decimal (por si no me crees xD)

Si queremos pasar un número binario a decimal tendremos que hacer la siguiente operación:
"Tomar cada uno de derecha a izquierda y multiplicarlos por 2 elevado a una potencia que comienza en 0 y suma de a 1."
¡¡¡¡¡¡¡EJEMPLO!!!!! xD

   1    1    0    1    0    1    1    1
x 2^7  2^6  2^5  2^4  2^3  2^2  2^1  2^0
-----------------------------------------
  128   64   0   16    0    4    2    1

Espero que hayas entendido la cuenta, el 1 de más a la derecha multiplica por 2 elevado a 0, y como todo número elevado a 0 da un resultado de 1, la cuenta final es 1 x 1 = 1. En el segundo 1 de derecha a izquierda se lo multiplica por 2^1. Y como 2 elevado a la 1 da un resultado de 2, la cuenta sería 1 x 2 = 2. Y así sucesivamente.

Y ahora sumamos todos los números que nos dio:

128 + 64 + 16 + 4 + 2 + 1 = 215

¡Voila! ^^ Ahí tenemos el número, o podemos hacerlo de la manera fácil, escribimos 215 con la calculadora de Windows en modo decimal, y hacemos clic en el botón para pasar a binario, ¡y ahí lo tenemos! ^^

Operaciones lógicas de binario

El acceso a información a nivel de bit se usa principalmente para comparaciones y poner flags de registros (lo veremos más adelante)

OPERACIÓN AND: (&)

Consiste en comparar los bits de los operandos y comparar cuando 2 son 1 da 1 de resultado, pero como yo soy muy malo para explicarlo con palabras pondré un ejemplo :)

     0 1 1 0 0 1 1 1
AND  0 1 0 1 1 1 0 1
----------------------
     0 1 0 0 0 1 0 1

Como ves sólo cuando los dos bits son 1 da de resultado 1.

OPERACIÓN OR: (|)

Consiste en comparar los bits de los operandos y comparar cuando alguno de los 2 es 1, entonces dará 1 de resultado, pero por el mismo motivo pondré otro ejemplo :P

     0 1 1 0 0 1 0 1
OR   0 1 0 1 0 1 0 1
----------------------
     0 1 1 1 0 1 0 1

Como ves cuando alguno es 1 el resultado es 1.

OPERACIÓN XOR:

Igual a un OR excepto que para que el resultado sea 1, solo 1 de los bits debe ser positivo (1).

     0 1 1 0 0 0 1 1
XOR  0 1 0 1 1 0 0 1
----------------------
     0 0 1 1 1 0 1 0

Sólo cuando un bit es 1, el resultado es 1 :)

¿Y qué resultado obtengo si hago un XOR entre dos números iguales?

... El resultado es 0, simplemente:

Ej:  1 1 0 0 1 0 0 1
XOR  1 1 0 0 1 0 0 1
----------------------
     0 0 0 0 0 0 0 0

NÚMEROS NEGATIVOS

Aunque con 8 bits (1 byte) se pueda llegar a un rango de 0-255 se usan también en bucles y otras cosas los números negativos, que se representan como números más arriba del tope de los números positivos (128). Para hacerlo más fácil, si el MSB (Most significant bit), es decir, el bit de mayor peso (¡el de la izquierda! xD) es 1, entonces lo más probable es que se trate de un número negativo (digo más probable porque 10000000 es $80 = +128), los números mayores a $80 (128 decimal) son negativos mientras que todos los demás son positivos.

$01 -> +1
$02 -> +2
...
$7D -> +125
$7E -> +126
$7F -> +127
$80 -> +128 * ESTE ES EL TOPE DE LOS POSITIVOS)
$81 -> -127
$82 -> -126
$83 -> -125
...
$FE -> -2
$FF -> -1

Espero que se entienda, es realmente simple, igual la NES tiene un flag negativo para
saber cuándo la última operación dio resultado negativo, pero eso se verá después, en el
registro P.

Y así concluye este capítulo xDDD. Fue fácil, ¿no? Aunque, en este momento te preguntarás qué tiene esto que ver con el ASM, lo veremos dentro de muy poco, casi toda la comunicación con hardware se realiza a nivel de bits. Y además es así como se verifican los flags de estado contenidos en el registro P, que veremos en el próximo capítulo. ¡Hasta entonces!

Índice - Siguiente >>