在浏览 MIPS 代码时,我有些困惑。代码如下所示
.data
key: .ascii "key: " # "key: \n"
char: .asciiz " \n"
.text
.globl main
main:
jal getchar
la $a0, char # $a0 contains address of char variable (" \n")
sb $v0, ($a0) # replace " " in char with v0, which is read_character (X)
la $a0, key # now a0 will contain, address of "key: " "X\n"
我不明白的是加载地址指令是如何工作的。第一个 a0 包含 char 变量的地址。在下一行中,我们将 v0 的值存储在该位置。( )没有偏移量$a0
,是否像 0( ) 中那样假定为 0 $a0
?为什么只有 " " 空白空间被替换为 v0,而 "\n" 为什么不被替换?或者也可能是空格和 \n 字符都被 v0 替换。
其次,当我们在a0中加载key的地址时,之前的地址应该会被覆盖。a0 应该只包含 key 的地址,但从评论看来,这两个字符串是连接的。怎么会这样。