我正在使用类似SPIMS或MARS的系统调用函数。
我正在读一个字符串(它可以工作,因为我可以打印出来),如下所示:
li $v0, 8
la $a0, string
li $a1, 256
syscall
但是,我在访问字符串的单个字符时遇到问题。因此,如果我想访问第一个字符并打印它,我正在尝试这个:
la $t0, string
lb $a0, ($t0)
li $v0, 4
sys call
如果我尝试这样的话:
la $a0, string
li $v0, 4
syscall
这会将整个字符串打印为字符串指向整个字符串。
如果我尝试这样的话:
la $a0, string
lb $a0, ($t0)
li $v0, 4
syscall
它给了我一个出界的错误。我不明白为什么 - 不是一个字节长的字符,这只是将字符串中的第一个字节加载到$ a0?
谢谢
答案 0 :(得分:12)
查看MARS系统调用函数的documentation,您可以看到您正在使用的服务4期望$a0
为“[以]打印的以空字符结尾的字符串的地址” ,这解释了你所看到的行为。
你想要的是功能11“打印字符”,它将低位字节打印为字符。换句话说,以下内容应该有效(未经测试):
la $t0, string
lb $a0, ($t0)
li $v0, 11
syscall