Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #be able to take the power of a positive or negative exponent
- .data
- input_base:
- .asciiz "Please enter your base: "
- input_exponent:
- .asciiz "Please input your exponent: "
- output_result:
- .asciiz "Your result is: "
- newline:
- .asciiz "\n"
- .globl main
- .text
- #we are going to do this iteratively - we will have a counter.
- #when the counter will be equal to the exponent, we will either output+terminate, or negate+output+terminate
- #t0 is going to be our counter, t1 is going to be our base, t2 is going to be our exponent
- #t3 is going to be the absolute value of the exponent (and exit condition), t4 is going to store our base increment
- #f0 is going to be our output, $f2 is going to store ffloat 1, and $t5 is going to be integer 1
- main:
- #get all the inputs we need
- li $t5, 1 #this is ugly and I hate it BUT it can also be our output for when the exponent is 0
- li $t0, 1 #initialize our counter to 0
- li $v0, 4 #string output
- la $a0, input_base
- syscall
- li $v0, 5 #prep for user input
- syscall
- move $t1, $v0
- li $v0, 4 #string output
- la $a0, newline
- syscall
- li $v0, 4 #string output
- la $a0, input_exponent
- syscall
- li $v0, 5 #prep for user input
- syscall
- move $t2, $v0
- li $v0, 4 #string output
- la $a0, newline
- syscall
- #next, we will determine whether the exponent is positive or negative and deal with it accordingly
- move $t4, $t1 #set our base total value to our base increment during the first pass
- beqz $t2, zero_exponent
- bltz $t2, negative_exponent #if negative, go do a thing to it
- #else if the exponent is positive
- move $t3, $t2 #make sure our exponent is set in several places
- positive_exponent:
- beq $t0, $t3, exit #if the counter is equal to the exponent (our exit condition/sentinel), we leave
- #else
- mul $t4, $t4, $t1 #multiply our base total value by the base increment
- addi $t0, $t0, 1 #increment our counter by 1
- j positive_exponent
- negative_exponent:
- mul $t3, $t2, -1 #convert the negative exponent to a positive one and store it in a different place
- j positive_exponent
- zero_exponent:
- #we will just output that the answer is 1
- li $v0, 4 #string output
- la $a0, output_result
- syscall
- move $a0, $t5
- li $v0, 1
- syscall
- li $v0, 10 #terminate the program
- syscall
- exit:
- bltz $t2, exit_negative #if the exponent was negative, we'll need to make it into a float
- #else just output the result
- li $v0, 4 #string output
- la $a0, input_base
- syscall
- move $a0, $t4 #set a0 to have our final result
- li $v0, 1 #prep for integer output
- syscall
- li $v0, 4 #string output
- la $a0, newline
- syscall
- li $v0, 10 #terminate the program
- syscall
- exit_negative:
- mtc1 $t4, $f0 #move our result from t4 to f0
- cvt.s.w $f0, $f0 #convert t4 to a single-float in f0
- mtc1 $t5, $f2 #set f2 to 1
- cvt.s.w $f2, $f2 #convert the value 1 into a float
- div.s $f12, $f2, $f0 #then we divide 1 by f0, and store it back in f12
- li $v0, 2 #prep to output a float
- syscall #go output the number stored in f12
- li $v0, 4 #string output
- la $a0, newline
- syscall
- li $v0, 10 #terminate the program
- syscall
Advertisement
Add Comment
Please, Sign In to add comment