-1
我正在为一个赋值写一个简单的代码片段,并且需要将十进制数转换为二进制,八进制和十六进制。我有它的工作,但后来我意识到,由于我使用的算法,我打印的二进制数字向后。我使用的策略是每次打印一位数字。我仍然是初学者,所以我认为这将是避免更多中间问题的简单方法。不幸的是,我没有想到这一切。将十进制转换为二进制并以MIPS打印
binary: la $a0, bType #binary function selected, notify user
li $v0, 4 #print notification
syscall
la $a0, in_val #ask user for input decimal number
li $v0, 4 #print
syscall
li $v0, 5 #syscall read int
syscall
move $t0, $v0 #save input value to $t0
li $t1, 2 #load 2 into $t1 to divide by 2
li $v0, 4
la $a0, bRes
syscall #print result tag
binLoop: divu $t0, $t1 #LO = $t0/2, HI = $t0 % 2
mfhi $t2 #$t2 = HI (remainder)
mflo $t0 #$t0 = $t0/2 (quotient)
move $a0, $t2 #store digit to print
li $v0, 1 #Print digit
syscall
bgtz $t0, binLoop #if input != 0, keep dividing
j main
有什么办法,我可以每个数字,每个数字也许存入一个字符串标签并连接上后,然后读取的字符串向后什么?也许有更好的建议,你可能会指向我。
请注意,代码一次只能打印一个二进制数字,但按照我们想要的相反顺序工作。该程序应该能够处理大数字(如20个二进制数字长),所以我不能将每个数字存储在自己的寄存器中。谢谢大家!
你将不得不回路不存在任何形式的堆栈? – ruslik 2010-10-13 00:10:12