APENDICE H REVISIÓN DE LA ARITMÉTICA BINARIA Y BCD (DECIMAL CODIFICADO EN BINARIO)

La mayoría de la gente supone que el número 1789 significa mil setecientos ochenta y nueve, ó 1 x 103 + 7 x 102 + 8 x 101 + 9 x 100. Sin embargo, hasta que se defina la base numérica, podría significar


1 x 163 + 7 x 162 + 8 x 161 + 9 x 160

lo que corresponde a hexadecimal, la forma utilizada en un microprocesador.
Para distinguir entre números en diferentes bases, los matemáticos suelen escribir 178910 o simplemente 1789 base 10, o decimal, y 178916 para base 16, o hexadecimal. Debido a que muy pocas computadoras o dispositivos de E/S permiten subíndices, todos los números hexadecimales están precedidos por la notación $. Entonces 1789 significa base 10 y $1789 significa base 16. ¿Por qué hexadecimal? Porque ésta es una forma cómoda de representar 2 dígitos en 8 bits.
El MCS650X es un microprocesador orientado al byte, lo que significa que la mayoría de las operaciones tienen operaciones de 8 bits.
Hay 2 formas de entender 8 bits. El primero es que corresponden a 8 bits individuales en los que 00001000 significa que el bit 3 (bit 7 para la representación) está activado y todos los demás bits están desactivados; o como un número binario de 8 bits, en cuyo caso el valor es


0 x 27 + 0 x 26 + 0 x 25 + 0 x 24 + 1 x 23 + 0 x 22 + 0 x 21 + 0 x 20 = 8 ó $08.

Para fines de análisis lógico, cada bit es único; pero para fines aritméticos, los 8 bits se tratan como un número binario.


Reglas de la Aritmética Binaria:


             0 + 0 = 0
             0 + 1 = 1
             1 + 0 = 1
             1 + 1 = 0 con un Acarreo	

El acarreo ocurre cuando el número resultante es demasiado largo para la base. En decimal, 8 + 4 = 2 + 10.
En hexadecimal, $8 + $4 = $C (Ver detalles de la notación hexadecimal), de modo que 8 + 4 tiene un acarreo en base 10 pero no en base 16.
Usando estas reglas para sumar 8 + 2 en binario nos da lo siguiente:


00001000 8 1 x 23
00000010 +2 1 x 21
00001010 10 1 x 23 + 1 x 21

Por lo tanto, cualquier número del 0 al 255 se puede representar en 8 bits y la suma binaria se puede realizar utilizando la ecuación básica de suma binaria, Rj =(Aj Bj Cj-1), donde tal como se definió anteriormente, es la notación de la operación «O Exclusivo».
En la mayoría de las aplicaciones, también es necesario restar. Las operaciones de resta requieren una implementación de hardware diferente o, en su defecto, una nueva forma de representar números.
Una combinación de lo anterior es implementar un inversor simple en cada bit.
Esto produciría


     00001100    12
     11110011   -12	

Sin embargo, al restar 12 con 12, el resultado también debería ser 0.


     00001100   +12
     11110011   -12
     11111111     0	

Sin embargo, si se suma el Acarreo al número complementado:


            1    Acarreo
     00001100    12
     11110011   -12
     00000000 =   0	

Si en lugar de representar -12 como complemento de 12, se representa como complemento más acarreo, se obtiene lo siguiente:


     11110011 = 12
            1 = Acarreo
     11110011   -12
     00001100 = +12
     00000000 =   0	

A esta representación se llama complemento a dos y representa la forma en que se guardan los números negativos en los microcomputadores. A continuación se muestran ejemplos de números negativos representados en forma de complemento a dos.


-0 = 00000000
-1 = 11111111
-2 = 11111110
-3 = 11111101
-4 = 11111100
-5 = 11111011
-6 = 11111010
-7 = 11111001
-S = 11111000
-9 = 11110111	

La notación Hexadecimal es la representación de números en base 16. La siguiente tabla muestra las ventajas de esta notación:


            Hexadecimal     Binario     Decimal
                 0           0000        00
                 1           0001        01
                 2           0010        02
                 3           0011        03
                 4           0100        04
                 5           0101        05
                 6           0110        06
                 7           0111        07
                 8           1000        08
                 9           1001        09
                 A           1010        10
                 B           1011        11
                 C           1100        12
                 D           1101        13
                 E           1110        14
                 F           1111        15	

Dado que 16 es múltiplo de 2, la notación hexadecimal es una abreviatura conveniente para la representación de 4 dígitos o bits binarios. Las reglas de la aritmética también se cumplen.


                         Binario       Hexadecimal

                        0100 1111      4F
                      + 0110 0010    + 62
                        1011 0001      Bl	

