6016h4
Spring 2016 March 29, 2016
1
CS2630:
Computer
Organization
Homework
4
Total
points
=
50
Due
April
5,
2016,
11:59
PM
1.
Do
not
consult
others.
You
must
solve
the
problems
on
your
own.
2.
Be
generous
about
using
comments
to
improve
readability.
Always
include
a
comment
at
the
beginning
specifying
the
purpose
of
the
program.
3.
To
submit
the
program,
zip
(or
tar)
them
into
a
single
file
that
has
your
last
name
as
the
prefix.
Use
ICON
drop
box
to
submit
your
assignment.
Question
1.
(5+5
=
10
points)
A,
B
are
two
floating-‐point
numbers.
Their
representations
in
the
IEEE
754
single
precision
floating-‐point
format
(that
uses
a
biased
exponent)
are
as
follows:
A=
0xC0A0
0000,
B=
0x3EB0
0000
[Representation
in
hex]
(a)
Compute
the
decimal
equivalents
of
these
two
numbers.
Show
the
steps.
(b)
Represent
P
=
A
X
B
in
the
IEEE
floating
point
format,
and
write
it
down
in
hex.
Show
the
steps
Question
2.
Create
an
exponent
function:
float
exp
(float
x)
that
accepts
an
input
x
from
the
user,
and
returns
ex,
(using
the
MIPS
floating
point
co-‐processor).
Recall
that
e
=
2.71828183…
Use
Taylor
Series
expansion
to
compute
the
exponential
function:
ex !1+ x +
x2
2!
+
x3
3!
+ … +
x9
9!
+
x10
10!
(It
is
an
infinite
series,
but
you
can
stop
after
computing
up
to
the
10th
power
of
x)
Spring 2016 March 29, 2016
2
Part
1.
(10+10
=
20
points)
To
facilitate
this,
create
two
functions:
(1)
float
power
(float
x,
int
n)
and
(2)
int
factorial
(int
n).
Here,
power
(x,
n)
will
return
xn
and
factorial
n
will
return
n!
You
may
assume
0
≤
x
≤10
and
0
≤
n
≤10,
so
that
overflow
will
never
be
an
issue
either
with
the
single
precision
floating
point
format
or
the
32-‐bit
integer
format.
For
computing
the
factorial,
write
a
simple
iterative
program,
don’t
use
the
recursive
version.
Part
2
(20
points)
Use
the
two
functions
as
subroutines
(i.e.
create
two
subroutines
using
your
solution
in
Part
1)
to
compute
ex
from
a
value
of
x
within
the
given
range.
The
user
should
type
in
an
input
value
of
x,
and
your
program
will
generate
the
value
of
ex.
Print
the
values
of
e,
e2,
and
e3.
A
helpful
MIPS
instruction
is
cvt.s.w
fd
fs
that
converts
an
integer
in
the
source
register
fs
into
a
single
precision
floating
format
in
the
destination
register
fd.
Here
is
an
example
of
its
usage:
mtc1
$v0,
$f1
#
move
to
register
$f1
(in
coprocessor
C1)
from
register
$v0
cvt.s.w
$f1,$f1
#
convert
the
integer
in
$f1
to
single
precision
floating
point
format
div.s
$f0,$f0,$f1
#
divide
$f0
by
$f1
and
store
the
result
in
$f0
A
summary
of
some
useful
floating-‐point
instructions
is
available
in
Appendix
A
of
your
textbook.
A
sample
program
dealing
with
floating
point
numbers
is
given
in
the
next
page.
Spring 2016 March 29, 2016
3
Appendix
Here
is
a
program
that
computes
the
polynomial
ax2
+
bx
+
c
## float1.s — compute ax^2 + bx + c for user-input x
.text
.globl main
##
# Register Use Chart
# $f0 — x
# $f2 — sum of terms
main: # read input
la $a0,prompt # prompt user for x
li $v0,4 # print string
syscall
li $v0,6 # read single
syscall # $f0 <-- x
# evaluate the quadratic
l.s $f2,a # sum = a
mul.s $f2,$f2,$f0 # sum = ax
l.s $f4,b # get b
add.s $f2,$f2,$f4 # sum = ax + b
mul.s $f2,$f2,$f0 # sum = (ax+b)x = ax^2 +bx
l.s $f4,c # get c
add.s $f2,$f2,$f4 # sum = ax^2 + bx + c
# print the result
mov.s $f12,$f2 # $f12 = argument
li $v0,2 # print single
syscall
la $a0,newl # new line
li $v0,4 # print string
syscall
li $v0,10 # code 10 == exit
syscall # end the program
## Data Segment
##
.data
a: .float 1.0
b: .float 1.0
c: .float 1.0
prompt: .asciiz "Enter x: "
blank: .asciiz " "
newl: .asciiz "\n"