Ch3a- 2 EE/CS/CPE Computer Organization Seattle Pacific University Crunching Numbers Topics we need to explore Representing numbers on a computer Negatives, too Hardware Alert! Building hardware to work with Floating Point numbers Building hardware to do logic and math And, Or Addition, Subtraction Comparisons Multiplication and Division
Ch3a- 3 EE/CS/CPE Computer Organization Seattle Pacific University Representation All data on a computer is represented in binary 32 bits of data may be: 32-bit unsigned integer 4 ASCII characters Single-precision IEEE floating point number Who knows... data: As 32-bit unsigned integer: 2,303,067,432 As 32-bit 2’s complement integer: -1,991,899,864 As 4 ASCII characters: ‘??’, ‘F’, ENQ, ‘(‘ Note: Limited ASCII chart on p. 142
Ch3a- 4 EE/CS/CPE Computer Organization Seattle Pacific University ASCII Representation of Numbers Terminal I/O (keyboard, display) only deals with ASCII characters Typically, strings of characters “We’re #1” --> 87,101,44,114,101,32,35,49,0 NULL Termination Note that the number ‘1’ is represented by 49 Numbers in I/O consist of their ASCII representations To output 103, use ASCII values 49, 48, 51 (3 bytes) Outputting 103 (one byte) won’t work ‘1’, ‘0’, ‘3’ code for ‘g’
Ch3a- 5 EE/CS/CPE Computer Organization Seattle Pacific University Number Systems- Negative Numbers What about negative numbers? We need to represent numbers less than zero as well as zero or higher In n bits, we get 2 n combinations Make half positive, half negative... Sign bit: 0-->positive, 1-->negative 31 remaining bits for magnitude First method: use an extra bit for the sign
Ch3a- 6 EE/CS/CPE Computer Organization Seattle Pacific University Sign and Magnitude Representation Two different representations for 0! Note: Example is shown for 4-bit numbers Inner numbers: Binary representation Seven Positive Numbers and “Positive” Zero Seven Negative Numbers and “Negative” Zero Number range for n bits = +/- 2 n-1 -1 Three low order bits represent the magnitude: 0 (000) through 7 (111) Two discontinuities High order bit is sign: 0 = positive (or zero), 1 = negative
Ch3a- 7 EE/CS/CPE Computer Organization Seattle Pacific University Two’s Complement Representation Only one discontinuity now Note: Example is shown for 4-bit numbers Inner numbers: Binary representation Eight Positive Numbers Re-order Negative Numbers to Eliminate Discontinuities Only one zero One extra negative number Note: Negative numbers still have 1 for MSB
Ch3a- 8 EE/CS/CPE Computer Organization Seattle Pacific University 2’s Complement Negation Method #1 To calculate the negative of a 2’s complement number: 1. Complement the entire number 2. Add one Examples: n = 0110= 6 complement n = = 68 n = = add 1 -n =1010 = -6 complement add 1 -n = = -68 complement add 1 -n = = 112 WARNING: This is for calculating the negative of a number. There is no such thing as “taking the 2’s complement of a number”.
Ch3a- 9 EE/CS/CPE Computer Organization Seattle Pacific University 2’s Complement Negation Method #2 To calculate the negative of a 2’s complement number: 1. Starting at LSB, search to the left for the first one 2. Copy (unchanged) all of the bits to the right of the first one and the first one itself Examples: n = 0110= 6 -n = 10 = -6 copy complement n = = 68 -n = = -68 copy complement n = = n = = 112 copy complement 3. Complement the remaining bits
Ch3a- 10 EE/CS/CPE Computer Organization Seattle Pacific University Adding Two’s Complement Numbers (-3) Just add the complete numbers together. Sign taken care of automatically. Ignore carry-out (for now) A carry out from sign bit does not necessarily mean overflow!
Ch3a- 11 EE/CS/CPE Computer Organization Seattle Pacific University Overflow Add two positive numbers to get a negative number or two negative numbers to get a positive number Add two positive numbers to get a negative number or two negative numbers to get a positive number = = +7 Overflow cannot occur when adding a positive and negative number together Overflow occurs when crossing discontinuity Not a discontinuity - No Overflow A carryout from the MSB could mean crossing at either of these places – One is OK, one is Overflow
Ch3a- 12 EE/CS/CPE Computer Organization Seattle Pacific University Detecting Overflow Overflow occurs when: We add two positive numbers and obtain a negative Looking at the sign bit (MSB): C in 0 C out C in 0 C out No overflowOverflow We add two negative numbers and obtain a positive C in 1 C out C in 1 C out OverflowNo Overflow Overflow when carry in to sign bit does not equal carry out C in C out Overflow C in 0 C out No Overflow C in 1 C out No Overflow 0
Ch3a- 13 EE/CS/CPE Computer Organization Seattle Pacific University Signed and Unsigned operations Consider the following: $t0 = $t1 = execute: slt $s0, $t0, $t1 What’s the result? If we mean for $t0 to be 5 and $t1 to be 4,294,967,289 (treat as unsigned integers) then $s0 should get 1 If we mean for $t0 to be 5 and $t1 to be -7 (treat as signed integers) then $s0 should get 0 The default is to treat as signed integers Use sltu for unsigned integers
Ch3a- 14 EE/CS/CPE Computer Organization Seattle Pacific University Using more bits What’s different between 4-bit 2’s complement and 32-bit? MSB has moved from bit 3 to bit 31! Copy MSB of original number into all remaining bits (32-bit 2’s comp.) (32-bit 2’s comp.) Sign Extension bit 2’s comp. To convert from 4-bit 2’s complement to 32-bit: Copy all 4 bits to 4 Least significant bits of the 32-bit number.
Ch3a- 15 EE/CS/CPE Computer Organization Seattle Pacific University Loading a single byte from memory We can read a single 8-bit byte from memory location 3000 by using: lb $t0, 3000($0)# read byte at mem[3000] assuming mem[3000] = 0xF3, we get... $t0: 0xFFFFFFF3 (sign-extension for other 3 bytes) If we only want the byte at 3000 (without extension), used an unsigned load: lbu $t0, 3000($0)# read byte a mem[3000] $t0: 0x000000F3(no sign-extension) 0x prefix means Hex