Кажется, мое понимание MIPS меня подводит.
Что мне нужно сделать, так это создать программу, которая переворачивает ввод строки с терминала, используя стек, но без использования $sp. Есть здесь кто-нибудь, кто знает MIPS?
Зарегистрировать использование
t0 – начало адреса строки
t1 – начало адреса стека
t2 – временная температура извлеченного символа
t3 – счетчик для t0
t4 – счетчик для стека
t5 – новая строка< br/> t6 - Длина
.data
theString: .space 42
newLine: .asciiz "\n"
stack: .space 42
.globl main
.text
главный:
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
толкать:
addi $t3, $t3, 1
addi $t4, $t4, -1
lb $t2, ($t3)
beq $t2, $t5, epush
sb $t2, ($t4)
j push
эпуш:
sub $t6, $t3, $t0
addi $t6, $t6, -1
addi $t3, $t0, 0
addi $t4, $t1, 0
j pop
поп:
addi $t3, $t3, 1
addi $t4, $t4, 1
lb $t2, ($t4)
beq $t2, $t5, epop
sb $t2, ($t3)
j pop
Эпос:
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
Например, это просто дает бесконечный цикл. (Извините за отсутствие комментариев, я просто рву на себе волосы)
Теперь я думаю, что проблема где-то связана с символом новой строки, но я не знаю, где?