160 likes | 243 Views
Arithmetic. CPSC 321 Computer Architecture Andreas Klappenecker. Signed Numbers (3bits). Two’s complement. The unsigned sum of an n-bit number with its negative yields? Example with 3 bits: 011 2 = 3 101 2 = -3 1000 2 = 2 n => negate(x) = 2 n -x 101 2 = -2 2 + 2 0.
E N D
Arithmetic CPSC 321 Computer Architecture Andreas Klappenecker
Two’s complement • The unsigned sum of an n-bit number with its negative yields? • Example with 3 bits: • 0112 = 3 • 1012 = -3 • 10002 = 2n => negate(x) = 2n-x • 1012 = -22+ 20
Negating Signed Integers • Suppose that you have an n-bit integer in two’s complement representation • Negate positive to negative: • 00112 = 3 11012 = -3 • invert bits and add 1 • Negate negative to positive • Trick: invert bits and add 1 • -3 = 11012 00102 00112
Addition & Subtraction • Just like in grade school (carry/borrow 1s)0111 0111 0110+ 0110 - 0110 - 0101 1101 0001 0001 • Two's complement operations easy • subtraction using addition of negative numbers0111 = 7 + 1010 = -6 0001
MIPS instructions • lb loads a byte and stores the sign-extended version in a word. • lbu loads a byte and stores it in a word • Which of these two is typically used to process characters?
Logic Gates: AND AND a b c 0 0 0 0 1 0 1 0 0 1 1 1 a c b
Logic Gates: OR OR a b c 0 0 0 0 1 1 1 0 1 1 1 1 a c b
operation result An ALU (arithmetic logic unit) • Let's build an ALU to support the andi and ori instructions • Selection of operation 0 = and, 1 = or • we'll just build a 1 bit ALU, and use 32 of them • Possible Implementation (sum-of-products): a b
S A C B The Multiplexor • Selects one of the inputs to be the output, based on a control input • Build (and/or) ALU using a MUX note: it is called a 2-input mux even though it has 3 inputs! 0 1
Different Implementations • Not easy to decide the “best” way to build something • Don't want too many inputs to a single gate • for our purposes, ease of comprehension is important • Don’t want to have to go through too many gates • Let's look at a 1-bit ALU for addition: cout = a b + a cin + b cin sum = a xor b xor cin
Different Implementations • How could we build a 1-bit ALU for add, and, and or? • How could we build a 32-bit ALU?
What about subtraction (a – b) ? • Two's complement approach: just negate b and add. • How do we negate? • A solution: