在MIPS中实现toUpper功能

时间:2013-02-20 21:18:20

标签: assembly converter mips toupper

所以我试图在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 

2 个答案:

答案 0 :(得分:2)

最好放置

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:
...

答案 1 :(得分:1)

此代码中的任何位置都未引用

$a0。您需要使用$a0lb加载值,修改它们,然后将其存储回来。