450 likes | 557 Views
William Stallings Computer Organization and Architecture. Chapter 9 Computer Arithmetic. Arithmetic & Logic Unit. Does the calculations Almost everything else in the computer is there to service this unit Handles integers May handle floating point (real) numbers. ALU Inputs and Outputs.
E N D
William Stallings Computer Organization and Architecture Chapter 9 Computer Arithmetic Rev. 3 (2005-06) by Enrico Nardelli
Arithmetic & Logic Unit • Does the calculations • Almost everything else in the computer is there to service this unit • Handles integers • May handle floating point (real) numbers Rev. 3 (2005-06) by Enrico Nardelli
ALU Inputs and Outputs Rev. 3 (2005-06) by Enrico Nardelli
Reminder • Let A=an-1an-2…a1a0 be a binary number • Its (decimal) value is: Example: 10010 = 24 + 21 = 16 + 2 = 18 Rev. 3 (2005-06) by Enrico Nardelli
Conversion of integer to binary • Represent (111)10 in pure binary • Repeat division by 2 111:2= 55 remainder 1 55:2= 27 remainder 1 27:2= 13 remainder 1 13:2= 6 remainder 1 6:2= 3 remainder 0 3:2= 1 remainder 1 1:2= 0 remainder 1 • RESULT: 1101111 Rev. 3 (2005-06) by Enrico Nardelli
Integer Representation • Only have 0 & 1 to represent everything • Positive numbers stored in binary • e.g. 41=00101001 • Binary digit = Bit • No minus sign • Negative integer representations: • Sign-Magnitude • Two’s complement Rev. 3 (2005-06) by Enrico Nardelli
Sign-Magnitude • Left most bit is sign bit • 0 means positive • 1 means negative +18 = 00010010 -18 = 10010010 • Problems • Need to consider both sign and magnitude in arithmetic • Two representations of zero (+0 and -0) Rev. 3 (2005-06) by Enrico Nardelli
A better representation:Two’s Complement • Let A=an-1an-2…a1a0 be a n-length binary string • It’s value is in Two’s Complement representation is: if an-1=0 then A is a non-negative number if an-1=1 then A is a negative number Rev. 3 (2005-06) by Enrico Nardelli
Two’s Complement: examples = 70 +64 +4 +2 = -125 -128 +2 +1 = -120 -128 +8 Rev. 3 (2005-06) by Enrico Nardelli
Benefits • Only one representation of zero +0 = 0000 -1 = 1111 +1 = 0001 -2 = 1110 +2 = 0010 -3 = 1101 +3 = 0011 -4 = 1100 +4 = 0100 -5 = 1011 +5 = 0101 -6 = 1010 +6 = 0110 -7 = 1001 +7 = 0111 -8 = 1000 • Arithmetic works easily (see later) Rev. 3 (2005-06) by Enrico Nardelli
Geometric Depiction of Two’s Complement Integers Rev. 3 (2005-06) by Enrico Nardelli
Range of Numbers • 8 bit 2’s complement +127 = 01111111 = 27 -1 -128 = 10000000 = -27 • 16 bit 2’s complement +32767 = 01111111 11111111 = 215 - 1 -32768 = 10000000 00000000 = -215 Rev. 3 (2005-06) by Enrico Nardelli
2’s Complement representation for negative numbers • To represent a negative number using the “two’s complement” technique: • First decide how many bits are used for representation • Then write the modulo of the negative number • Then, change each 0 in 1, each 1 in 0 (Boolean Complement or “one’s complement”) • Finally, add 1 (as the result of Step 3 was a pure binary number) Rev. 3 (2005-06) by Enrico Nardelli
Examples • E.g.: how to represent -3 with 4 bits: • Start from +3 = 0011 • Boolean complement gives 1100 • Add 1 to LSB gives -3 1101 • Represent -20 with 8 bits: • Start from +20 = 00010100 • Bolean complement gives 11101011 • Add 1 11101100 • Negation works in the same way, e.g. negation of -3 is obtained by the “two’s complement” of -3: • Representation of -3 1101 • Boolean complement gives 0010 • Add 1 to LSB gives -(-3)=+3 0011 Rev. 3 (2005-06) by Enrico Nardelli
Negation Special Case 1 • 0 = 0000 • Bitwise NOT 1111 (Boolean complement) • Add 1 to LSB +1 • Result 1 0000 • Carry is ignored, so: • - 0 = 0 OK ! Rev. 3 (2005-06) by Enrico Nardelli
Negation Special Case 2 • -8 = 1000 • Bitwise NOT 0111 (Boolean complement) • Add 1 to LSB +1 • Result 1000 • So: • -(-8) = -8 WRONG ! • Monitor MSB (sign bit) • If it does not change during negation there is a mistake (but for 0!) Rev. 3 (2005-06) by Enrico Nardelli
Conversion Between Lengths • Positive number: pack with leading zeroes +18 = 00010010 +18 = 00000000 00010010 • Negative number: pack with leading ones -18 = 11101110 -18 = 11111111 10010010 • i.e. pack with MSB (sign bit) Rev. 3 (2005-06) by Enrico Nardelli
Addition and Subtraction • Addition: standard • Overflow: when the result needs more bits to be represented • Monitor MSB: if it changes there may be an overflow • When Pos + Pos or Neg + Neg the sign bit should not change: if it does there is an overflow • Subtraction: take two’s complement of subtrahend and add to minuend • i.e.: a - b = a + (-b) • So we only need addition and complement circuits Rev. 3 (2005-06) by Enrico Nardelli
Addition: examples 1100 + -4 0100 = 4 0000 0 1100 + -4 1111 = -1 1011 -5 • + -7 • 0101 = 5 • 1110 -2 1 1 0011 + 3 0100 = 4 0111 7 0101 + 5 0100 = 4 1001 overflow 1001 + -7 1010 = -6 0011 overflow 1 Rev. 3 (2005-06) by Enrico Nardelli
Hardware for Addition and Subtraction Rev. 3 (2005-06) by Enrico Nardelli
Multiplication • Complex • Work out partial product for each digit • Take care with place value (column) • Add partial products Rev. 3 (2005-06) by Enrico Nardelli
Multiplication Example • Multiplicand (11 dec) • Multiplier (13 dec) • Sum partial products • Note: if multiplier bit is 1 copy multiplicand (place value) otherwise put all zeroes • Product (143 dec) • Note: need double length Rev. 3 (2005-06) by Enrico Nardelli
Flowchart for Unsigned Binary Multiplication • A stores the most significant bits of the result • C is the carry bit for A • Q initially stores the multiplier but at the end stores the less significant bits of the result • C, A, Q are right shifted as a whole Rev. 3 (2005-06) by Enrico Nardelli
Execution of Example Rev. 3 (2005-06) by Enrico Nardelli
Unsigned Binary Multiplication Rev. 3 (2005-06) by Enrico Nardelli
Multiplying Negative Numbers • Previous approach does not work! • Solution 1 • Convert to positive if required • Multiply as above • If signs were different, negate answer • Solution 2 • Booth’s algorithm • Uses two’s complement representation • More efficient Rev. 3 (2005-06) by Enrico Nardelli
Real Numbers • …very informally, numbers with the fractional point • Actually, only finite precision real numbers • we need to code the binary point • we need to code the binary point position • Solution: floating point numbers Rev. 3 (2005-06) by Enrico Nardelli
Reminder • Let A=an-1an-2…a1a0 ,a-1,a-2,…,a-m be a binary number • Its (decimal) value is: Example: 1001,1011 = 23 + 20 +2-1 + 2-3 + 2-4 =9,6875 Rev. 3 (2005-06) by Enrico Nardelli
Decimal to binary conversion (1) • Represent (11,6875)10 in pure binary • Integer part: iterate division taking the remainders • Binary representation for (11)10 ? 11:2 = 5 remainder 1 Least Significant Bit 5:2 = 2 remainder 1 2:2 = 1 remainder 0 1:2 = 0 remainder 1 Most Significant Bit • Result: 1011 • N.B.: Result bits are produced in reverse order Rev. 3 (2005-06) by Enrico Nardelli
Decimal to binary conversion (2) • Fractional part: iterate multiplication taking the integer parts • Binary representation for 0,6875 ? 0,6875 x 2 = 1,375 take 1 MSB 0,375 x 2 = 0,75 take 0 0,750 x 2 = 1,5 take 1 0,5 x 2 = 1,0 take 1 LSB • Result: 0,1011 • N.B.: Result bits here are produced MSB to LSB • the procedure sometimes does not converge • stop when the desired precision is reached Rev. 3 (2005-06) by Enrico Nardelli
Real Numbers • Where is the binary point? • Fixed? • Very limited • Moving? • How do you show where it is? • Example: 976.000.000.000.000 = 9,76 * 1014 = 9,76 * 10-14 0,0000000000000976 Rev. 3 (2005-06) by Enrico Nardelli
Floating Point • Represents the value +/- .<significand> * <base><exponent> • “Floating” refers to the fact that the true position of the point “floats” according to the value of the exponent Biased Exponent Significand or Mantissa Sign bit Rev. 3 (2005-06) by Enrico Nardelli
Normalization (10,0101)2 = 10010,1 * 2-3 • Floating Point numbers are usually normalized • exponent is adjusted so that there is a single bit equal to 1 before the binary point • Similar to scientific notation for decimal numbers where numbers are normalized to give a single digit before the decimal point 3123 = 3.123 x 103 = 1001010 * 2-5 = 0,00100101 * 24 Rev. 3 (2005-06) by Enrico Nardelli
Normalization • A normalized number ( 0) has the following form: • The base (or radix) for the exponent is suppose to be 2 (so it is not represented) • Since MSB of the mantissa is always 1 there is no need to represent it +/- 1,bbb…b * 2 +/- E where b {0,1} Rev. 3 (2005-06) by Enrico Nardelli
Representation of Floating Point(IEEE Standard) • Mantissa uses 23 bits to store a 24 bits number in the interval [1,2) • Sign is stored in the first bit • Exponent value is represented in excess or biased notation with 8 bits • Excess (bias) 127 means • 8 bit exponent field • Nominal exponent value has range 0-255 • Subtract 127 (= 28-1-1) to get correct exponent value • Real range of exponent value is -127 to +128 Rev. 3 (2005-06) by Enrico Nardelli
excess (bias) notation • Two parameters are specified: • the number of bits n • the bias value K (usually, K=2n -1 -1) • the string consisting of all 0s represents the value –K • the string consisting of all 1s represents the value –K + 2n-1 1000 = 1 1001 = 2 1010 = 3 1011 = 4 1100 = 5 1101 = 6 1110 = 7 1111 = 8 n = 4 K=7 0000 = -7 0001 = -6 0010 = -5 0011 = -4 0100 = -3 0101 = -2 0110 = -1 0111 = 0 Rev. 3 (2005-06) by Enrico Nardelli
Floating Point Examples 147 = 127+20 107 = 127-20 Rev. 3 (2005-06) by Enrico Nardelli
Expressible Numbers 2-127 -2-127 -(2-2-23)*2128 (2-2-23)*2128 Rev. 3 (2005-06) by Enrico Nardelli
density • Precision decreases with the increase of modulo (representation is denser for smaller numbers) • How many numbers can we represent in the interval [2,4)? • And in the range [4,8)? • they are the same: 223 Note: Finite precision: (10.0/3.0)*3.0 may be different from 10.0 Rev. 3 (2005-06) by Enrico Nardelli
Special cases • Some strings are interpreted as special strings • Two representations for zero (posit. and negat.) • +/- 0 = 0/1 00000000 00000000000000000000000 • Able to represent infinity (posit. and negat.) • +/- = 0/1 11111111 00000000000000000000000 • Non-normalized numbers: • 0/1 00000000 (string different to all 0s) • NAN = Not A Number • Result of an operation which has no solution • Propagated as NAN through subsequent operations • representation: 0/1 11111111 (string different to all 0s) Rev. 3 (2005-06) by Enrico Nardelli
FP Arithmetic: addition and subtraction • Check for zero • Align significands (adjusting exponents) • Add or subtract significands • Normalize result Rev. 3 (2005-06) by Enrico Nardelli
FP Arithmetic: multiplication and division • Check for zero • Add/subtract exponents • Multiply/divide significands (watch sign) • Normalize • Round • All intermediate results should be in double length storage Rev. 3 (2005-06) by Enrico Nardelli
Hexadecimal representation 0000 0 0001 1 0010 2 0011 3 0100 4 0101 5 0110 6 0111 7 1000 8 1001 9 1010 A (10) 1011 B (11) 1100 C (12) 1101 D (13) 1110 E (14) 1111 F (15) • A compact representation for binary numbers • A byte (8 bit) is represented by 2 hex values • Examples: 0011 1100 => 3C 0111 1111 1100 1001 -> 7FC9 • Used for numbers and code Rev. 3 (2005-06) by Enrico Nardelli