# Full Adder modified to make Full Subtractor

by mm391
Tags: adder, modified, subtractor
 P: 61 If I was to make a modification to an 8 bit full adder to make it a an eight bit full subtractor would I put an inverter at the carry in input for the first full adder and then an inverter on one of each of the two inputs going in to each adder. eg an inverter on A3, A2, A1, A0 and leave B3, B2, B1, B0 alone? (Where 0=add, 1=subtract). Thanks for your help. Matt
 Sci Advisor PF Gold P: 1,767 Let's see, if A and B are bit vectors A+B = A xor B + 2* A and B. With a carry input you add it in: A+B w/C = A xor B + 2*A and B + Cin. Overflow in the 2nd addition is the carry output. -A = not A +1, (two's complement)[edited] B-A = Not A + B + 1 = not A xor B + 2* not A and B + 1 Invert A yes. I'm not clear on the role of carry input for subtraction. It is a borrow, right? So it represents a -1 from the lower word and the output carry will represent a -2^4 to be borrowed from the higher bits or in the end a negative flag. So yes I think you have it right: B - A w/C = not A xor B + 2*(not A and B) + (1-C) 1-C = not C since this is a 1-bit term. (I'm working this out using bitwise boolean operations.) It's been a while since I played with machine level arithmetic. What I suggest is that you work through, bit by bit a few examples and see if the result is as you expect.
P: 2,265
 Quote by jambaugh Let's see, if A and B are bit vectors A+B = A xor B + 2* A and B. With a carry input you add it in: A+B w/C = A xor B + 2*A and B + Cin. Overflow in the 2nd addition is the carry output. -A = not A +1, (two's complement)[edited] B-A = Not A + B + 1 = not A xor B + 2* not A and B + 1 Invert A yes. I'm not clear on the role of carry input for subtraction. It is a borrow, right?
no, it's still a carry or "borrow-not".

it's simple. say you have a full adder, where the carry-out bit of one added bit goes into the carry-in bit if the added bit that is adjacent and more significant. for the LSB, the carry in is set to 0 for simple adding, and you set it to 1 for simple subtraction.

you can make the same adder work for adding and subtracting by putting XOR gates in front of the B input bits and the same line (called the "M" input in the diagram cited) that goes into the other input of the XOR gate (that when set to 1, it complements all of the bits going into the B input) that same line goes into the carry-in of the least significant bit to be that added "1" when doing the two's complement. so it's 0 for add and 1 for subtract.

there's a simple diagram at:

http://implement-logic.blogspot.com/...ubtractor.html

and to fill in the FA block, use: