I have the code here but still can not figure out why it can not work why I enter X=2, and N>= 31....

``````.data
str: .asciiz " Inter X:"
str1: .asciiz " Inter N:"
str2: .asciiz " X to the power of N is : "
.text
main:
la \$a0,str
li \$v0,4
syscall
li \$v0,5
syscall
move \$t0,\$v0
la \$a0,str1
li \$v0,4
syscall
li \$v0,5
syscall
move \$a1,\$v0    #\$a1=N
move \$a0, \$t0    #\$a0=X

jal Power

move \$s0,\$v0
la \$a0,str2
li \$v0,4
syscall
move \$a0,\$s0
li \$v0,1
syscall
li \$v0,10
syscall

sw \$ra,0(\$sp)

bne \$a1,\$zero, Else`

jr \$ra
Else:    bne \$a1,1, Else1

jr \$ra
Else1:    move \$t1,\$a1
andi \$t0, \$t1,1        #check if N is even or odd
bne \$t0,\$zero, Else2    #odd goto Else2
srl \$a1, \$a1,1        #even N/2
jal Power        #recursive
mul \$v0,\$v0,\$v0        # Power(x,n/2)*Power(x,n/2)
lw \$ra, 0(\$sp)
jr \$ra
jal Power
lw \$ra, 0(\$sp)
mul \$v0,\$v0,\$a0
jr \$ra``````

ANd here the problem "Problem
Write a program in MIPS which computes x^n for nonnegative integers x and n. Your program must contain a recursive procedure which executes the following recursive definition of x^n:
X^n = 1 if n = 0
X^n = x if n =1
X^n = (x^(n/2)) * (x^(n/2)) if n > 1 and n is even
X^n = x * (x^(n-1)) if n > 1 and n is odd
Recall that an even number can be divided by 2 using the shift right logical instruction (srl). So if the integer n is even and contained in register \$t0, then

srl \$t1, \$t0, 1
will result in n/2 being placed in register \$t1. Also, you can check if a number is even by checking the value of its least significant bit. The least significant bit can be isolated by using the immediate instruction with . That is

andi \$t1, \$t0, 1
will result in \$t1 containing 1 (i.e. a string of 31 zeros followed by a 1) if the least significant bit of \$t0 is 1 and 0 (i.e. a string of 32 zeros) otherwise.
If this procedure were written in a highlevel programming language, it might look something like this:
pow(int x, int n) {
if( n == 0 ) {
return 1; }
else if( n == 1 ) {
return x; }
else if( (n % 2) == 0 ) {
int temp = pow(x,n/2);
return temp*temp;
}
else {
return x*pow(x, n }
}
Your program should prompt the user to input x and n, and then it should print the result. You may use the
"
Could someone show me??

Any body helps me???

Consider the code:
mult \$t0,\$t1
mflo \$t2
When i assign the value to t0, t1 like this: \$t0=2^30, \$t1=2
which means \$t0=2^31=2187483648
but it turned out that i got the negative number -2187483648..
how can i tackle this problem????