如何反转用户在MIPS中输入的整数?例如,如果用户输入4352,则它将其反转为2534并输出它。另一个问题是如果数字是4200,那么反向是24,没有前导零。
我有程序加载整数,我知道如何输出它。我该怎么做才能扭转它?通常我会将它转换为字符串并以相反的方式反转它,但我不知道如何在MIPS中这样做,并且找不到太多。
我知道我可以取数字并将其修改10以获得lat数字,并添加0x30以获取ascii数字。但在那之后我迷失了。
答案 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,然后看看编译器如何翻译它......