¿Cómo puede una CPU de 8 bits calcular grandes números?

6

Estoy intentando diseñar una CPU de 8 bits que se pueda instruir en Logisim. ¿Es posible calcular grandes números con una CPU de 8 bits?

En una computadora de 32 bits, puedes calcular números mayores de 32 bits, creo que es un truco de software, pero ¿quién puede explicarme cómo funciona?

    
pregunta Med ben Amar

3 respuestas

15

Ciertamente es posible trabajar con números muy grandes, incluso en computadoras de 8 o 4 bits. No es muy eficiente, pero es posible. La forma en que se hace esto es operando en los números en partes, con el apoyo de instrucciones específicas del procesador.

Un microcontrolador de 8 bits común es la serie AVR de Atmel. Para agregar números de 8 bits, usa una instrucción llamada AGREGAR. Esta instrucción se utiliza para sumar dos valores de registro juntos. Por ejemplo, puedes hacer

LDI R16, 5
LDI R17, 10
ADD R16, R17
; R16 = 15

para agregar R16 y R17 y poner el resultado en R16. Para agregar números de 16 bits, básicamente solo haces esto varias veces. Sin embargo, hay un retén: el bit de acarreo. Otra instrucción AVR es ADC, para ADd con Carry. Esto hace exactamente lo mismo que ADD, pero también agrega el indicador de acarreo. Tanto ADD como ADC establecerán el indicador de acarreo si la operación de adición se desborda. Por ejemplo, si agrega 128 a 128, obtiene 0 como resultado con el indicador de acarreo establecido. Si llama a ADC con el indicador de acarreo establecido, agregará 1 al resultado. Aquí hay un ejemplo de adición de 16 bits:

LDI R16, 232
LDI R17, 3
; R17:R16 = 1000
LDI R18, 208
LDI R19, 7
; R19:R18 = 2000
ADD R16, R18
ADC R17, R19
; R16 = 184
; R17 = 11
; R17:R16 = 3000

Esto se puede repetir tantas veces como sea necesario para agregar números grandes. Tenga en cuenta que se requiere una pequeña cantidad de lógica para admitir esto: la capacidad de introducir el indicador de acarreo en el arrastre del sumador.

Se puede usar un proceso similar para multiplicar números. La realización de multiplicaciones de 16 bits en un procesador de 8 bits requiere 4 multiplicaciones de 8 bits y varias adiciones. El procedimiento es exactamente el mismo que multiplicar números por mano un dígito a la vez, excepto que usas bytes en lugar de dígitos. Deberá multiplicar los cuatro pares de bytes posibles y luego agregarlos de acuerdo con sus valores de posición. Ejemplo en AVR ASM:

LDI R16, 232
LDI R17, 3
; R17:R16 = 1000
LDI R18, 208
LDI R19, 7
; R19:R18 = 2000
MUL R16, R18
; R1:R0 = R16*R18 (1s place product)
MOVW R3:R2, R1:R0
; R3:R2 = R16*R18
MUL R16, R19
; R1:R0 = R16*R19 (256s place product #1)
CLR R4
ADD R3, R0
ADC R4, R1
; R4:R3:R2 = R16*R18 + 256*R16*R19
MUL R17, R18
; R1:R0 = R17*R18 (256s place product #2)
ADD R3, R0
ADC R4, R1
; R4:R3:R2 = R16*R18 + 256*(R16*R19+R17*R18)
MUL R17, R19
; R1:R0 = R17*R19 (65536s place product)
CLR R5
ADD R4, R0
ADC R5, R1
; R5:R4:R3:R2 = R16*R18 + 256*(R16*R19+R17*R18) + 65536*R17*R19
; R5:R4:R3:R2 = 2000000

Notará que es exactamente así como trabaja con números en papel a mano, pero en lugar de trabajar con 10 dígitos de base, la CPU trabaja con bloques de bits del tamaño de palabras, en este caso, 8 bits.

Si usa una CPU que puede trabajar con más bits a la vez, trabajar con números grandes se vuelve más fácil ya que requiere menos instrucciones. Sin embargo, puede usar las mismas técnicas para trabajar con números más grandes de lo que el conjunto de instrucciones admite directamente.

    
respondido por el alex.forencich
6

Como usted dijo, las CPU de 32 bits pueden manejar números mayores de 32 bits, entonces ¿por qué una CPU de 8 bits no puede hacer esto?

Si sumas dos números, comienzas con el último bit de ambos. Si uno de ellos es 1, el resultado es 1, si ambos son 1, el resultado es 0, y debe llevar un 1 al cálculo del segundo bit.

Para el segundo bit, tienes los dos bits de los números y el bit transportado. Si uno o todos los tres son 1, el resultado es 1. Si dos o todos son 1, nuevamente debe llevar un 1 al cálculo del tercer bit.

Esto generalmente se hace en hardware, es decir, hay puertas lógicas, solo se ponen los números en las entradas y se obtiene la salida. Tenga en cuenta que si tiene un sumador de 8 bits, también obtendrá el llamado carry flag de la adición de los 8 bits.

Si solo estás agregando dos números de 8 bits, el indicador de acarreo solo indica si el resultado es mayor que 255, el número más grande que puede contener un entero de 8 bits (sin signo).

Si tiene números más grandes, ahora comienza a agregar los bits del segundo byte, y tome en cuenta el indicador de acarreo de la adición anterior durante la adición del primer bit de este byte.

La única diferencia es que una CPU de 32 bits puede agregar 32 bits de una sola vez, por lo que agregar números de 64 bits consta de dos pasos, mientras que una CPU de 8 bits necesita 8 pasos.

De esta manera, puede agregar números de cualquier tamaño en cualquier CPU. Todas las demás operaciones de matemáticas se realizan de manera similar, la CPU más pequeña solo necesita más pasos.

    
respondido por el sweber
2

Cuando sumas dos números con lápiz y papel, trabajas de derecha a izquierda, agregas dos dígitos, registras el resultado y llevas cualquier desbordamiento. Agregar números grandes en una computadora funciona de la misma manera. Cada número está representado por un conjunto de "dígitos" donde cada "dígito" es una palabra de computadora: 8 o 32 bits de ancho en sus dos ejemplos. Cuando se agregan dos de estos números, es exactamente el mismo proceso: agregue dos "dígitos", registre el resultado y lleve cualquier desbordamiento. La diferencia es que cada dígito representa un valor entre 0 y 2 ^ 8 (para un procesador de 8 bits), o un valor entre 0 y 2 ^ 32 (para un procesador de 32 bits). Si se siente cómodo pensando en términos de bases numéricas, la adición de lápiz y papel funciona en la base 10, y la adición por computadora de alta precisión funciona en la base 2 ^ 8 o 2 ^ 32 (o cualquier otra cosa que se adapte mejor al procesador). / p>     

respondido por el Pete Becker

Lea otras preguntas en las etiquetas