2017-02-12 13 views
0

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

答えて

1

であるべきである私に6を与える:ここに私の最新の更新です私の自身の質問に答えて、主な混乱は支店と一緒だった。私は今、彼らが対立のような仕事をしていることを理解しています。例えば、私のwhileループで "beq"を$ b2に設定しなければならなかったので、$ t2 =!0でした。ループのだから、$ t2!= 0のとき、私は次の番号を見つけるためにインクリメントした "else"にジャンプします。しかし、余りが0の場合、sum = sum + xの計算を行いました。結論として、主な混乱は支店の反対の考えから来た。私は今、私が言いたかった場合ということを理解:

しばらく(< A2 A1)

私は

while: 
bgeu $a1,$a2, done 
    addi "whatever" 
b while 

done: 
     do done stuff 

としてそれを記述する必要がありますこのような理解する前に、私はそれとして、BLE $ A1を書いていました、$ a2、doneと入力する方法ではありません。論理的には、それはa1 < a2 ...と言うが、実際にはa1 < a2の場合は、 "完了"にジャンプし、計算をスキップします。だから私はちょうど反対に考える必要があった。

関連する問題