2012-11-24 68 views
0

我掙扎推測一種有效的方式,以檢查是否用戶輸入了有效輸入其爲僅包含數字(0〜9),使用系統調用8驗證系統調用使用8 MIPS

輸入爲4的用戶輸入字節長(1字),
,我需要檢查每個字節(char)如果它是一個數字或不,

我想嘗試運行一個循環,並檢查其ascii值是否低於48 ('0'ascii decimel value),
或高於57('9'ascii decimel value),

這是否是一種有效的方法?
如果是這樣,在MIPS中實現這種if語句的正確方法是什麼?
例如

if (x < 48) or (x > 57) {...} 

*注:假設我有一個標誌,知道在哪裏停止循環

*編輯:這是代碼的片段,以使其更清晰:

.data 

    number: 
    .word w1 

.text 

.globl main 

main: 

    la $a0, number  # read the number input from user 
    li $a1, 6   # buffer set to max of 4 bytes (32 bits), 
         # assuming the input is no more than the length of a word, 
         # + 2 reserved bytes 
    li $v0, 8 
    syscall 
+0

請不要使用功課標籤。它已經過時並正在被刪除。 – Bart

回答

1

試試這個:

lbu $t0, x  # read next byte 
    sltiu $t1, $t0, 48 # t1 = (x < 48) ? 1 : 0 
    bnez $t1, fail 
    sltiu $t1, $t0, 58 # t1 = (x < 58) ? 1 : 0 
    beqz $t1, fail 
    # we now know that 48 <= $t1 <= 57 
    . . . 
    . . . 
fail: # input byte was not a digit if we get to here 
+0

感謝您的回答,真的幫我完成了, 注意到'beqz','bnez'和'lbu'不是MIPS指令集的一部分。 – res

+0

所有這些指令都是MIPS32指令集的一部分(請參閱http://www.mips.com/media/files/MD00565-2B-MIPS32-QRC-01.01.pdf)。 'LBU'表示「加載字節無符號;'BEQZ'和'BNEZ'是彙編僞指令。 – markgz