Понимание того, как строка хранится в MIPS и как считать количество символов в строке - PullRequest
0 голосов
/ 07 апреля 2020

Я новичок в MIPS. Насколько я понимаю, строка хранится с использованием директивы .asciiz в MIPS, и каждый символ в строке хранится в байте. Чтобы получить указанный c код символа (десятичный) в программе 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 на 1 с 268500992 до 268500993. Означает ли это, что приращение в адрес по одному позволит мне найти следующий символ в строке, и что приращение 1 в адресе эквивалентно приращению байта в адресе, содержащем строку?

Большое спасибо!

...