0

我是 MIPS 的初学者。据我了解,字符串是在 MIPS 中使用指令 .asciiz 存储的,并且字符串中的每个字符都存储在一个字节中。为了在 MIPS 程序中获取特定的字符代码(十进制),我将不得不使用 lb(加载字节)指令,并指定字符串的字节位置以获取存储在该字节中的字符十进制。


            .text
main:       
            la     $t0, str
            move   $a0, $t0
            li     $v0, 4       #print string
            syscall 
# ---------------------------
            lb     $a0, 0(t0)   #to obtain the 1st character
            li     $v0, 1       #print it
            syscall
# ---------------------------
            li     $v0, 10
            syscall

            .data
str:        .asciiz "abcde"

如果我需要一个程序来计算字符串中的字符数,则使用 addi 指令,我似乎没有得到它,如下面的程序所示:


            .text
main:
            la $t0, str
            la $t1, 0  #counter

            lb $a0, 0($t0)       #set $a0 to 1st character in str
# ------------------------------
loop:       beqz   $a0, breakout #if character is empty = 0 (decimal) breakout
            addi   $t0, $t0, 1   # why?
            addi   $t1, $t1, 1   # to increment counter
            lb     $a0, 0($t0)   #loads the first character in $t0
            j loop
# ------------------------------
breakout:   move   $a0, $t1
            li     $v0, 1        #print counter
            syscall
            li     $v0, 10       #system exit
            syscall

            .data
str:        .asciiz "abcde"

我假设“addi $t0, $t0, 1”会将 $t0 的地址从 268500992 增加到 268500993。这是否意味着地址增加 1 可以让我找到字符串中的下一个字符,并且地址中 1 的增量等于包含字符串的地址中一个字节的增量?

非常感谢!

4

0 回答 0