私は、Mipsアセンブリを出力するコンパイラであるDecafプログラミングプロジェクトに取り組んでいます。ReadLine
これは、標準入力から文字列を読み取る組み込み関数のアセンブリです。
input:
.space 40
_ReadLine:
subu $sp, $sp, 8
sw $fp, 8($sp)
sw $ra, 4($sp)
addiu $fp, $sp, 8
subu $sp, $sp, 4
li $a1, 40
la $a0, input
li $v0, 8 #read_string syscall
syscall
la $t1, input
bloop4:
lb $t5, ($t1)
beqz $t5, eloop4
addi $t1, 1
b bloop4
eloop4:
addi $t1, -1
li $t6, 0
sb $t6, ($t1)
la $v0, input
move $sp, $fp
lw $ra, -4($fp)
lw $fp, 0($fp)
jr $ra
したがって、結果(実際には参照)を文字列に割り当てることができます
string s = ReadLine();
ただし、すべてのユーザー入力は同じアドレスに読み込まれ、s
参照にすぎないため、の呼び出しに続いて、ReadLine
が指す値が変更されs
ます。もちろん、変数がユーザー入力の独自のコピーを保持するようにしたいです。
私はこれまでMipsアセンブリのコーディングを行ったことがなく、率直に言って、上記のコードのほとんどは私のものではありません。私はマニュアルを持っているので、ReadLine
すべてのユーザー入力に新しいスペースを割り当てる関数を実装する方法について何か提案はありますか?
ありがとう。