1
我正在開發Decaf編程項目,這是一個發出Mips程序集的編譯器。這是用於從標準輸入中讀取字符串的內置函數ReadLine
的程序集。如何爲read_string分配空間
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
所以,我可以因爲所有的用戶輸入被讀入相同的地址和s
只是一個參考,但是,下面的調用結果(實際上是一個參考)分配給一個字符串
string s = ReadLine();
的ReadLine
將改變s
指出的值。當然,我希望變量保留自己的用戶輸入副本。
我從來沒有做過Mips彙編代碼之前坦率地說,大多數上面的代碼不是我的。我有一本手冊,有關如何實現ReadLine
函數的任何建議,該函數將爲每個用戶輸入分配一個新空間。
謝謝。
是的,釘了它!謝謝! – manuzhang