0

如何反转用户在 MIPS 中输入的整数?例如,如果用户输入 4352,那么它会将其反转为 2534 并输出。另一个问题是,如果数字是 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 回答