Para aprovechar esta abreviatura, todas las direcciones de este manual se muestran en notación hexadecimal. Cabe señalar que el lector deberá aprender a operar en Hexadecimal lo antes posible. La traducción continua a decimal requiere mucho tiempo y es propensa a errores. Trabajar en hexadecimal y binario le obligará rápidamente a aprender la manipulación hexadecimal y a familiarizarse a trabajar con esta cómoda representación.
Aunque muchas operaciones se pueden realizar exitosamente con operaciones binarias, algunas se realizan mejor en modo decimal. Aunque el uso de un carácter decimal por byte sería una forma legítima de resolver este problema, se trata de un uso ineficiente de la capacidad del byte de 8 bits.
El microprocesador permite el uso de representación BCD empaquetada. Esta representación es, en forma de 4 bits:


                               0 = 0000
                               1 = 0001
                               2 = 0010
                               3 = 0011
                               4 = 0100
                               5 = 0101
                               6 = 0110
                               7 = 0111
                               8 = 1000
                               9 = 1001	

En BCD, el número 79 está representado por:


                          Binario    BCD   Hexadecimal
                         01111001 =  79 =  79	

El microprocesador tiene esto en cuenta automáticamente y corrige el hecho de que


                  Decimal    BCD       Hexadecimal
                    79   = 01111001   79 = 01111001
                   +12   = 00010010   12 = 00010010
                    91   = 10010001   88 = 10001011	

La única diferencia entre la representación Hexadecimal y BCD es que el microprocesador se ajusta automáticamente al hecho de que BCD no permite valores hexadecimales de la A a la F durante las operaciones de suma y resta.
El desplazamiento que sigue a una instrucción de bifurcación está en forma de complemento a dos con signo, lo que significa que


                            $+50 = +80 = 01010000
                          y $-50 = -80 = 10110000
                                Prueba = 00000000	

El signo de esta operación está en el bit 7, donde un 0 es igual a positivo y un 1 es igual a negativo.
Este bit es correcto para la representación en complemento a dos, pero también indica al microprocesador si debe considerar el acarreo o el préstamo del byte superior de la dirección.
Los siguientes cuatro ejemplos representan las combinaciones de compensaciones (offsets) que pueden ocurrir (Todas las notaciones están en hexadecimal):
Ejemplo H.4.1: Referencia hacia adelante, sin cruce de página


                                  0105                  BNE
                                  0106                  +55
                                  0107             Siguiente OP CODE	

Para calcular la siguiente instrucción, si se tomó la bifurcación:


                                 Offset       +55 01010101
                                 Dirección Inferior
                                  del siguiente
                                  OP CODE      07 00000111
                                               5C 01011100	

sin acarreo, dando como resultado 015C.


Ejemplo H.4.2: Referencia hacia atrás, sin cruce de página


                           015A     BNE
                                    
                           015B     -55
                                    
                           015C     Siguiente OP CODE	

Para calcular si se toma la bifurcación,


                  Offset            -55 = AB = 10101011
                + Dirección Inferior del
                   Siguiente OP CODE     +55 = 5C = 01011100
                                     07   07   00000111	

Debido al desplazamiento negativo se espera un acarreo, el que se ignora, lo que nos da como resultado 0107.


Ejemplo H.4.3 : Referencia hacia atrás, con cruce de página


                            0105     BNE
                            0106     -55
                            0107     Siguiente OP CODE	

Para calcular si se toma la bifurcación, primero calcule el byte inferior


                   Offset           -55 = AB = 10101011
                   Dirección Inferior del
                    Siguiente OP CODE     07 = 07 = 00000111
                                     B2 = B2 = 10110010	

No hay acarreo de una compensación negativa; por lo tanto, se debe realizar un acarreo:


                                     -1 = -1 = FF = 11111111
                     + Byte Superior    = 01 = 01 = 00000001
                                          00   00   00000000	

Esto da como resultado 00 B2.


Ejemplo H.4.4: Referencia hacia adelante, con cruce de página


                           00B0     BNE

                           00B1     +55

                           00B2     Siguiente OP CODE	

Para calcular la siguiente instrucción si se toma la bifurcación.


                       Offset        55 = 01010101
                       Byte Inferior
                        del Siguiente
                        OP CODE      B2 = 10110010
                                     07   00000111	

con acarreo de número positivo.


                                 +1   1 = 00000001
                      Byte Superior  00 = 00000000
                                      1 = 00000001	

lo que nos da 0107.


https://www.atariware.cl/archivos/mcs6500/apph_01.webp
https://www.atariware.cl/archivos/mcs6500/apph_02.webp
https://www.atariware.cl/archivos/mcs6500/apph_03.webp
https://www.atariware.cl/archivos/mcs6500/apph_04.webp
https://www.atariware.cl/archivos/mcs6500/apph_05.webp
https://www.atariware.cl/archivos/mcs6500/apph_06.webp