Announcements Quiz #1 In class Thursday, July 1st Covers Virtual machine (levels) Computer languages (levels) General architecture (CISC) Internal/external representation VonNeumann architecture (stored program) Instruction Execution Cycle CPU, ALU, registers, buses, etc Signed/unsigned integer IEEE floating-point Binary, decimal, hexadecimal Parity Characters (table provided) Integer arithmetic Permitted: Calculator and one 8x11 notesheet (one sides) No sharing Today’s topics More internal representation External representation Signed/unsigned integers Binary, decimal, hexadecimal number systems Binary arithmetic Floating-point representation Error-detecting and error-correcting codes Other representations Every integer number has a unique representation in each "base" 2 Hexadecimal is commonly used for easily converting binary to a more manageable form. example 16-bit binary hexadecimal: Binary 0001 0111 1011 1101 Hexadecimal 1 7 B D Write it as 0x17BD or 17BDh Converting decimal to hexadecimal Use same methods as decimal to binary The only difference is the place values Example decimal to hexadecimal 157 decimal = 9D hex(0x9D or 9Dh) … or convert to binary, then to hex Negative hex (signed integers) How can you tell if a hexadecimal representation of a signed integer is negative? Recall that a 16-bit signed integer is negative if the leftmost bit is 1 16-bit (4 hex digits) examples: 0x7a3e is positive 0x8a3e is negative 0xFFFF is negative Character and control codes Letters, digits, special characters … are represented internally as numbers ASCII256 codes (1-byte) e.g., 'A' … 'Z' are codes 65 - 90 e.g., '0' … '9' are codes 48 - 57 Unicode 65,536 codes (2-byte) Some codes are used for controlling devices e.g., code 10 is “new line” for output device e.g., code 27 is “escape” Device controllers translate codes (devicedependent) All keyboard input is character (including digits) Digits Digits entered from the keyboard are characters What happens if we add ‘3’ + ‘5’? E.G., ‘0’ is character number 48, … ‘9’ is character number 57 The answer is ‘h’ Numeric data types require conversion by the input/output operations Neutral representation Inside the computer Bytes, words, etc., can represent some finite number of combinations of off/on switches. Each distinct combination is called a code. Each code can be used to represent: numeric value memory address machine instruction keyboard character Representation is neutral. The operating system and the programs decide how to interpret the codes. Arithmetic operations The following examples use 8-bit twoscomplement operands Everything extends to 16-bit, 32-bit, n-bit representations. What is the range of values for 8-bit operands? The usual arithmetic operations can be performed directly in binary form with n-bit representations. Addition Specify result size (bits) Use the usual rules of add and carry With two operands, the carry bit is never greater than one 0+0+1 = 1, 0+1+1 = 10, 1+0+1 = 10, 1+1+1 = 11 Example: 00101101 + 00011110 01001011 How does overflow occur? Subtraction Use the usual rules Order matters Borrow and subtract Example: … or negate and add Example: How does underflow occur? Verification Perform operation on binary operands Convert result to decimal Convert operands to decimal Perform operation on decimal operands [Convert result to binary] Compare results Multiplication Usual algorithm Repeated addition … or shift left (and adjust if multiplier is not a power of 2) Check for overflow Division Usual algorithm Repeated subtraction … or shift right (if divisor is a power of 2) too complicated if divisor is not a power of 2 Check underflow for remainder Arithmetic operations Note: all of the arithmetic operations can be accomplished using only add complement Floating-point representation “decimal” means “base ten” “floating-point” means “a number with an integral part and a fractional part Sometimes call “real”, “float” Generic term for “decimal point” is “radix point” Converting floating-point (decimal binary) Place values: 25 24 23 22 21 20 2-1 32 16 8 4 Integral part 2 2-2 2-3 1 0.5 0.25 0.125 2-4 2-5 0.0625 0.03125 Fractional part Example: 4.5 (decimal) = 100.1 (binary) Converting floating-point (decimal binary) Example: Method: 6.25 = 110.01 6 = 110 (Integral part: convert in the usual way) .25 x 2 = 0.5 (Fractional part: successive multiplication by 2) .5 x 2 = 1.0 (Stop when fractional part is 0) 110.01 Example: 6.2 110.001100110011… 6 = 110 .2 x 2 = .4 x 2 = .8 x 2 = .6 x 2 = .2 x 2 = 0.4 0.8 1.6 1.2 0.4 (repeats) 110.0011 0011 0011 Internal representation of floatingpoint numbers Some architectures handle the integer part and the fraction part separately Most use a completely different representation and a different ALU (IEEE standard) Range of values for 32-bit Slow Approximately -3.4 x 1038 … +3.4 x 1038 Limited precision Approximately -1.4 x 10-45 … +1.4 x 10-45 IEEE 754 standard single-precision (32-bit) double-precision (64-bit) extended (80-bit) 3 parts 1 sign bit "biased" exponent (single: 8 bits, double: 11 bits extended: 15 bits) "normalized" mantissa (single: 23 bits, double: 52 bits extended: 64 bits) Examples: Sign Biased exponent Normalized mantissa 6.25 in IEEE single precision is 0 10000001 10010000000000000000000 0100 0000 1100 1000 0000 0000 0000 0000 40C80000 hexadecimal 6.2 in IEEE is 0 10000001 10001100110011001100110 0100 0000 1100 0110 0110 0110 0110 0110 40C66666 hexadecimal Examples: 6.25 in IEEE single precision 6.25 (decimal) = 110.01 (binary) Move the radix point until a single 1 appears on the left, and multiply by the corresponding power of 2 = 1.1001 x 22 … so the sign bit is 0 (positive) … the “biased” exponent is 2 + 127 = 129 = 10000001 … and the “normalized” mantissa is 1001 (drop the 1, and zero-fill). 0 10000001 10010000000000000000000 0100 0000 1100 1000 0000 0000 0000 0000 40C80000 hexadecimal Examples: 6.2 in IEEE is 6.2 (decimal) = 110.001100110011… (binary) Move the radix point until a single 1 appears on the left, and multiply by the corresponding power of 2 = 1.10001100110011… x 22 … so the sign bit is 0 (positive) … the “biased” exponent is 2 + 127 = 129= 10000001 … and the “normalized” mantissa is 10001100110011… (drop the 1). 0 10000001 10001100110011001100110 0100 0000 1100 0110 0110 0110 0110 0110 40C66666 hexadecimal Example: What decimal floating-point number is represented by C1870000H? 1100 0001 1000 0111 0000 0000 0000 0000 1 10000011 00001110000000000000000 Sign Biased exponent Normalized mantissa … so the sign is negative … the “unbiased” exponent is 131 - 127 = 4 … and the “unnormalized” mantissa is 1.00001110000000000000000 (add the 1 left of the radix point). Move the radix point 4 places to the right: 10000.111 -10000.111 = -16.875 Internal representation Regardless of external representation, all I/O eventually is converted into electrical (binary) codes. Inside the computer, everything is represented by gates (open/closed). Problem with Internal Representation Since the number of gates in each group (byte, word, etc.) is finite, computers can represent numbers with finite precision only. Examples: Suppose that signed integer data is represented using 16 bits. The largest integer that can be represented is 65535. What happens if we add 1 ? 0 What happens when we need to represent 1/3 ? Representations may be truncated; overflow / underflow can occur, and the Status Register will be set Limited precision for floating-point representations Looking inside … 11010110 Number ? 8-bit unsigned 214 ? 8-bit signed - 42 ? partial 16-bit integer ? partial floating point ? Character ? What does this code represent? ASCII ‘╓’ ? partial Unicode ‘Ö’ Address ? Instruction ? Garbage ? Neutral representation Inside the computer Bytes, words, etc., can represent a finite number of combinations of off/on switches. Each distinct combination is called a code. Each code can be used to represent: numeric value memory address machine instruction keyboard character Representation is neutral. The operating system and the programs decide how to interpret the codes. Simple Error Checking Each computer architecture is designed to use either even parity or odd parity System adds a parity bit to make each code match the system's parity Parity is the total number of '1' bits (including the extra parity bit) in a binary code Parity (error checking) Example parity bits for 8-bit code 11010110 Even-parity system: 111010110 to make a total of 6 one-bits) Odd-parity system: 011010110 to keep 5 one-bits) (sets parity bit to 1 (sets parity bit to 0 Code is checked for parity error whenever it is used. Examples for even-parity architecture: 101010101 100101010 error (5 one-bits) OK (4 one-bits) Examples for odd-parity architecture: 101010101 100101010 OK (5 one-bits) error (4 one-bits) Parity (error checking) Used for checking memory, network transmissions, etc. Not 100% reliable. Error detection Works only when error is in odd number of bits … but very good because most errors are single-bit Next time … Error-correcting codes (ECC) Questions? Do Homework #1 Quiz #1 Thursday 7/1