1

所以我试图在 MIPS 中实现一种 toUpper 函数。该函数可以访问两个变量:$a0 是字符串的起始地址,$a1 是字符串的长度。我正在尝试遍历字符串并将其转换为大写。有谁知道我要去哪里错了?

我想我实际上无法将起始地址中的第一个字符加载到变量中。

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 回答
0

$a0在此代码中的任何地方都没有引用。您需要从$a0using加载值lb,修改它们,然后将它们存储回来。

于 2013-02-20T21:26:15.387 回答