Understanding how string is stored in MIPS and how to count the number of characters in the string

3.4k Views Asked by At

I am a beginner in MIPS. To my understanding string is stored using directive .asciiz in MIPS, and each character in the string is stored in a byte. In order to obtain a specific character code (decimal) in the MIPS program, I will have to use lb (load byte) instruction, and specify the byte position of the string to get back the character decimal stored in that byte.


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

If I need a program to count the number of characters in a string, the addi instruction is used which I don't seem to get it, shown in the program bellow :


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

I assume that "addi $t0, $t0, 1" will increment the address of $t0 by 1 from 268500992 to 268500993. Does that mean that an increment in the address by one will allow me to find the next character in the string, and that the increment of 1 in the address is equivalent to an increment of a byte in the address containing the string?

Many thanks!

0

There are 0 best solutions below