MIPS汇编程序读取字符串将覆盖打印字符串

时间:2018-07-04 17:11:27

标签: assembly mips mars-simulator

.text
la $t5, prompt
la $t6, prompt_char
la $t7, prompt_loop

loop:
la $t4, 0 #count


askForString:
la $a0, prompt
li $v0, 4
syscall

li $v0,8
li $a1, 5 #text einlesen
syscall

j quit

quit:
la $a0, ($t7)
li $v0, 4   #info
syscall

li $a1, 5 #text einlesen
li $v0,5
syscall

beq $v0,1,askForString

exit:

.data
prompt: .asciiz "\nPlease enter text\n"
prompt_char: .asciiz "\njetzt bitte ein Zeichen\n"
prompt_loop: .asciiz "\nAgain: 1, Exit: 0.\n"
endl: .asciiz "\n\n"

如果我继续循环,那么我存储在“提示”(系统调用4)中的文本的问题将被输入(系统调用5)覆盖。 我需要清洁$ a0还是问题。请帮助

我的结果:

  

请输入文字

     

aa

     

再次:1,退出:0。

     

1

     

aa(此处应为“请输入文字”)

     

1

     

再次:1,退出:0。

     

1

     

1(此处应为“请输入文字”)

     

0

     

再次:1,退出:0。

     

0

     

-程序运行完毕(从底部移出)-

1 个答案:

答案 0 :(得分:0)

您需要一个新的存储位置作为输入字符串:

.text
la $t5, prompt
la $t6, prompt_char
la $t7, prompt_loop

loop:
la $t4, 0 #count


askForString:
la $a0, prompt
li $v0, 4
syscall

li $v0,8
la $a0, input  #### --> Other address here
li $a1, 5 #text einlesen
syscall

j quit

quit:
la $a0, ($t7)
li $v0, 4   #info
syscall

li $a1, 5 #text einlesen
li $v0,5
syscall

beq $v0,1,askForString

exit:

.data
prompt: .asciiz "\nPlease enter text\n"
prompt_char: .asciiz "\njetzt bitte ein Zeichen\n"
prompt_loop: .asciiz "\nAgain: 1, Exit: 0.\n"
endl: .asciiz "\n\n"
input: .space 128  ### --> Some space to put the input