将多个 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 的长度。
我正在尝试找出以下代码:
.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 的长度。