Assignment 10, Solutions
Part of
the homework for 22C:60, Fall 2009
|
A question: Explain why long comparison has the potential to be faster than subtraction. (0.5 points)
To subtract, you always have to process both words of each operand. In comparison, you can conclude that one operand is greater than the other after comparing just the most significant words. Only if the most significant words differ do you need to compare less significant words.
a) Assuming that X, Y, Z are local variables, each holding a long integer, write Hawk code equivalent to the following expression in a high level language: X = 100*Y + Z. In your code, take maximal advantage of the background information presented above. Your code must, of course, be well commented. (0.5 points)
LEA R3,R2,X LIS R4,100 ADDSI R2,R2,ARSIZE LIL R1,INT2LONG JSRS R1,R1 ADDSI R2,R2,-ARSIZE ; X = 100 LEA R4,R2,Y ADDSI R2,R2,ARSIZE LIL R1,LONGMUL JSRS R1,R1 ADDSI R2,R2,-ARSIZE ; X = 100*Y LEA R4,R2,Z ADDSI R2,R2,ARSIZE LIL R1,LONGADD JSRS R1,R1 ADDSI R2,R2,-ARSIZE ; X = 100*Y + Z
S E E E M M M M S - the sign of the mantissa E E E - the 3-bit exponent, biased M M M M - the 4-bit mantissa, with a hidden 5th bit
The normalization rule is the common one for binary floating point numbers: the mantissa is strictly less than one and greater than or equal to 0.5, so that the hidden bit is always 1 -- and therefore, need never be stored. This number system has no NaNs and no unnormalized values, so the exponent values run over the entire range from 000 to 111.
a) What is the largest value that can be represented in this number system? Give both the binary representation and the decimal equivalent. (0.3 points)
0 111 1111 = 0.11111 * 2**3 = 111.11 * 2**0 = 7.75
b) What is the binary representation of 1.0 in this number system? (0.2 points)
0 101 0000 = 0.10000 * 2**1 = 1.0 * 2**0 = 1.0
c) What is the smallest positive nonzero value that can be represented in this number system. Give both the binary representation and the decimal equivalent. (0.3 points)
0 000 0000 = 0.10000 * 2**-4 = 1.0 * 2**-5 = 0.03125
d) Explain the problem this number system poses for the representation of zero? (0.2 points)
There is no representation for zero because the number system is defined with a hidden bit that is always one.
MOVE R4,R3 ; setup to compute the exponent in R4 SR R4,4 ; discard the mantissa ADDSI R4,-4 ; convert from biased to 2's complement MOVE R5,R3 ; setup to compute the mantissa in R5 LIS R6,#0F ; mask AND R5,R6 ; clear all but mantissa bits LIS R6,#10 ; hidden bit OR R5,R6 ; set hidden bit BITTST R3,7 ; test sign BCR NOTNEG NEG R5,R5 ; negate mantissa if needed NOTNEG: