Я новичок в 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 в адресе эквивалентно приращению байта в адресе, содержащем строку?
Большое спасибо!