ࡱ> a bjbjxx .N\N\8@ 88888LLL8D L9K"JJJJJJJ$+MOJ98J88J666B 88J6J664GXdI@(H$J K09KHqP-qPHdIqP8dI0"6#?JJ2F9KqP > : CS 245 Assembly Language Programming Floating Point Arithmetic Text: Computer Organization and Design, 4th Ed., D A Patterson, J L Hennessy Sections 3.5-3.8, Pages B.73-B.80 Objectives: The Student shall be able to: Convert a fraction to normalized form Convert a decimal fraction to a binary point form and vice versa. Perform addition and multiplication with floating point numbers Convert a fraction to IEEE 754 float or double form (given offsets) Define overflow and underflow, NAN. Program assembly language using floating point instructions. Class Time: Lecture Binary fractions, addition, mult. 1 hour Exercise 1 hour Lecture Floating Point formats 1 hour Exercise 1 hour Lab hour Total 4.5 hours Fractions: Decimal & Binary Floating Point is used for Reals or Fractions Binary numbers are translated as: 25 24 23 22 21 20 . 2-1 2-2 2-3 2-4 Which is equivalent to: 25 24 23 22 21 20 . 1/21 1/22 1/23 1/24 Example: 11.011 = 21 + 20 + 1/22 + 1/23 = 2 + 1 + + 1/8 = 3 3/8 Decimal Point (( Binary Point (( Hexadecimal Point Base 2 -> Base 10 Convert 0.12 to Base 10 0.12 = 1 x 2-1 = 1 / 21 = = 0.510 Convert 0.0012 to Base 10 0.0012 = 1 x 2-3 = 1 / 23 = 1 / 8 = 0.125 Convert 0.011 to Base 10 0.0112 = 1 / 22 + 1 / 23 = + 1/8 = 3/8 = 0.375 Base 10->Base 2 To convert from Decimal to Binary the steps are as follows: Multiply the decimal fraction by 2. If result >= 1.0 Digit for answer is 1 Fractional part is used for next iteration Repeat: Multiply the decimal fraction by 2 If result >= 1.0 Example: Find value for .375 .375 x 2 = .750 => 0 .750 x 2 = 1.5 => 1 .5 x 2 = 1.0 => 1 (No fraction remaining) Answer = 0.011 Validate answer: 0.011B = 1/22 + 1/23 = + 1/8 = .25 + .125 = .375 More Examples: Convert 0.510 to Base 2 0.5 x 2 = 1.0 => 1 0 x 2 = 0 => 0 Answer: 0.510 = 0.12 Convert 0.7510 to Base 2 0.75 x 2 = 1.5 => 1 0.5 x 2 = 1.0 => 1 0 x 2 = 0 => 0 Answer: 0.7510 = 0.112 Convert 0.2AD16 to Base 2 then to Base 10 0.2AD16 = 0.0010 1010 11012 = 2-3 + 2-5 + 2-7 + 2-9 + 2-10 + 2-12 = 0.16723632812510 Convert 0.2AD16 to Base 10 f=0 f=(0+D)/16 = 13/16 = 0.8125 f = (0.8125+A)/16 = 10.8125/16 = 0.67578125 f = (0.67578125+2)/16 = 0.16723633 Answer 0.2AD16 = 0.1672363310 Normalized Form Fraction Notation: Normalized form = 1 significant digit FractionNormalized Form254.662.5466 x 1020.00033.0 x 10-40.002542.54 x 10-3 To convert to normalized form: When decimal point does not move, multiply by 100 (=1) When decimal point moves left 1, add 1 to exponent When decimal point moves right 1, subtract one from exponent Example: 1000000000B = 1000000000B*20 1000000000B = 100000000B*21 1000000000B = 1*29 Example 2: 0.0001B = 0.0001B*20 0.0001B = 0.001B*1/2 = 0.001B*2-1 0.0001B = 1.0B*2-4 Binary Point Normalized Notation 25610 = 100000000B = 1 x 28 810 = 1000B = 1 x 23 210 = 10B = 1 x 21 0.510 = 0.1B = 1 x 2-1 0.7510 = 0.11B = 1.1 x 2-1 Addition Example: Add 99.9910 + 0.161010 99.99 = 9.999 x 101 0.1610 = 1.610 x 10-1 To add the two numbers, we must convert first to the larger magnitude: 101 1.610 x 10-1 = 0.01610x101 Now we can add the fractions: 9.999 + 0.01610 = 10.01510 Result: 10.01510 x 101 Round (assuming 4 fractional digits): 10.02 x 101 Renormalize: 1.002 x 102 Example: Add in binary: 0.510 + -0.437510 0.510 = 1/2 = 1/21 = 0.1B = 1.0 x 2-1 -0.437510 = -7/16 = -7/24 = -.0111B = -1.11 x 2-2 Convert to the larger magnitude: 2-1 1.0 + -0.111 = 0.001 Result: 0.001 x 2-1 = 1 x 2-4 = 1/24 = 1/16 = 0.0625 Multiplication: Multiply 5 x 103 by 3 x 10-2 Without exponents: 5000 x .03 = 150.00 With exponents: Multiply fractions: 5 x 3 = 15 Add exponents: 3 2 = 1 Result: 15 x 101 = 150 Floating Point Formats Floating Point Format in Computer: Example = -25 x 232 => Format = (Sign) (Fraction) x 2(Exponent) Float = 32 bits Sign (1 Bit) 1=negativeExponent (8 bits)Fraction (23 bits)Numbers range between 2x10-38 to 2x1038 Double = 64 bits Sign (1 Bit) 1=negativeExponent (11 bits)Fraction (52 bit fraction)Numbers range between 2x10-308 to 2x10308 Reduce the number of Binary Digits In normalized form each FRACTION is in the form: 1.ffff x 2eeee To get one additional bit of accuracy it is possible to ASSUME the 1. part above. Thus the FRACTION part contains .ffff When reconstructing the number, you must add: 1 + .ffff to get the original: 1.ffff Comparisons To compare two numbers The exponent = magnitude and comes before the fraction. Therefore Comparisons should be easy: numbers with larger exponents > numbers with smaller exponents However Fractions normally use negative exponents: e.g. 11101010 Large integers use positive exponents: e.g., 00001010 When comparing two numbers: 11101010 > 00001010 Solution: Bias each float exponent by 127: EXPONENT = eeee + 127 Solution: Bias each double-precision exponent by 1023. When reconstructing the original: eeee = EXPONENT - 127 Most negative exponent=00000000B Most positive exponent=11111111B When comparing two numbers: First compare sign bit: 0 > 1 // positives > negatives Next compare exponent || fraction: larger numbers > smaller numbers Example: Creating an IEEE floating point number Assume 50.010 = 110010B = 1.10010 x 25 exponent=5 fraction=10010 sign=0 Sign=0 (positive) Exponent = exponent + 12710 = 101B + 1111111B = 10000100B Or (in decimal) 5 + 127 = 132 = 10000100B Fraction = 100100000 Number = 0100,0010,0100,1000,0000,0000,0000,0000 = 0x42480000 Now lets convert back to make sure we did it correctly: 0100,0010,0100,1000,0000,0000,0000,0000 Sign = 0 = positive Exponent = 10000100 - 1111111 = 101 = 5 Or (in decimal) 132 127 = 5 Fraction = 0.10010 + 1.0 = 1.10010 Number = 1.10010x25 = 110010 = 32 + 16 + 2 = 50! Correct! Problems: Overflow: Exponent on math operation becomes too large to represent number E.g., Multiply by 2 (or -2) in infinite loop => +", -" Underflow: Exponent on math operation becomes too small to represent number E.g., Divide by 2 in infinite loop => 0 When an invalid operation occurs NaN: Not a Number = operations using infinity, divide by 0 Exponent value is set to 255. Floating Point Instructions Floating-point coprocessor = coprocessor 1 32 floating point registers: $f0-$f31 Each register is 32 bits Doubles require 2 registers: specify even register Instructions: Load/Store # addr = address in data section, $f = float register lwc1 $fdest, addr # load single from addr containing integer (load word coproc 1) l.s $fdest, addr # load single from addr containing single = lwc1 l.d $fdest, addr # load double from addr containing double mov.d $fdest, $fsrc # fdest = fsrc mov.s $fdest, $fsrc # fdest = fsrc mfc1 $dest, $fsrc # Move from Coproc. 1: CPUdest = fsrc mfc1.d $dest, $fsrc # CPUdest || CPUdest+1 = fsrc||fsrc+1 // move double mtc1 $rsrc,$fdest # fdest = rsrc s.d $fsrc, address # store double from fsrc in fractional form s.s $fsrc, address # store single from fsrc swc1 $fsrc, address # store word from fsrc sdc1 $fsrc, address # store double word from fsrc // where fsrc = even reg. Arithmetic Operations add.d $fdest, $fsrc1, $fsrc2 # fdest = fsrc1 + fsrc2 (double) add.s $fdest, $fsrc1, $fsrc2 # fdest = fsrc1 + fsrc2 (single) sub.d $fdest, $fsrc1, $fsrc2 # fdest = fsrc1 - fsrc2 (double) sub.s $fdest, $fsrc1, $fsrc2 # fdest = fsrc1 - fsrc2 (single) mul.d $fdest, $fsrc1, $fsrc2 # fdest = fsrc1 * fsrc2 (double) mul.s $fdest, $fsrc1, $fsrc2 # fdest = fsrc1 * fsrc2 (single) div.d $fdest, $fsrc1, $fsrc2 # fdest = fsrc1 / fsrc2 (double) div.s $fdest, $fsrc1, $fsrc2 # fdest = fsrc1 / fsrc2 (single) neg.d $fdest, $fsrc # fdest = -fsrc (double) neg.s $fdest, $fsrc1 # fdest = -fsrc (single) Other mathematical operations These are shown with single precision (s) but double precision (d) is also available abs.s $fdest, $fsrc # fdest = |fsrc| sqrt.s $fdest, $fsrc # fdest = root(fsrc) Conversions Floating point registers can contain integer formats - you must keep track. In all cases below, operations can be done either with single or double precision. cvt.d.s $fdest, $fsrc # fdest = (double) fsrc // single ( double cvt.s.d $fdest, $fsrc # fdest = (single) fsrc // double ( single cvt.s.w $fdest, $fsrc # fdest = (single) fsrc // int ( single cvt.d.w $fdest, $fsrc # fdest = (double) fsrc // int ( double cvt.w.s $fdest, $fsrc # fdest = (single) fsrc // int ( single cvt.w.d $fdest, $fsrc # fdest = (double) fsrc // int ( double ceil.w.s $fdest, $fsrc # fdest = (integer rounded up) fsrc floor.w.d $fdest, $fsrc # fdest = (integer rounded down) fsrc trunc.w.s $fdest, $fsrc # fdest = (truncated integer) fsrc round.w.s $fdest, $fsrc # fdest = rount(fsrc) Comparisons Eight condition codes (cc) exist, where the flip-flop is set Replace cc below with a number between 0..7 c.eq.s cc $fsrc1, $fsrc2 # cc = (fsrc1 == fsrc2) c.lt.s cc $fsrc1, $fsrc2 # cc = (fsrc1 < fsrc2) c.le.s cc $fsrc1, $fsrc2 # cc = (fsrc1 <= fsrc2) bc1f cc label # if cc == 0 (false) then branch bc1t cc label # if cc == 1 (true) then branch movf.d $fdest, $fsrc, cc # if cc == 1 then $fdest = $fsrc E.g., c.eq.d 0 $f0,$f2 # if $f0==F2 then set cc0 to 1 bc1f 0 label Other test conditions: ge, gt, ne, also exist. Other conditional move instructions exist too. NOTE: USE CC CODE = 0! OTHER CC CODES DO NOT WORK WITH XSPIM! System Calls: Reading & Printing Printing: Register conventions: Print float: $v0=2 $f12=float register to print Print double: $v0=3 $f12=double register to print Reading: Register conventions: Read float: $v0=6 $f0=float is returned in reg $f0 Read double: $v0=7 $f0=double is returned in reg $f0 Example: # print (total+count); li $v0, 2 add.s $f12,$f2,$f12 syscall Allocating Data # # Creating two variables: tax[0]=0.05; tax[1]=0.06 tax: .float 0.05, 0.06 # # Creating double precision variables. dprec: .double 0.3552, 0.4422, 13.3232 Floating Point Example Thanks Josh!!! # Name: Josh Odom # Course: Cs355 # Assignment: 1 # Program: 2 # # This program will prompt the user for 5 numbers, and it will average # them and display the result. .data # the double constant for 5 five: .double 5.0 # the double constant for 0 zero: .double 0.0 # a greeting message greet: .asciiz "Enter 5 numbers, and I'll average them for you.\n" # the first part of the input display first: .asciiz "Enter " # the last part of the input display last: .asciiz " number: " # the endings for 1, 2, 3, 4, 5 nums: .asciiz "st", "nd", "rd", "th", "th" # a message for the result average:.asciiz "The average is: " .text .globl main main: AVG00: # save $ra on stack addi $sp,$sp,-4 sw $ra,0($sp) # $s0 is the current value, $s1 is 1 past the # last value li $s0, 0 li $s1, 5 # set the running total to 0 ldc1 $f12, zero # display greeting li $v0, 4 la $a0, greet syscall AVG01: # store $s0 in the first argument, and do a call # to the print routine move $a0, $s0 jal PRT00 # get a double from the keyboard li $v0, 7 syscall # add the new double to the running total add.d $f12, $f0, $f12 # increment the counter addi $s0, $s0, 1 # once the counter reaches 5, then break bne $s0, $s1, AVG01 # display a message for the result li $v0, 4 la $a0, average syscall # find the average of the numbers ldc1 $f0, five div.d $f12, $f12, $f0 # display that average li $v0, 3 syscall # return the old $ra back to its proper position lw $ra,0($sp) addi $sp,$sp,4 # return jr $ra PRT00: addi $sp,$sp,-4 sw $ra,0($sp) # save $a0 in $t0 move $t0, $a0 # display the first part of the input message li $v0, 4 la $a0, first syscall # display which number we're one (one more than # the number we got li $v0, 1 addi $a0, $t0, 1 syscall # multiply the number we got by three, and that's # the offset for the correct number suffix (1st, 2nd, 3rd, ) mul $t0, $t0, 3 la $t1, nums addu $a0, $t0, $t1 # display that number suffix li $v0, 4 syscall # and display the last part of the input message li $v0, 4 la $a0, last syscall # return lw $ra,0($sp) addi $sp,$sp,4 jr $ra Exercise 1: Working with Binary Point Convert these decimal numbers to decimal normalized floating point form: 12510 = 0.0034310 = 1101.11B = 0.0101B = Convert these binary point numbers to Base 10: (Hint: Determine powers of two: 0.1 = 2-1 = 1/21) 0.112= 0.101012= Convert this decimal fraction to binary for at least 6 digits (or 6 binary places): (Hint: Multiply fraction by 2: if quotient > 1 binary digit is one. Repeat) 0.3310= Normalize the following decimal numbers to the larger of the two exponents, then add them: 20.5 + 250.25 Now convert the numbers to binary, normalize them, and add them in binary: Multiply the following two binary numbers: 1.001 x 23 * 1.01 x 22 Then convert the numbers to decimal and check your work. (Hint: Multiply the fractions and add exponents) Exercise 2: Working with IEEE-formatted Floats & Doubles For the following exercise, the following float and double variables were allocated in a MIPS program. [0x10010000] 0x41f00000 0x3cf5c28f 0x453b8000 0x40400000 [0x10010010] 0x3e99999a 0x43960000 0x3b449ba6 0xc1f00000 [0x10010020] 0xc3960000 0xc53b8000 0xc0400000 0xbe99999a [0x10010030] 0xbcf5c28f 0xbb449ba6 d=0x00000000 0x403e0000 [0x10010040] d=0x00000000 0x4072c000 d=0xbc6a7efa 0x3f689374 [0x10010050] d=0x00000000 0x40080000 d=0x33333333 0x3fd33333 [0x10010060] d=0xeb851eb8 0x3f9eb851 d=0x00000000 0x40a77000 Float-FloatDouble0.003 0.03 0.3 3 30 300 3000  Java Lab: Write a java (or c++) program that uses floats to: Print the number 0.333,333,33 Adds 0.333,333,33 to a total 100,000 times. Multiplies 0.333,333,33 x 100,000 Compare the sum and the multiplication result. Do they match? Why not? Which one is correct? Then retest using 10,000,000 (instead of 100,000) Compare the sum and the multiplication result. Do they match? Why not? Which one is correct? Then retest using doubles. What does this teach you about using floats or doubles and summing?$%?ACHIlnt}        % ' , - I J X ɽĽɸɽ h:lH* h7Kh7K h7KH*h7K hZFhz hWhZFhWhZF6H* hZF6 hZF5\ hz5\hzhZFH%?ABC H - . / 1 = q 1 N $a$gdZFN O }   . J }   , ^ n #,Qgd- gdm?gd7KX Y Z h i j }  2 3 ; < D E ^ m   -12349CNP"29;NOUW[]acgi hzH* hzH*h}NhXohH h- H* h- H*h- hm?hm?hm?hz jhz jhzKQfo3C[s 3Pximptw)+8:;+,=?QTUz|   ')25GH\_"AGHhh}N h7KH*hm?hm?H* hm?H*hm? h7KH*h7K hzH* hzH*hzP;K^ozkd$$Ifl0   t0644 la $Ifgd`,gd7Kgd7K {zkdt$$Ifl0   t0644 la $Ifgd`,{{ $Ifgd`,zkd$$Ifl0   t0644 la2e@zzzgd7Kgd7Kzkd\$$Ifl0   t0644 la@TUv 5I`Ibc  Vfgd7KHIZ`a 24<>DEuv\^tx9?g "CV\^}hYLVhyh-k& h-k&hz h-k&h-k&hR!h0E5 hzH* hzH*hhzP&'J$If$a$` +4>GYqooiccccccc$If !kd$$IflF,,"X@  t06    44 la YZ;czqooommmmkommkd`$$IflF,,"X@  t06    44 la z$g6p0C}8bvgd-k&Eav~%-q    ( !B!l!!!!" # ####o#p#####$$%$)$7$8$N$O$`$b$r$s$$$$$$$8%<%d%hx hxhxhghqh*V h^h^h_h^h! hz5\ hzH*hR!h-k&h-k&hz5hXohYLVhzC%q !D!!!!!!!"G"m"""" #^##gdx$a$ & Fgd! & Fgd!gdR!##$%$^$$$ %8%d%%%%&H&&&'H''''(()(H(((((gdxd%g%h%(J)))**]*^********* +!+,X,Y,,--8-@-M-P-j-q-------.0.].^._.../1/C/////000Q3R33333344 4"70717A7^7ÿÿûû÷hhYLVhldhqhCh|mhLh(hLhO jhzh99 jhz hxhxhzhghFqF(())%*f***)+e+++,,,Y,,,,-M-}---._....gdCgdC./D/d//////00*0b0y000000141N1h1j111111gdYLVgdC11202B2Z22223 3C3o33333333333 4=4M4X4c44gd44444444 5$535>5b5m5v555556)6O6Z6k6t66666666"717A7M7U7V7W7^7o7~7777777)8@8K8]8f888889/9:9^7~799: :::C:E:Q:S:::::::::;;;;<<<<<h===&>0>>>>>>>???,?.?R?T?l?n???$@A@B@S@a@b@n@@@@@AA !ؼؼؼؼؼؼؼh6ZU hhhh)oCJOJQJ^JaJh.CJOJQJ^JaJhzCJOJQJ^JaJhv hzH* hzH*hm?hzhB:9C9w99999999999>:?:H:I:V:W:c:d:o:p:::::::::::::::::::F;;;;;;; < < <<<<<<<<<`<<<b<c<d<e<f<g<h<i<j<k<l<m<n<o<p<q<r<<<"=#=$=%=&='=(=)=)=*=+=,=-=g=h== >I>>>?E???????$If7$8$H$????????^XXXXXX$Ifkd$$Ifl\@ ,"<pp| t0644 la????????^XXXXXX$Ifkd$$Ifl\@ ,"<pp| t0644 la????????^XXXXXX$Ifkd$$Ifl\@ ,"<pp| t0644 la????????^XXXXXX$Ifkd$$Ifl\@ ,"<pp| t0644 la????????^XXXXXX$Ifkd0$$Ifl\@ ,"<pp| t0644 la????????^XXXXXX$Ifkd$$Ifl\@ ,"<pp| t0644 la????????^XXXXXX$IfkdP$$Ifl\@ ,"<pp| t0644 la?????$@B@n@@@@^\Z\\XXX\\kd$$Ifl\@ ,"<pp| t0644 la @@@@@@@@@@.AAAAAAAAAAAAA!"#$gd & Fgdgdgd How can this error be avoided? For hackers only: How is zero stored in floating point notation?     PAGE  PAGE 3 Floating Point Arithmetic !#$%&ijlmoprsuv|}~˿ػhuehyjhz0JU*hm?0JmHnHu*hz hz0Jjhz0JUhjhUh6Zh$%&'iklnoqrtu~h]h&`#$gd,1h/ =!"#$% r$$If!vh#v :V l t065 r$$If!vh#v :V l t065 r$$If!vh#v :V l t065 r$$If!vh#v :V l t065 $$If!vh#vX#v@ #v:V l t065X5@ 5$$If!vh#vX#v@ #v:V l t065X5@ 5$$If!vh#v<#vp#v|:V l t065<5p5|$$If!vh#v<#vp#v|:V l t065<5p5|$$If!vh#v<#vp#v|:V l t065<5p5|$$If!vh#v<#vp#v|:V l t065<5p5|$$If!vh#v<#vp#v|:V l t065<5p5|$$If!vh#v<#vp#v|:V l t065<5p5|$$If!vh#v<#vp#v|:V l t065<5p5|$$If!vh#v<#vp#v|:V l t065<5p5|s2 0@P`p2( 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p8XV~ 0@ 0@ 0@ 0@ 0@ 0@ 0@ 0@ 0@ 0@ 0@ 0@ 0@ 0@_HmH nH sH tH @`@ NormalCJ_HaJmH sH tH \@\  Heading 2$<@& 56CJOJQJ\]^JaJV@V  Heading 3$<@&5CJOJQJ\^JaJN@N  Heading 5 <@&56CJ\]aJH@H  Heading 6 <@&5CJ\aJ@@  Heading 8 <@&6]DA`D Default Paragraph FontVi@V  Table Normal :V 44 la (k (No List n/n Bullet! & F 5$7$8$9DH$%B*CJOJQJ_HmH phsH tH R0@R List Bullet"$ & F hh^ha$:!: Author $a$CJaJDT"D Block Textx]^N>@2N Title$<a$5CJ OJQJ\^JaJ >6@B> List Bullet 2  & F2B@R2 Body TextxFJbF Subtitle$<@&a$ OJQJ^J4@r4 Header  !4 @4 Footer  !.)@. Page NumberHH -k& Balloon TextCJOJQJ^JaJFGF List Continue 4x^FFF List Continue 38x^8N/N -k&Balloon Text CharCJOJQJ^JaJPK![Content_Types].xmlN0EH-J@%ǎǢ|ș$زULTB l,3;rØJB+$G]7O٭VvnB`2ǃ,!"E3p#9GQd; H xuv 0F[,F᚜K sO'3w #vfSVbsؠyX p5veuw 1z@ l,i!b I jZ2|9L$Z15xl.(zm${d:\@'23œln$^-@^i?D&|#td!6lġB"&63yy@t!HjpU*yeXry3~{s:FXI O5Y[Y!}S˪.7bd|n]671. tn/w/+[t6}PsںsL. J;̊iN $AI)t2 Lmx:(}\-i*xQCJuWl'QyI@ھ m2DBAR4 w¢naQ`ԲɁ W=0#xBdT/.3-F>bYL%׭˓KK 6HhfPQ=h)GBms]_Ԡ'CZѨys v@c])h7Jهic?FS.NP$ e&\Ӏ+I "'%QÕ@c![paAV.9Hd<ӮHVX*%A{Yr Aբ pxSL9":3U5U NC(p%u@;[d`4)]t#9M4W=P5*f̰lk<_X-C wT%Ժ}B% Y,] A̠&oʰŨ; \lc`|,bUvPK! ѐ'theme/theme/_rels/themeManager.xml.relsM 0wooӺ&݈Э5 6?$Q ,.aic21h:qm@RN;d`o7gK(M&$R(.1r'JЊT8V"AȻHu}|$b{P8g/]QAsم(#L[PK-![Content_Types].xmlPK-!֧6 0_rels/.relsPK-!kytheme/theme/themeManager.xmlPK-!R%theme/theme/theme1.xmlPK-! ѐ' theme/theme/_rels/themeManager.xml.relsPK] ?9 ==???BX iHd%^7!!$&,14:IN Q@Yz#(.146:9:<)=????????@$"#%'()*+-./02356789;<=>?@ABCDEFGJ  B!!8@0(  B S  ?P8Q8R8%%@9%%@99*urn:schemas-microsoft-com:office:smarttagsplace8*urn:schemas-microsoft-com:office:smarttagsCity dh]a\`?Bsw  $>ACHJNcgz LPRW[`cghkmq /3=Aejlq %*,1EJejlq %*,1EJejlqtx}:?AFIMRW[_aginquz: A D I L P T Y e i ~ ! ! !!!!!"!.!2!7!:!D!K!N!S!V!Z!^!c!o!s!x!{!!!!!!!!!!!!!!!!!!!!!!"" " """""""<"@"A"J"L"Q"T"X"\"a"x"|"}"""""""""""""#(#T#Z###$ $"$'$*$.$G$L$P$T$[$a$$$$$-&0&c&f&&&&&&&B'G'()k)q)))))))))))*** *3*9*Y*^*}********b+i+++ ,,A,F,t,x,,, --G-L----------------. ........./z/}///////.050C0E0M0O0R0V0b0d0f0h08999999 9 9=9@9/359=D48PRU]U]""#!#"#(#T#Z#######b$f$$$$$&&&&&&&&&''%'B'G'((V(Z(((((((((((((?)B)c)h)))))))****1*e*i***********++!+%+6+=+H+J+S+U+b+i+++++++,, ,,A,F,],f,t,x,,,,,,,,, --7-;-G-L-x-z------------. ..1.5.q.s.|.~........../=/@/z/}///////////00 0"0.050;0A0C0E0R0V0b0d0{44444 5/5E5q5555568999999 9 9=9@93333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333>C0|^m T  `  I 'Zz$6"COV|w~p#%7>Scly#nOeb$c$$$$$$:%%%%%)&4&_&j&l&&&&i'j''(w(}(V*V*j*j***********------..A0`00000(2=2T2\24444G5K5o5q5555555555 6"6666 7-7w77778/8/8R8888888888889999999 9 9 999;9=9@9>C|^m T "OV|w~p#%7>Sclynb$c$$$$$$:%%%%%)&4&_&j&i'j'V*V*j*j***********-----.A0`00000T2\24444G5K5o5q555555555 6"677/8/8888888888889999999 9 9;9=9@9|L%}οy~p$@8&oovIc1&~nX 5RhI :6p:j5V^`.^`.88^8`.^`. ^`OJQJo( ^`OJQJo( 88^8`OJQJo( ^`OJQJo(hh^h`. hh^h`OJQJo(h^`OJQJo(hHh^`OJQJ^Jo(hHohp^p`OJQJo(hHh@ ^@ `OJQJo(hHh^`OJQJ^Jo(hHoh^`OJQJo(hHh^`OJQJo(hHh^`OJQJ^Jo(hHohP^P`OJQJo(hHh^`OJQJo(hHh^`OJQJ^Jo(hHohp^p`OJQJo(hHh@ ^@ `OJQJo(hHh^`OJQJ^Jo(hHoh^`OJQJo(hHh^`OJQJo(hHh^`OJQJ^Jo(hHohP^P`OJQJo(hHh^`OJQJo(hHh^`OJQJ^Jo(hHohpp^p`OJQJo(hHh@ @ ^@ `OJQJo(hHh^`OJQJ^Jo(hHoh^`OJQJo(hHh^`OJQJo(hHh^`OJQJ^Jo(hHohPP^P`OJQJo(hHh^`OJQJo(hHh^`OJQJ^Jo(hHohpp^p`OJQJo(hHh@ @ ^@ `OJQJo(hHh^`OJQJ^Jo(hHoh^`OJQJo(hHh^`OJQJo(hHh^`OJQJ^Jo(hHohPP^P`OJQJo(hHhh^h`o(.088^8`o(.p0p^p`0o(..@ 0@ ^@ `0o(... xx^x`o( .... HH^H`o( ..... `^``o( ...... P`P^P``o(....... ^`o(........ 5I :6I :6I :6~}|:j5Vc1&I                  \RM        Ht        A?O_guew :m ~ z6Z)o(}NBm!R!u_$6%-k&`,0E5.g5992?m?7KL*VYLVW^ld l|md~'FfgCZFCM:l0DsXo- ^x 3^qyv.LFqH!l89@; ; ; ; 48?9@ D@ @UnknownG*Ax Times New Roman5Symbol3. *Cx Arial;Wingdings?= *Cx Courier NewGTimesNewRomanPS5. .[`)TahomaA$BCambria Math"1hKKg}0g}0g 5488 2QHP?2!xx Cs 355 Computer ArchitectureS LinckeLincke, Susan JH          Oh+'0 (4 T ` l x Cs 355 Computer Architecture S LinckeNormalLincke, Susan J2Microsoft Office Word@@p)A@rG@@rG@}0՜.+,D՜.+,L hp  Linckeg8 Cs 355 Computer Architecture TitlelH8X`_AdHocReviewCycleID_EmailSubject _AuthorEmail_AuthorEmailDisplayName_PreviousAdHocReviewCycleID_ReviewingToolsShownOnceS Float.doclincke@cs.uwp.eduSusan Lincke-Salecker/  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKMNOPQRSUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|~Root Entry Fа@Data L1TableTPWordDocument.SummaryInformation(}DocumentSummaryInformation8CompObjr  F Microsoft Word 97-2003 Document MSWordDocWord.Document.89q