En el complemento de dos, la negación de un número es lo mismo que invertir todos los bits y luego agregar uno. Entonces, para anular '0100110' simplemente invierta los bits a '1011001' y luego agregue '1', dando '1011010'. Eso es todo lo que hay en la negación. (Creo que sabes que \ $ \ overline {1} = 0 \ $ y \ $ \ overline {0} = 1 \ $, ¿sí?)
Una vez que sepa cómo negar un valor, es fácil restar B de A. Solo tiene que negar B y luego agregarlo a A. Así que la mayoría de las computadoras no incluyen un grupo separado de lógica para la resta (lo que tomaría espacio y cuesta dinero) pero solo mantén la misma capacidad de AGREGAR.
Necesitas saber una cosa más. Cómo funciona un sumador básico de ondulación. Este tipo de sumador está formado por un grupo de sumadores de un bit encadenados entre sí. Cada sumador de un bit acepta un bit de A, un bit similar de B y un arrastre que viene de la transferencia del sumador de un bit de siguiente orden inferior. Cada sumador de un bit proporciona una suma de un bit y un arrastre. Entonces hay tres bits en el sumador (\ $ A_i \ $, \ $ B_i \ $, y \ $ Cin_i \ $) y dos bits fuera (\ $ Sum_i \ $ y \ $ Cout_i \ $.) Cada \ $ Cin_i \ $ está conectado a la anterior \ $ Cout_ {i-1} \ $, para que el acarreo de la suma anterior se tenga en cuenta en el siguiente bit. Este es exactamente el mismo proceso que harías al agregar los bits a mano, de manera muy similar a lo que aprendes cuando agregas decimales.
Ahora, este hecho omite lo que sucede con el bit de orden más bajo. ¿Qué obtiene su \ $ Cin_0 \ $? Bueno, con la adición normal donde no ha habido un acarreo de una operación de adición anterior, el valor para ello es '0'. Esto es lo que hace una instrucción ADD normal. También hay una instrucción especial ADDC, que "agrega con acarreo", de modo que un acarreo de un ADD anterior se puede usar en la suma de respuestas de varias palabras. En el caso de ADDC, \ $ Cin_0 = C \ $, donde 'C' es el resultado del bit de acarreo de la instrucción ADD anterior.
Ahora está configurado para comprender cómo se realiza la resta. La ALU generalmente también tiene acceso a las salidas \ $ Q \ $ y \ $ \ overline {Q} \ $ para los bits de las entradas al segundo parámetro para una operación. (Los Flip Flops tienen ambas salidas disponibles, fácilmente). Así que hay un MUX (algo que puede seleccionar entre \ $ B \ $ o \ $ \ overline {B} \ $.) Para restar, el \ $ \ overline { B} \ $ se elige en lugar de \ $ B \ $. Luego, también para realizar el +1 necesario para finalizar la negación, la ALU selecciona '1' como el arrastre al configurar \ $ Cin_0 = 1 \ $. Luego simplemente realiza el mismo ADD antiguo que siempre hace.
Guarda una gran cantidad de hardware de esa manera.
Es probable que una implementación real de un sumador ALU no utilice un sumador de ondulación. No porque no funcionen. Ellas hacen. Pero porque son un poco lentos. Tienes que esperar a que todos esos valores de acarreo fluctúen. Por lo tanto, existen métodos especiales de "mirar hacia adelante" para hacer que los valores de acarreo funcionen más rápido (más que solo una de estas ideas). Pero la idea básica es la misma, independientemente de los arreglos exactos utilizados. Y la instrucción SUB hace el mismo tipo de truco para evitar tener que construir una lógica de sustracción completamente diferente, cuando el sumador puede doblarse tan fácilmente para hacer el mismo trabajo.
De acuerdo con EE.SE, un esquema de comportamiento sería algo como esto:
simular este circuito : esquema creado usando CircuitLab
El esquema anterior podría simplificarse un poco simplemente colocando el bit de control de operación ADD / SUB (0 o 1) directamente en el \ $ C_ {in} \ $ del sumador para evitar el uso del mux. Pero en general, las ALU son un poco más complejas y en realidad hay un mux aún más amplio antes de \ $ C_ {in} \ $ de la ALU (seleccionando al menos uno de los siguientes cuatro: 0, 1, \ $ C \ $ y \ $ \ overline {C} \ $.)
EDITAR: su tabla no es correcta para adición de un solo bit. He circulado las partes incorrectas a continuación:
Pero si la tabla es para restar B de A, entonces necesito una aclaración sobre Cin porque los restadores no suelen estar construidos a partir de restadores de bit único. Por lo tanto, no puedo darle una respuesta directa para su mesa, ya que no estoy seguro de su intención con respecto a ella.
NOTA FINAL: trabajar a través de tres o cuatro muestras. Para hacer eso, inventa cualquier valor A de 4 bits. Luego inventa cualquier valor B de 4 bits. Toma B, invierte TODOS los bits a su opuesto para hacer \ $ \ overline {B} \ $. Ahora agregue \ $ A \ $ a \ $ \ overline {B} \ $ de la manera normal y calcule el resultado \ $ R \ $, eliminando cualquier acarreo del resultado. Ahora simplemente agregue '0001' a R. Ahora tiene su respuesta, para A-B.