也許你可以使用讀取字符(代碼12),而不是讀整數(代碼5)
如果你讀的性格,你需要從ASCII到整數轉換。所以這意味着需要一些操作。但它可以做得比我想的其他方式更容易。
blackcompe對閱讀字符做了一個好點。
我想你將不得不做讀取字符串(代碼8),然後通過循環和檢查數字或H ascii驗證用戶輸入。然後返回一條錯誤消息或其他東西,如果輸入無效。
此處還有一些僞代碼可以將ascii字符串轉換爲數字。這假定有一串有效的數字。當然,你只有兩位數字,所以這可能是不必要的,但應該工作。
number = 0
for(i = 0; i < str.length; i++)
number = 10 * number + ascii(str[i]) - ascii('0');
我同意blackcompe的回答要好得多。但我只想表明轉換循環實際上起作用。我想迭代,這只是將ASCII數字字符串轉換爲數字。它不檢查H並假定該數字可以是任意長度的。另外,您仍然需要對MIPS中的工作進行調整。
下面是一個示例,顯示我的轉換循環實際工作。這裏是用python重寫的例子,所以它可以被測試。當然,這在python中是沒有意義的。
def pointlesslyConvertStringToNumber(str):
number = 0
for c in str:
//Note: ord is a function to convert a character to ascii
number = 10 * number + ord(c) - ord('0')
print number
讓我們用號碼543:
pointlesslyConvertStringToNumber("543")
這裏是一步一步循環的:
- 10 * 0 + 53 - 48 =數= 5
- 10 * 5 + 52-48 = number = 54
- 10 * 54 + 51-48 = number = 543
這裏是基於上述的MIPS子程序。我知道這是有效的,但我是MIPS初學者,所以請原諒任何愚蠢的錯誤。這又是一個有效的數字字符串。換句話說,另一個子程序會首先驗證輸入。
$ a0是空終止的字符串緩衝區的地址。 在側面的評論是一個稍微修改後的python函數,以更好地適應MIPS代碼。但它不完全是一對一的。從鍵盤輸入到內存時
getNumber: # def getNumber(input):
addi $sp, $sp, -8 #
sw $ra, 4($sp) #
sw $a0, 0($sp) #
add $t0, $a0, $zero #
add $t1, $zero, $zero # i = 0
addi $t4, $zero, 10 #
gnLoop: # while(input[i] != None):
lb $t2, 0($t0) #
beq $t2, $zero, gnEnd #
mult $t1, $t4 # number = 10 * number
mflo $t1 #
addi $t3, $t2, -48 #
add $t1, $t1, $t3 # number += ord(input[i]) - ord('0')
addi $t0, $t0, 1 # i +=1
j gnLoop #
gnEnd: #
lw $a0, 0($sp) #
lw $ra, 4($sp) #
addi $sp, $sp, 8 #
add $v0, $zero, $t1 # return number
jr $ra #
如果你正在解析ascii並將其轉化爲數字(而且,實際上,我不明白你是怎麼做的,否則,除非這是一個巨大的設計錯誤),那麼你需要檢查'H '*之前* ascii - >整數轉換。更多的代碼不會受到傷害。 – tbert 2012-04-22 06:17:40
如果我在讀取整數之前檢查'H',它會每次都等待輸入'H'來繼續遊戲。 – Husam89 2012-04-22 06:51:45