将多个 address/immedates 加载到 MIPS 程序集中?

Loading multiple address/immedates into MIPS assembly?

我正在尝试找出以下代码:

 .data
  strInput: .space 50
  strFOO: .asciiz "foo\n"
  strAskInput: .asciiz "input your testable string: "

 .text
            li $v0, 4
            la $a0, strAskInput
            syscall

            li $v0, 8
            la $a0, strInput            
            li $a1, 50                              
            syscall         

            la $a0, strFOO
            li $a1, 50

            la $a0, strInput
            la $a1, strFOO

            ....rest of code

基本上,用户输入一个字符串,然后在其余代码中使用字符串 Foo 对其进行检查。

我不明白的是,这段代码用字符串 foo 覆盖了 $a0(我们输入的字符串),但随后又将其恢复(整个代码都有效)并正确地检查了它!

还有,把立即数50载入$a1有什么用?

$a0 不包含输入的字符串;它包含系统调用写入字符串的地址。而且,正如@Jester 评论的那样,50 是为该字符串预留的 space 的长度。