我目前正在写一个mips程序,做阶乘。我用java编写了阶乘示例,并且在java代码下面还有MIPS程序。我已经把大部分的MIPS都写出来了,但是我不明白为什么它没有正确的处理。任何提示都将不胜感激。
Java code for the iteratve factorial algorithm:
import java.util.Scanner;
public class FactorMachine {
public static void main(String[] args) {
int input;
Scanner in = new Scanner(System.in);
System.out.println("Enter an integer to be factored: ");
input = in.nextInt();
{
int x, factorial = 1;
for (x = input; x > 1; x--)
factorial *= x;
System.out.println("Factorial #" + input + " is " + factorial);
}
}
}MIPS代码:
.data
p1: .asciiz "Enter an integer to be factored: "
ans1: .asciiz "Factorial # "
ans2: .asciiz " is "
ans3: .asciiz "\n\n"
.text
.globl main
main: li $v0, 4
la $a0, p1
syscall
li $v0, 5
syscall
move $t0, $v0 #this is input
li $t1, 1 #initilize factorial
move $t2, $t0 #initilize x
loop:
blt $t2, 1, done
sub $t2, $t2, 1
mul $t3, $t1, $t0
j loop
done:
li $v0, 4
la $a0, ans1
syscall
li $v0, 1
move $a0, $t3
syscall
jr $ra发布于 2014-09-22 10:17:10
让我们看一下Java代码的作用(为了清楚起见,我将X *= Y更改为X = X * Y ):
for (x = input; x > 1; x--)
factorial = factorial * x;现在让我们看看您的程序集代码:
move $t2, $t0 #initilize x
loop:
blt $t2, 1, done
sub $t2, $t2, 1
mul $t3, $t1, $t0
j loop以及在Java中对应的内容:
for (x = input; x >= 1; ) {
x--;
temp = factorial * input;
}注意到区别了吗?你是:
x进行分解,而不是像原来的Java代码那样。input ($t0)而不是x ($t2)。factorial ($t1)。因此,您将始终得到1 * input的乘积,这当然等于input。https://stackoverflow.com/questions/25963935
复制相似问题