CコードをMIPSに変換する方法が混乱しています。私はループを混乱させるようだが、おそらく間違ったコマンドを使っていると思う。次のように私はこれを行うために作られたCコードは次のようにMIPSの2つの値の間の偶数の整数の合計を計算する方法は?
int main()
{
int x, y;
int sum = 0;
printf("Please enter values for X and Y:\n ");
scanf("%d %d",&x,&y);
if (x > y)
{
printf("\n** Error");
exit(0);
}
while (x <= y)
{
if (x%2 == 0)
sum += x;
x++;
}
printf("\nThe sum of the even integers between X and Y is: %d\n\n",sum);
return 0;
}
MIPS換算での私の試みは、次のとおりです。
.data
Prompt: .asciiz "Please enter values for X and Y:\n"
Result: .asciiz "The sum of the even integers between X and Y is: \n"
.text
li $v0,4 #load $v0 with the print_string code.
la $a0, Prompt #load $a0 with the message to me displayed
syscall
li $v0,5 #load $v0 with the read_int code for X
syscall
move $t0,$v0
li $v0,5 #load $v0 with the read_int code for Y
syscall
move $t1, $v0
while:
slt $t2, $t1,$t0 #$t1 = y $t0 = x
li $t3,2
div $t2,$t3
beq $t2,$0,else
add $s1,$s1,$t0 #s1 = s1 + x
addi $t0,$t0,1 #x++
j while
else:
li $v0,4
la $a0, Result
syscall
move $a0,$s1
li $v0,1
syscall
私はエラーが私のMIPSコードのループであると思います。私の結果はゼロを生成し続け、私のコードはループをチェックしているだけで、私のelse文にジャンプしていると思います。
今後の作業の後、私はすべての整数の合計を計算するようにしています。なぜそうなっているのか正確にはわかりません。私は1と5は、それが1計算入り、3の場合は、だから今
while:
sle $t2, $t0,$t1 #$t1 = y $t0 = x
li $t3,2 #t3 = 2
div $t2,$t3 #$t2/2
beq $t2,$0, else #if ($t2/2 == 0), jump to the else, otherwise do else
add $s1,$s1,$t0 #s1 = s1 + x
addi $t0,$t0,1 #x++
j while
だけではなく、でも和のちょうど2