CURSO DE ASSEMBLER
Por Willy Soft
2. Sistemas numéricos decimal, binario y hexadecimal.
I. Decimal:
¿Se han fijado que, cuando niños, un número como el 253 le decíamos: “2 centenas, 5 decenas y 3 unidades”? Bueno, a eso nos remontaremos, y no porque tenga una pobre opinión de su inteligencia, sino porque nos puede servir de base para este capítulo.
Los números que nosotros conocemos, como 253, 403, 523, etcétera, están escritos en un formato conocido como decimal. ¿Por qué se llama así? Porque una cantidad se expresa como combinación de entre 10 cifras, en este caso, del 0 al 9.
Ejemplos:
- 253 = 2 centenas, 5 decenas, 3 unidades = 2*100 + 5*10 +3*1
- 4700 = 4*1000 + 7*100 + 0*10 + 0*1
Y así, sucesivamente. Si miran atentamente, verán que cada cifra es multiplicada por potencias de a 10, es decir:
- 253 = 2*(10^2) + 5*(10^1) + 3*(10^0)
- 4700 = 4*(10^3) + 7*(10^2) + 0*(10^1) + 0*(10^0)
II. Binario:
En general, cualquier cantidad la puedes expresar como una suma de combinaciones de potencias de 10. Para el caso de los números binarios, lo que se utiliza es la base 2. Por lo tanto, se utilizan los números 0 y 1.
Ejemplos:
- 1101 = 1*(2^3) + 1*(2^2) + 0*(2^1) + 1*(2^0) = 8 + 4 + 0 + 1 = 13
- 1010 = 10 en decimal.
Por ejemplo: queremos transformar los siguientes números binarios a decimal:
00000011 |
00000110 |
00001001 |
00010001 |
11001100 |
Para convertir un numero binario a decimal (o decimal a binario) podemos usar la siguiente tabla:
128 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
|
DEC |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
= |
3 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
= |
6 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
= |
9 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
= |
17 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
= |
204 |
Basta con sumar el número decimal que sale en la parte de arriba de la tabla asociandolo a cada "1" del numero binario que queremos convertir.
III. Hexadecimal:
En el caso del sistema numérico hexadecimal es lo mismo, pero en vez de usar la base 10, utilizan la base 16. Ahora la pregunta del millón: ¿cómo expreso números del 0 al 15?. Fácil: utilizando losnumerosdel0al9máslas letras de la A a la F , de esta forma:
Número decimal |
Número hexadecimal |
0 |
0 |
1 |
1 |
2 |
2 |
3 |
3 |
4 |
4 |
5 |
5 |
6 |
6 |
7 |
7 |
8 |
8 |
9 |
9 |
10 |
|
11 |
B |
12 |
C |
13 |
D |
14 |
E |
15 |
F |
Como un número hexadecimal se escribe de manera “parecida” a la numeración decimal, como convención lo que haremos será anteponer un signo “$” previo al número. Por ejemplo: los números $18, $23, $10 son números hexadecimales. Y los números 18, 23, 10 son números decimales.
Ahora bien, veamos algunos ejemplos:
- $24 = 2*(16^1) + 4*(16^0) = 2*16 + 4*1 = 36 en decimal.
- $600 = 6*(16^2) + 0*(16^1) + 0*(16^0) =1536
- $3E8 = 1000
Ahora, ¿de qué sirve la numeración hexadecimal con el Atari? Sirve para simplificarnos un poco la vida, ya que el direccionamiento del Atari 8-bits se compone de 2^16 (65536) bytes o, dicho de otro modo, 64 kilobytes, numerados desde el $0 hasta el $FFFF (0 a 65535 en decimal).
¿Y qué tanto eso? Bueno, les explico: la memoria del Atari 8-bits se divide en “páginas” (pages) de 256 bytes. La primera página es la “página cero” (zero page), correspondiente a las posiciones 0 a la 255. Después tenemos la “página 1”, de 256 a 511, página 2: de 512 a 767, y así, sucesivamente.
Como pueden ver, no es fácil recordar las posiciones de cada página, así que el sistema hexadecimal nos simplifica la vida. ¿Cómo? Así:
Número de página |
Posiciones decimales |
Posiciones hexadecimales |
0 ($0) |
0-255 |
$0-$FF |
1 ($1) |
256-511 |
$100-$1FF |
2 ($2) |
512-767 |
$200-$2FF |
3 ($3) |
768-1023 |
$300-$3FF |
… |
|
|
16 ($10) |
4096-4351 |
$1000-$10FF |
… |
|
|
255 ($FF) |
65280-65535 |
$FF00-$FFFF |
¿Ven? Mucho más práctico.
Otra utilidad que tiene el usar el sistema hexadecimal es que convertir de ese sistema al sistema binario de ocho dígitos (ocho bits) es muy fácil.
Por ejemplo: queremos transformar los siguientes números binarios a hexadecimal:
00000011 |
00000110 |
00001001 |
00010001 |
11001100 |
Basta con usar la siguiente tabla:
HEXADECENAS |
UNIDADES |
|
|
||||||
8 |
4 |
2 |
1 |
8 |
4 |
2 |
1 |
|
HEX |
|
|
|
|
|
|
|
|
|
|
Se copia el número de derecha a izquierda a partir del “1” de las unidades y se procede a sumar cada subgrupo (unidades y hexadecenas) por separado, quedando de esta forma:
HEXADECENAS |
UNIDADES |
|
|
||||||
8 |
4 |
2 |
1 |
8 |
4 |
2 |
1 |
|
HEX |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
= |
$3 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
= |
$6 |
0 |
0 |
0 |
0 |
10 |
0 |
0 |
1 |
= |
$9 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
= |
$11 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
= |
$CC |
Eso nos ayudará mucho para crear nuestros primeros programas.
En el próximo capítulo veremos cómo crear nuestro primer ejecutable Atari.