2012-01-06 6 views
0

私は次の問題をあなたの助けが欲しいと思います。アセンブリ:次のコードおよび一般的なメモリスタックに値を保存する必要があります

私は引数としてnを受け取り、それがMIPSアセンブリの立方体であるかどうかを調べる関数is_cubeを実装するように頼まれました。たとえば、8(2^3)と1000(10^3)はキューブです。 $spと、このプロセスのすべてによってスタック内$s0を保存せずに、

# UNTITLED PROGRAM 

.data 

str: .asciiz "Please enter your number >" 
str1: .asciiz "The number is a cube" 
str2: .asciiz "The number is not a cube" 


.text 

main: 

    li $v0 4 
    la $a0 str 
    syscall 

    li $v0 5 
    syscall 


    move $t0 , $v0 
    li $t1, 0 
    blt $t0, $zero, negative 


    negative: 
    sub $t5, $zero, 1 
mul $t0, $t0, $t5 



is_cube: 

    addi $t1, $t1, 1 
    sgt $t2, $t1, $t0 
    bne $t2, $zero, There_is_not 
    mul $t3, $t1, $t1 
    mul $t4 ,$t3, $t1 
    beq $t4, $t0, There_is 

    jal is_cube 



There_is: 

    li $v0 4 
    la $a0 str1 
    syscall 

    jal end 

There_is_not: 

    li $v0 4 
    la $a0 str2 
    syscall 

    jal end 


end: 

、それが動作します:

は、私は、次のコードを書きました。私の質問です:それはそれを保存していないですか?もしそうなら、私はそれをいつ使うべきですか?

ありがとうございます。

+0

質問が分かりません。あなたはどこにでも$ s0を使用していません...なぜあなたはそれを保存しますか? – m0skit0

答えて

1

機能を実装していません。通常の分岐命令の代わりにjalを使用するループを実装しました。実行はメインで開始され、negativeからループがis_cubeから開始し、ループがThere_isまたはThere_is_notに終了すると、別の分岐命令の代わりにjal endが使用されます。

このコードは、x86とは異なり、jal命令がプログラムカウンタの現在の値をスタックにプッシュしないため、がMIPSで動作するようになります。

これが宿題であれば、このコードを送信する前に、アセンブラで関数を書く際の注意に戻ってください。

関連する問題