我正在开发 Decaf 编程项目,这是一个发出 Mips 程序集的编译器。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
只是一个参考,但是,调用 ofReadLine
将更改 指向的值s
。当然,我希望变量保留自己的用户输入副本。
我以前从未做过 Mips 汇编编码,坦率地说,上面的大部分代码都不是我的。我有一本手册,所以关于如何实现ReadLine
为每个用户输入分配新空间的功能有什么建议吗?
谢谢。