Create Presentation
Download Presentation

Download Presentation
## August 25, 2008 qatar.cmu/~msakr/15447-f08/

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -

**CS 447 – Computer Architecture Lecture 3Computer**Arithmetic (1) August 25, 2008 www.qatar.cmu.edu/~msakr/15447-f08/**Computers and Arithmetic operations**• How do computers represent numbers? • How about negative numbers? • How do computers add? subtract? multiply? etc… • Hardware or software? • What happens if the resulting number is bigger than the space we have for it? • How about fractions?**Chapter objectives**In this lecture we will focus on the representation of numbers and techniques for implementing arithmetic operations. Processors typically support two types of arithmetic: integer (or fixed point), and floating point. For both cases, we first examine the representation of numbers and then discusses arithmetic operations.**Arithmetic & Logic Unit**• Does the calculations • Everything else in the computer is there to service this unit • Handles integers • May handle floating point (real) numbers • May be separate (math co-processor)**d3**d7 d5 d0 d4 d1 d6 d2 0 2 7 9 0 0 0 3 107 103 104 101 105 100 106 102 Review: Decimal Numbers • Integer Representation • number is sum of DIGIT * “place value” Range 0 to 10n - 1 379210 = 3 103 + 7 102 + 9 101 + 2 100 = 3000 + 700 + 90 + 2**3792**+ 531 ??? 1 “carry 1” because 9+3 = 12 0 4 3 2 3 Review: Decimal Numbers • Adding two decimal numbers • add by “place value”, one digit at a time 3 7 9 2 + 0 5 3 1**b5**b6 b0 b7 b3 b1 b4 b2 1 0 0 0 1 0 0 1 26 23 24 22 21 20 25 27 Binary Numbers • Humans can naturally count up to 10 values, but computers can count only up to 2 values (0 and 1) • (Unsigned) Binary Integer Representation “base” of place values is 2, not 10 011001002 = 26 + 25 + 22 = 64 + 32 + 4 = 10010 Range 0 to 2n - 1**Binary Representation**If a number is represented in n = 8-bits Value in Binary: Value in Decimal:27.a7 + 26.a6 + 25.a5 + 24.a4 + 23.a3 + 22.a2 + 21.a1 + 20.a0 Value in Binary: Value in Decimal:2n-1.an-1 + 2n-2.an-2 + … + 24.a4 + 23.a3 + 22.a2 + 21.a1 + 20.a0**4**0 How to convert from decimal to binary? • Find the biggest power of two smaller than the remaining number • Corresponding digit is one; subtract the number. • Other digits are zero 1 0 0 6 4 3 6 3 2 4 a7 a6 a5 a4 a3 a2 a1 a0 0 1 1 0 0 1 0 0 27 26 25 24 23 22 21 20**Binary Arithmetic**• Add up to 3 bits at a time per place value • A and B • “carry in” • Output 2 bits at a time • sum bit for that place value • “carry out” bit(becomes carry-in of next bit) • Can be done using a function with 3 inputs, 2 outputs carry-in bits 1 1 1 0 0 A bits 1 1 1 0 B bits + 0 1 1 1 sum bits 0 1 0 1 carry-out bits 1 1 1 1 0 B A FA carry out carry in sum**Integer Representation**• Only have 0 & 1 to represent everything • Positive numbers stored in binary • e.g. 41=00101001 • No minus sign • No period • Sign-Magnitude • Two’s complement**Sign-Magnitude**Problems: • Need to consider both sign and magnitude in arithmetic • Two representations of zero (+0 and -0) • Left most bit is sign bit • 0 means positive • 1 means negative • +18 = 00010010 • -18 = 10010010**Two’s Complement**• -3 = 11111101 • -2 = 11111110 • -1 = 11111111 • -0 = 00000000 • +3 = 00000011 • +2 = 00000010 • +1 = 00000001 • +0 = 00000000**Two’s Complement**If a number is represented in n = 8-bits Value in Binary: Value in Decimal:27.a7 + 26.a6 + 25.a5 + 24.a4 + 23.a3 + 22.a2 + 21.a1 + 20.a0 • +3 = 00000011 • +2 = 00000010 • +1 = 00000001 • +0 = 00000000 • -3 = 11111101 • -2 = 11111110 • -1 = 11111111 • -0 = 00000000**Benefits**• One representation of zero • Arithmetic works easily (see later) • Negating is fairly easy • 3 = 00000011 • Boolean complement gives 11111100 • Add 1 to LSB 11111101**-1**0 +1 -2 1111 0000 1110 0001 -3 +2 + 1101 0010 -4 +3 1100 0011 0 100 = + 4 -5 1011 +4 1 100 = - 4 0100 1010 0101 -6 +5 - 1001 0110 +6 -7 1000 0111 +7 -8 2's complement • Only one representation for 0 • One more negative number than positive numbers**Negation Special Case 1**• 0 = 00000000 • Bitwise NOT 11111111 • Add 1 to LSB +1 • Result 1 00000000 • Overflow is ignored, so: • - 0 = 0 **Negation Special Case 2**• -128 = 10000000 • bitwise NOT 01111111 • Add 1 to LSB +1 • Result 10000000 • So: • -(-128) = -128 X • Monitor MSB (sign bit) • It should change during negation**Range of Numbers**• 8 bit 2’s complement • +127 = 01111111 = 27 -1 • -128 = 10000000 = -27 • 16 bit 2’s complement • +32767 = 011111111 11111111 = 215 - 1 • -32768 = 100000000 00000000 = -215**Conversion Between Lengths**• Positive number pack with leading zeros • +18 = 00010010 • +18 = 00000000 00010010 • Negative numbers pack with leading ones • -18 = 10010010 • -18 = 11111111 10010010 • i.e. pack with MSB (sign bit)**Addition and Subtraction**• Normal binary addition • Monitor sign bit for overflow • Take two’s complement of subtrahend and add to minuend • i.e. a - b = a + (-b) • So we only need addition and complement circuits**0 0 1 1**+1 0 1 1 1 1 1 0 0 1 0 1 +1 1 0 1 1 0 0 1 0 010110101011 flip +1 Binary Subtraction • 2’s complement subtraction: add negative 5 - 3 = 2 0101 001111001101 flip +1 2 ignoreoverflow -3 in 2’s complement form 3 - 5 = -2 0011 -2 00010010 flip -5 in 2’s complement form +1 (flip+1 also gives positive of negative number)**Multiplication**• How about this algorithm: result = 0; While first number > 0 { add second number to result; decrement first number; } • Does it work? What is the complexity? • Can you think of a better approach? • Lets do an example 1001 x 100 • What is this in decimal?**Multiplication – longhand algorithm**• Just like you learned in school • For each digit, work out partial product (easy for binary!) • Take care with place value (column) • Add partial products • How to do it efficiently?**Example of shift and add multiplication**How many steps? How do we implement this in hardware?**Multiplying Negative Numbers**• This does not work! • Solution 1 • Convert to positive if required • Multiply as above • If signs were different, negate answer • Solution 2 • Booth’s algorithm**Aside – cost of these operations**• We’d like to be able to finish these operations quickly • Usually in one cycle! • How do we implement add? • Remember the 1 bit full adder? • How many adds do we need for a multiply? • Specialized logic circuits are used to implement these functionalities quickly (e.g., carry look-ahead adders, loop unrolled multiplication)