CSC 320 Chapter #3, Spring 2015

Lebanese American University · Computer Organisation · 10 pages · Dr. Anonymous

All CSC 320 files
CSC 320 Chapter #3, Spring 2015, page 1

Stuck on a question? A tutor can walk you through it.

CSC 320 Chapter #3, Spring 2015, page 2 CSC 320 Chapter #3, Spring 2015, page 3 CSC 320 Chapter #3, Spring 2015, page 4 CSC 320 Chapter #3, Spring 2015, page 5 CSC 320 Chapter #3, Spring 2015, page 6 CSC 320 Chapter #3, Spring 2015, page 7 CSC 320 Chapter #3, Spring 2015, page 8 CSC 320 Chapter #3, Spring 2015, page 9 CSC 320 Chapter #3, Spring 2015, page 10

More CSC 320 files

Show the text of this chapter
Chapter 3 Arithmetic for Computers Chapter 3 — Arithmetic for Computers — 2 Arithmetic for Computers !  Operations on integers !  Addition and subtraction !  Multiplication and division !  Dealing with overflow !  Floating-point real numbers !  Representation and operations §3.1 Introduction Chapter 3 — Arithmetic for Computers — 3 Integer Addition !  Example: 7 + 6 §3.2 Addition and Subtraction !  Overflow if result out of range !  Adding +ve and –ve operands, no overflow !  Adding two +ve operands !  Overflow if result sign is 1 !  Adding two –ve operands !  Overflow if result sign is 0 Chapter 3 — Arithmetic for Computers — 4 Integer Subtraction !  Add negation of second operand !  Example: 7 – 6 = 7 + (–6) +7: 0000 0000 … 0000 0111 –6: 1111 1111 … 1111 1010 +1: 0000 0000 … 0000 0001 !  Overflow if result out of range !  Subtracting two +ve or two –ve operands, no overflow !  Subtracting +ve from –ve operand !  Overflow if result sign is 0 !  Subtracting –ve from +ve operand !  Overflow if result sign is 1 Chapter 3 — Arithmetic for Computers — 5 Dealing with Overflow !  Some languages (e.g., C) ignore overflow !  Use MIPS addu, addui, subu instructions !  Other languages (e.g., Ada, Fortran) require raising an exception !  Use MIPS add, addi, sub instructions !  On overflow, invoke exception handler !  Save PC in exception program counter (EPC) register !  Jump to predefined handler address !  mfc0 (move from system control) instruction is used to retrieve EPC value, to return after corrective action Chapter 3 — Arithmetic for Computers — 7 Multiplication !  Start with long-multiplication approach 1000 × 1001 1000 0000 0000 1000 1001000 Length of product is the sum of operand lengths multiplicand multiplier product §3.3 Multiplication Chapter 3 — Arithmetic for Computers — 8 Multiplication Hardware Initially 0 Chapter 3 — Arithmetic for Computers — 11 MIPS Multiplication !  Two 32-bit registers for product !  HI: most-significant 32 bits !  LO: least-significant 32-bits !  Instructions !  mult rs, rt / multu rs, rt !  64-bit product in HI/LO !  mfhi rd / mflo rd !  Move from HI/LO to rd !  Can test HI value to see if product overflows 32 bits !  mul rd, rs, rt !  Least-significant 32 bits of product –> rd Chapter 3 — Arithmetic for Computers — 16 MIPS Division !  Use HI/LO registers for result !  HI: 32-bit remainder !  LO: 32-bit quotient !  Instructions !  div rs, rt / divu rs, rt !  No overflow or divide-by-0 checking !  Software must perform checks if required !  Use mfhi, mflo to access result Chapter 3 — Arithmetic for Computers — 17 Floating Point !  Representation for non-integral numbers !  Including very small and very large numbers !  Like scientific notation !  –2.34 × 1056 !  +0.002 × 10–4 !  +987.02 × 109 !  In binary !  ±1.xxxxxxx2 × 2yyyy !  Types float and double in C normalized not normalized §3.5 Floating Point Chapter 3 — Arithmetic for Computers — 18 Floating Point Standard !  Defined by IEEE Std 754-1985 !  Developed in response to divergence of representations !  Portability issues for scientific code !  Now almost universally adopted !  Two representations !  Single precision (32-bit) !  Double precision (64-bit) Chapter 3 — Arithmetic for Computers — 19 IEEE Floating-Point Format !  S: sign bit (0 ⇒ non-negative, 1 ⇒ negative) !  Normalize significand: 1.0 ≤ |significand| < 2.0 !  Always has a leading pre-binary-point 1 bit, so no need to represent it explicitly (hidden bit) !  Significand is Fraction with the “1.” restored !  Exponent: excess representation: actual exponent + Bias !  Ensures exponent is unsigned !  Single: Bias = 127; Double: Bias = 1023 S Exponent Fraction single: 8 bits double: 11 bits single: 23 bits double: 52 bits (Exponent Bias) S (1 Fraction) 2 ( 1) x − × + × = − Chapter 3 — Arithmetic for Computers — 20 Single-Precision Range !  Exponents 00000000 and 11111111 reserved !  Smallest value !  Exponent: 00000001 ⇒ actual exponent = 1 – 127 = –126 !  Fraction: 000…00 ⇒ significand = 1.0 !  ±1.0 × 2–126 ≈ ±1.2 × 10–38 !  Largest value !  exponent: 11111110 ⇒ actual exponent = 254 – 127 = +127 !  Fraction: 111…11 ⇒ significand ≈ 2.0 !  ±2.0 × 2+127 ≈ ±3.4 × 10+38 Chapter 3 — Arithmetic for Computers — 21 Double-Precision Range !  Exponents 0000…00 and 1111…11 reserved !  Smallest value !  Exponent: 00000000001 ⇒ actual exponent = 1 – 1023 = –1022 !  Fraction: 000…00 ⇒ significand = 1.0 !  ±1.0 × 2–1022 ≈ ±2.2 × 10–308 !  Largest value !  Exponent: 11111111110 ⇒ actual exponent = 2046 – 1023 = +1023 !  Fraction: 111…11 ⇒ significand ≈ 2.0 !  ±2.0 × 2+1023 ≈ ±1.8 × 10+308 Chapter 3 — Arithmetic for Computers — 22 Floating-Point Precision !  Relative precision !  all fraction bits are significant !  Single: approx 2–23 !  Equivalent to 23 × log102 ≈ 23 × 0.3 ≈ 6 decimal digits of precision !  Double: approx 2–52 !  Equivalent to 52 × log102 ≈ 52 × 0.3 ≈ 16 decimal digits of precision Chapter 3 — Arithmetic for Computers — 23 Floating-Point Example !  Represent –0.75 !  –0.75 = (–1)1 × 1.12 × 2–1 !  S = 1 !  Fraction = 1000…002 !  Exponent = –1 + Bias !  Single: –1 + 127 = 126 = 011111102 !  Double: –1 + 1023 = 1022 = 011111111102 !  Single: 1011111101000…00 !  Double: 1011111111101000…00 Chapter 3 — Arithmetic for Computers — 24 Floating-Point Example !  What number is represented by the single- precision float 11000000101000…00 !  S = 1 !  Fraction = 01000…002 !  Fxponent = 100000012 = 129 !  x = (–1)1 × (1 + 012) × 2(129 – 127) = (–1) × 1.25 × 22 = –5.0 Chapter 3 — Arithmetic for Computers — 27 Floating-Point Addition !  Consider a 4-digit decimal example !  9.999 × 101 + 1.610 × 10–1 !  1. Align decimal points !  Shift number with smaller exponent !  9.999 × 101 + 0.016 × 101 !  2. Add significands !  9.999 × 101 + 0.016 × 101 = 10.015 × 101 !  3. Normalize result & check for over/underflow !  1.0015 × 102 !  4. Round and renormalize if necessary !  1.002 × 102 Chapter 3 — Arithmetic for Computers — 28 Floating-Point Addition !  Now consider a 4-digit binary example !  1.0002 × 2–1 + –1.1102 × 2–2 (0.5 + –0.4375) !  1. Align binary points !  Shift number with smaller exponent !  1.0002 × 2–1 + –0.1112 × 2–1 !  2. Add significands !  1.0002 × 2–1 + –0.1112 × 2–1 = 0.0012 × 2–1 !  3. Normalize result & check for over/underflow !  1.0002 × 2–4, with no over/underflow !  4. Round and renormalize if necessary !  1.0002 × 2–4 (no change) = 0.0625