1

syscall 8を使用して、ユーザーが数字(0〜9)のみの有効な入力を入力したかどうかを確認する効率的な方法を見つけるのに苦労しています。

入力の長さは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
4

2 に答える 2

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
于 2012-11-24T22:14:55.233 に答える