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 にロードすると、以前のアドレスが上書きされます。a0 にはキーのアドレスのみが含まれているはずですが、コメントからは 2 つの文字列が連結されているようです。それはどのように起こりますか。