unidad tipos logica ejemplos definicion control caracteristicas aritmetica actualidad math hardware bit-manipulation cpu alu

math - tipos - unidad de control



¿Cómo funciona la CPU? (4)

Estás un poco equivocado en la parte del signo de bit. No es solo un signo: cada número negativo se convierte en complemento de 2. Si tú escribes:
B = -2
El compilador al compilarlo en binario lo hará:
1111 1111 1111 1111 1111 1111 1111 1110
Ahora cuando quiere agregar 5, la ALU obtiene 2 números y los agrega, una simple adición. Cuando la ALU obtiene un comando para restar, se le asignan 2 números: hace un NO a cada bit del segundo número y hace una adición simple y agrega 1 más (porque el complemento 2 no es para cada bit +1).

Lo básico aquí para recordar es que el complemento 2 fue seleccionado con el propósito de no tener que hacer 2 procedimientos separados para 2 + 3 y para 2 + (- 3).

Tengo algunas dudas básicas, pero cada vez que me siento a probar mis manos en las preguntas de la entrevista, estas preguntas y mis dudas aparecen.

Diga A = 5

B = -2

Yo digo A + B. Supongo que A y B tienen 4 bytes. ¿Cómo hace la CPU esta adición? Entiendo que A tendrá el bit de signo (MSB) como 0 para significar un entero positivo y B tendrá un bit de signo como 1 para indicar un entero negativo.

Ahora cuando en el programa C ++, quiero imprimir A + B, el módulo de adición de ALU (Unidad de lógica aritmética) comprueba primero el bit de signo y luego decide restar y luego sigue el procedimiento de resta. Cómo se hará la resta será mi próxima pregunta.

A = 5

B = 2

¿Quieres hacer una computadora AB tomará un complemento de 2 segundos de B y agregarás el complemento A + 2 y lo devolverás (después de descartar el bit extra a la izquierda)?

A = 2

B = 5

hacer AB ¿Cómo funciona la computadora en este caso?

Entiendo que cualquier tipo de lógica condicional if-then etc., todo se hará en hardware dentro de ALU. computar 2s complemento etc., descartando bit adicional todo se hará en hardware dentro de ALU. ¿Cómo es este componente de ALU?

Gracias,


Piense en términos de dos o tres bits y luego comprenda que estas cosas se escalan hasta 32 o 64 o sin importar muchos bits.

Primero, comencemos con el decimal

99 +22 ===

Para hacer esto vamos a tener algo de "Llevar el uno" en marcha.

11 99 +22 === 121

9 más 2 es 1 llevar el uno, 1 más 9 más 2 es 2 llevar el uno ...

Sin embargo, el punto es notar que para agregar dos números, en realidad necesitaba tres filas, por lo menos para algunas de ellas podría necesitar agregar tres números. Lo mismo con un sumador en un alu, cada columna o bit lane, sumador de bit único, necesita poder agregar dos entradas más un bit de acarreo, y la salida es un resultado de un bit y un acarreo de un bit.

Dado que usaste 5 y 2, permite hacer algunos cálculos binarios de 4 bits

0101 +0010 ===== 0111

No necesitamos llevar esto, pero se puede ver que las matemáticas funcionaron, 5 + 2 = 7.

Y si queremos agregar 5 y -2

11 0101 +1110 ===== 0011

Y la respuesta es 3 como se esperaba, no es realmente sorprendente, pero tuvimos una ejecución. Y como se trataba de un complemento con un número negativo en dos complementos, todo funcionó, no había ningún signo de signo, el complemento a dos lo hace así que no nos importa alimentar el sumador de los dos operandos.

Ahora, si quiere hacer una diferencia sutil, ¿qué pasa si quiere restar 2 de 5, selecciona la instrucción de restar no agregar? Bueno, todos aprendimos que negar en dos complementos significa invertir y agregar uno. Y vimos anteriormente que un sumador de dos entradas realmente necesita una tercera entrada para el arrastre, de modo que se pueda conectar en cascada por el ancho que necesite el sumador. Entonces, en lugar de hacer dos operaciones de agregar, invierta y agregue 1, siendo el primer agregar el real, todo lo que tenemos que hacer es invertir y establecer el acarreo:

