我从mips32开始,当我试图从字符串中取出一个字母来打印它时,我会陷入困境。代码应该获取字符串,逐个字符地打印它,以及何时找到i
打印iiing
。
.data
msg: .asciiz "testing"
i: .asciiz "iiing"
.text
.globl main
main:
la $t0, msg
la $t1, i
li $t2, 0
loop:
bneq $t0, 105, end #$t0=i?
lb $a0, ($t0)
li $v0, 4
syscall
addi $t0, $t0, 1
b loop
end:
move $a0, $t1
li $v0, 4
syscall
问题出在哪里?
答案 0 :(得分:0)
你有一些问题。
您正在比较$t0
,即当前字符的地址,而不是字符本身。将该测试移至lb
行下方并针对$a0
进行测试。
105
为E
,而不是i
。试试151
(或更正常,0x69
)。
您希望与beq
进行比较,而不是bneq
。
在循环内部,你应该使用syscall 11
,它打印一个字符,而不是你正在使用的当前系统调用4
,它打印一个字符串。
您的程序最后没有退出系统调用(10
)。
您可以查看this link以获取系统调用列表。
这是一个完整的工作计划供参考:
.data
msg: .asciiz "testing"
i: .asciiz "iiing"
.text
.globl main
main:
la $t0, msg
la $t1, i
li $t2, 0
loop:
lb $a0, ($t0)
beq $a0, 0x69, end
li $v0, 11
syscall
addi $t0, $t0, 1
b loop
end:
move $a0, $t1
li $v0, 4
syscall
li $v0, 10
syscall