如何反转用户在 MIPS 中输入的整数?例如,如果用户输入 4352,那么它会将其反转为 2534 并输出。另一个问题是,如果数字是 4200,那么反过来就是 24,没有前导零。
我有整数加载程序,我知道如何输出它。我该怎么做才能扭转它?通常我会将它转换为字符串并以这种方式反转它,但我不知道如何在 MIPS 中做到这一点,也找不到太多。
我知道我可以取这个数字并将其修改 10 以获得纬度数字,并添加 0x30 以获得 ascii 数字。但在那之后我迷路了。
这个片段应该这样做(对于非负整数):
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
在类似于 C 的伪语言中,算法可以写成:
i = the_number;
r = 0;
while (i > 0)
{
r = r * 10 + i % 10;
i = i / 10;
}
其中 % 是 mod 运算符。对于实际的 MIPS 汇编代码,请阅读对问题的评论......虽然翻译伪代码应该不会太难。无论如何,你可以用 C 编写它,编译成 MIPS,然后看看编译器是如何翻译它的......