.data
prompt: .asciiz, "Enter your name: "
prompt2: .asciiz, " reversed is "
newline: .asciiz, "\n"
name: .space, 100
revname: .space, 100
.text
.globl main
main:
li $s1, '\0' #stores null in $s1
la $s2 ' ' #set s2 to a space
la $a0, prompt #store prompt in $a0
li $v0, 4 #output prompt1
syscall
la $a0, name #store input in name
li $a1, 10
li $v0, 8 #get string from user
syscall
la $a0, name #store name in $a0
li $v0, 4 #print out name
syscall
# remove trailing newline
li $a3, '\n'
newlineloop:
beqz $a1, newlineloopend
subu $a1, $a1, 1
lb $a2, name($a1)
bne $a2, $a3, newlineloop
li $a3, 0
sb $a3, name($a1)
newlineloopend:
la $a0, prompt2 #load prompt2 in $a0
li $v0, 4 #print out prompt2
syscall
#start of while loop
loop:
la $t2, ($a0) # We do as always, get the first byte pointed by the address
beq $t2, $s1, loop2 #if t2 == null, end program
bne $t2, $s2, else #if t2 is not a space
addi $a0, $a0, 1 #increment address
else:
addi $a0, $a0, 1
la $t2, ($a0)
j loop
loop2:
lb $t3, ($a0) #first byte pointed by the address
beq $t3, $s2, else1 #if t3 is a space
addi $a0, $a0, 1 #increment address
la $t3, ($a0)
j loop2
else1:
j end
end:
la $t2, ($a0)
li $v0, 4
syscall
la $t3, ($a0)
li $v0, 4
syscall
li $v0,10 #EXIT(0)
syscall
Код застрял в бесконечном цикле, я думал, что сделал правильные реализации, но не уверен, почему он застрял в цикле. Функция завершения не выводит фамилию, имя. Не уверен, что я делаю не так. Моя идея состоит в том, чтобы проходить через строковый блок, который попадает в пробел, сохранять символы после пробела в регистр, когда он встречает нулевой символ, повторять цикл и начинать с фронта. Сохраняйте символы, пока они не попадут в пробел, затем выведите результат и выйдите из программы.
Ввод: первый последний
Выход: последний, первый