I need help writing this program. The requirements are below: Implement half pre
ID: 3534615 • Letter: I
Question
I need help writing this program. The requirements are below:Implement half precision floating point addition in MIPS assembly language. Prompt user to input two floating point (decimal) numbers and compute and display the sum. Use algorithm depicted in figure 3.15, pg 252 in the textbook. In half precision format, 16 bits are used to represent a floating point number. The exponent field is 5 bits wide while the significand field has 10 bits. You will need to convert single precision floating point number to half-precision floating point number and then perform your calculations. Your program should be able to handle negative numbers as well. Also, if user enters an out of range number for half precision format, your program must raise an exception message. You MUST NOT use the MIPS floating point instructions. As always, after one set of inputs, program must ask if the user wants to enter more numbers.
I need help writing this program. The requirements are below:
Implement half precision floating point addition in MIPS assembly language. Prompt user to input two floating point (decimal) numbers and compute and display the sum. Use algorithm depicted in figure 3.15, pg 252 in the textbook. In half precision format, 16 bits are used to represent a floating point number. The exponent field is 5 bits wide while the significand field has 10 bits. You will need to convert single precision floating point number to half-precision floating point number and then perform your calculations. Your program should be able to handle negative numbers as well. Also, if user enters an out of range number for half precision format, your program must raise an exception message. You MUST NOT use the MIPS floating point instructions. As always, after one set of inputs, program must ask if the user wants to enter more numbers.
Explanation / Answer
#Integer implementation of floating-point addition
#Initialize variables
add $s0,$t0,$zero #first integer value
add $s1,$t1,$zero #second integer value
add $s2,$zero,$zero #initialize sum variable to 0
add $t3,$zero,$zero #initialize SUM OF SIGNIFICANDS value to 0
#get EXPONENT from values
sll $s5,$s0,1 #getting the exponent value
srl $s5,$s5,24 #$s5 = first value EXPONENT
sll $s6,$s1,1 #getting the exponent value
srl $s6,$s6,24 #$s6 = second value EXPONENT
#get SIGN from values
srl $s3,$s0,31 #$s3 = first value SIGN
srl $s4,$s1,31 #$s4 = second value SIGN
#get FRACTION from values
sll $s7,$s0,9
srl $s7,$s0,9 #$s7 = first value FRACTION
sll $t8,$s1,9
srl $t8,$s1,9 #$t8 = second value FRACTION
#compare the exponents of the two numbers
compareExp: ######################
beq $s5,$s6, addSig
blt $s5,$s6, shift1 #if first < second, go to shift1
blt $s6,$s5, shift2 #if second < first, go to shift2
j compareExp
shift1: #shift the smaller number to the right
srl $s7,$s7,1 #shift to the right 1
addi $s5,$s5,1
j compareExp
shift2: #shift the smaller number to the right
#srl $s0,$s0,1 #shift to the right 1
#j compareExp
srl $t8,$t8,1 #shift to the right 1
addi $s6,$s6,1
j compareExp
addSig:
add $t3,$s7,$t8 #Add the SIGNIFICANDS
li $v0, 4
la $a0, sum
syscall
li $v0, 1
move $a0, $t3
syscall
j result
result:
li $v0, 4
la $a0, newline
syscall
sll $t4,$s3,31 #SIGN
#FRACTION
sll $t5,$s6,23 #EXPONENT
add $t6,$t4,$t5
add $t6,$t6,$t3
li $v0, 4
la $a0, sum2
syscall
li $v0, 1
move $a0, $t6
syscall
li $v0, 4
la $a0, newline
syscall
li $v0, 4
la $a0, sum2
syscall
li $v0,2
mtc1 $t6,$f12
syscall
jr $31
# END OF PROGRAM