如何在MIPS中反转整数?

时间:2012-11-15 06:31:00

标签: integer mips reverse

如何反转用户在MIPS中输入的整数?例如,如果用户输入4352,则它将其反转为2534并输出它。另一个问题是如果数字是4200,那么反向是24,没有前导零。

我有程序加载整数,我知道如何输出它。我该怎么做才能扭转它?通常我会将它转换为字符串并以相反的方式反转它,但我不知道如何在MIPS中这样做,并且找不到太多。

我知道我可以取数字并将其修改10以获得lat数字,并添加0x30以获取ascii数字。但在那之后我迷失了。

2 个答案:

答案 0 :(得分:3)

这个代码片段应该这样做(对于非负整数):

     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

答案 1 :(得分:2)

在类似C的伪语言中,算法可以写成:

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

其中%是mod运算符。对于实际的MIPS汇编代码,请阅读问题的评论......虽然翻译伪代码不应该太难。无论如何你可以用C编写它,编译成MIPS,然后看看编译器如何翻译它......