Comprenda que no hay lógica de resta, agrega el negativo de lo que sea que lo alimente.

v this bit is normally zero, for a subtract we set this carry in bit 11 11 0101 five +1101 ones complement of 2 ===== 0011

Y qué sabes que obtenemos la misma respuesta ... No importa cuáles sean los valores reales para ninguno de los operandos. si se trata de una operación de adición, coloca un cero en el bit de acarreo y lo alimenta al sumador. Si se trata de una operación de resta, invierte el segundo operando y coloca uno en el acarreo y lo alimenta al mismo sumador. Lo que cae se cae. Si su lógica tiene suficientes bits para mantener el resultado, entonces todo funciona; si no tiene suficiente espacio, se desbordará.

Hay dos tipos de desbordamiento, sin firmar y firmado. Unsigned es simple, es el bit de acarreo. El desbordamiento firmado tiene que ver con la comparación del bit de entrada en la columna msbit con el bit de realización para esa columna. Para nuestra matemática anterior, verá que el carry y el carry de esa columna de msbit es el mismo, ambos son uno. Y sabemos por inspección que un sistema de 4 bits tiene espacio suficiente para representar correctamente los números +5, -2 y +3. Un sistema de 4 bits puede representar los números +7 hasta -8. Entonces, si añadiera 5 y 5 o -6 y -3 obtendría un desbordamiento firmado.

01 1 0101 +0101 ===== 1010

Comprenda que la MISMA lógica de adición se usa para matemática firmada y sin firmar, depende de su código, no de la lógica, definir virtualmente si esos bits se consideraron complementos de dos o no firmados.

Con el caso 5 + 5 arriba, verá que el arrastre en la columna msbit es un 1, pero el resultado es un 0 que significa que la bandera V, el indicador de desbordamiento firmado, será establecido por la lógica. Al mismo tiempo, no se establecerá la ejecución de ese bit que es la bandera C, la bandera de acarreo. Al pensar 4 bits sin signo pueden contener los números 0 a 15, por lo que 5 + 5 = 10 no se desborda. Pero cuando piense en 4 bits firmados, puede contener +7 a -8 y 5 + 5 = 10 es un desbordamiento firmado, por lo que se establece el indicador V.

si / cuando tiene un complemento con instrucciones de acarreo toman el MISMO circuito sumador y en lugar de alimentar el acarreo en un cero se alimenta el indicador de acarreo. Del mismo modo, un resta con préstamo, en lugar de alimentar el acarreo en un 1, el acarreo es un 1 o 0 basado en el estado de la bandera de acarreo en el registro de estado.

La multiplicación es otra historia completa, el binario hace que la multiplicación sea mucho más fácil que cuando se hace con matemáticas decimales, pero usted TIENE que tener diferentes instrucciones de multiplicación sin firmar y firmadas. Y la división es su propia bestia separada, por lo que la mayoría de los conjuntos de instrucciones no tienen una división. Muchos no tienen multiplicación debido a la cantidad de puertas o relojes que quema.


La razón por la que usamos el complemento 2 es que la suma es la misma ya sea que los números sean positivos o negativos: no hay casos especiales que considerar, como los que existen con las representaciones de 1 complemento o de magnitud firmada .

Entonces, para encontrar AB , podemos negar B y agregar; es decir, encontramos A + (-B) , y debido a que estamos usando complemento de 2, no nos preocupamos si (-B) es positivo o negativo, porque el algoritmo de suma funciona de la misma manera.


En notación complementaria de 2: no B = -B -1 o -B = (no B) + 1. Puede verificarse en una computadora o en papel.

Entonces A - B = A + (no B) + 1 que se puede realizar con:

1 bit a bit no

1 incremento

1 Además

Hay un truco para incrementar y disminuir de manera ineficiente usando solo nots y negaciones. Por ejemplo, si comienza con el número 0 en un registro y realiza:

no, neg, no, neg, no, neg, ... el registro tendrá valores:

-1, 1, -2, 2, -3, 3, ...

O como otras 2 fórmulas:

no (-A) = A - 1

- (no A) = A + 1