Помощь по отладке MIPS - PullRequest
       1

Помощь по отладке MIPS

0 голосов
/ 28 октября 2010

Кажется, что мое понимание MIPS меня не устраивает.

Что мне нужно сделать, это создать программу, которая переворачивает ввод строки из терминала, используя стек, но без использования $ sp.Есть ли здесь кто-нибудь, кто знает MIPS?

Регистрация использования

t0 - начало строки адресаt1 - начало адреса стекаt2 - температура для найденного персонажаt3 - счетчик для t0t4 - счетчик для стекаt5 - перевод строкиt6 - длина

.data

theString:  .space 42
newLine:    .asciiz "\n"
stack:      .space 42

.globl main

.text

main:

li      $v0, 8      #  Set to read string
la  $a0, theString
li      $a1, 42     #  Set size of string
syscall         #  Read string from terminal

la      $t0, theString  #  Prepare t0 with theString
la      $t1, stack  #  Prepare t1 with stack
la  $t5, newLine

addi    $t3, $t0, 0
addi    $t4, $t1, 42

j push

push:

addi    $t3, $t3, 1
addi    $t4, $t4, -1

lb  $t2, ($t3)
beq $t2, $t5, epush
sb  $t2, ($t4)

j push

epush:

sub $t6, $t3, $t0
addi    $t6, $t6, -1

addi    $t3, $t0, 0
addi    $t4, $t1, 0

j pop

pop:

addi    $t3, $t3, 1
addi    $t4, $t4, 1 

lb  $t2, ($t4)
beq $t2, $t5, epop
sb  $t2, ($t3)

j pop

epop:

addi    $t3, $t3, 1
sb  $t5, ($t3)


li  $v0, 4      #  Set to print string
la  $a0, theString  #  Set var to syscall output register
syscall         #  Print string

li  $v0, 10     #  Set to end program
syscall         #  End Program

Например, это просто дает бесконечный цикл.(Извините за отсутствие комментариев, я просто рву свои волосы здесь)

Теперь, я думаю, что проблема где-то связана с символом новой строки, но я не знаю где?

1 Ответ

0 голосов
/ 28 октября 2010

Есть ли причина, по которой вы используете j, а не jal? И кажется, что вы используете SPIM, который имеет многочисленные проблемы.

В вашем цикле pop вы сравниваете (в beq) адрес новой строки (в $t5) и адрес следующего символа в строке. Даже если они могут содержать адрес местоположения, содержащего "\n", адреса могут не совпадать, поскольку "\n" может находиться в нескольких местах. На самом деле, я могу гарантировать, что они никогда не будут одинаковыми, потому что один будет ссылаться на адрес захваченной строки, а тот, который в $t5 будет адресом в начале программы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...