5
我正在使用类似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中?
谢谢
IMO你应该总是重置寄存器值执行LI之前。你永远不知道上半部分可能有什么。 – m0skit0
'LI'是一个伪操作,汇编程序通常扩展为'ORI $ rd,$ zero,low16bits',接着是'LUI $ rd,hi16bits'。在LI指令之后,目标寄存器的全部32位被正确设置,因此在LI之前不需要手动复位寄存器。 – markgz
你绝对是对的 – m0skit0