我是 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 的增量等于包含字符串的地址中一个字节的增量?
非常感谢!