MIPS Assembler Read String переопределяет Print String - PullRequest
0 голосов
/ 04 июля 2018
.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 или в чем проблема. пожалуйста помогите

Мой результат:

Пожалуйста, введите текст

аа

Снова: 1, Выход: 0.

1

аа (здесь должно быть "Пожалуйста, введите текст")

1

Снова: 1, Выход: 0.

1

1 (здесь должно быть «Пожалуйста, введите текст»)

0

Снова: 1, Выход: 0.

0

- программа закончила работу (опущено вниз) -

1 Ответ

0 голосов
/ 10 июля 2018

Вам нужна новая ячейка памяти для вашей входной строки:

.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
...