0

ユーザーがMIPSに入力した整数を逆にするにはどうすればよいですか?たとえば、ユーザーが4352と入力すると、2534に反転して出力されます。もう1つの問題は、数値が4200の場合、その逆は24であり、先行ゼロはないということです。

私は整数でプログラムをロードしていて、それをうまく出力する方法を知っています。それを元に戻すにはどうすればよいですか?通常、私はそれを文字列に変換してそのように逆にしますが、MIPSでそれを行う方法がわからず、多くを見つけることができませんでした。

数値を取得し、それを10で変更して緯度の桁を取得し、0x30を追加してASCII番号を取得できることを知っています。しかしその後、私は道に迷いました。

4

2 に答える 2

4

このスニペットはそれを行う必要があります(非負の整数の場合):

     li $a1, 1234       # $a1 contains input number

     xor $a2, $a2, $a2  # $a2 will hold reverse integer
     li $t1, 10
     beqz $a1, end
loop:
     divu $a1, $t1      # Divide number by 10
     mflo $a1           # $a1 = quotient
     mfhi $t2           # $t2 = reminder
     mul $a2, $a2, $t1  # reverse=reverse*10
     addu $a2, $a2, $t2 #         + reminder    
     bgtz $a1, loop
end: 
     j end              # Here $a2 contains the reversed integer
于 2012-11-15T20:16:35.430 に答える
2

Cに似た疑似言語では、アルゴリズムは次のように記述できます。

i = the_number;
r = 0;
while (i > 0)
{
   r = r * 10 + i % 10;
   i = i / 10;
}

ここで、%はmod演算子です。実際のMIPSアセンブリコードについては、質問へのコメントを読んでください...擬似コードを変換するのはそれほど難しいことではありませんが。とにかく、それをCで記述し、MIPSにコンパイルしてから、コンパイラーがそれをどのように変換したかを見てみましょう...

于 2012-11-15T06:50:23.237 に答える