1

そこで、MIPS に一種の toUpper 関数を実装しようとしています。この関数は、文字列の開始アドレスである $a0 と、文字列の長さである $a1 の 2 つの変数にアクセスできます。文字列をループして大文字に変換しようとしています。誰かが私が間違っている場所を知っていますか?

開始アドレスの最初の文字を実際に変数にロードするのに問題があると思います。

to_upper:

    li $t0, 0 #initialize counter  
    li $t1, 0

Loop: 
    addi $t0, $t0, 1

    sgt $t5, $t0, $a1   
    beqi $t5, 1, Done   

    slti $t5, $t1, 97
    beqi $t5, 1, Loop

    sgti $t5,$t1, 122
    beqi $t5, 1, Loop

    subi $t1, $t1, 32

j Loop

    Done:
    jr $ra 
4

2 に答える 2

1

置いたほうがいい

addi $t0, $t0, 1

ループの終わりに。

したがって、次のようになります。

...
Loop:
    addi $t5, $a0, $t0
    lb $t6, 0($t5)
    ...set $t6 to upper...
    sb $t6, 0($t5)
    addi $t0, $t0, 1
    blt $t0, $a1, Loop
Done:
...
于 2013-02-21T00:02:15.993 に答える