7

我正在使用带有系统调用函数的 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 中?

谢谢

4

1 回答 1

12

查看 MARS 系统调用函数的文档,您可以看到您正在使用的服务 4 预计$a0是“要打印的空终止字符串的 [the] 地址”,这解释了您所看到的行为。

您想要的是功能 11“打印字符”,它将低位字节打印为字符。换句话说,以下应该有效(未经测试):

la $t0, string
lb $a0, ($t0)
li $v0, 11
syscall
于 2011-09-28T22:42:39.313 回答