-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