Поменяйте местами имя и фамилию MIPS 32 - PullRequest
0 голосов
/ 11 марта 2019
    .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

Код застрял в бесконечном цикле, я думал, что сделал правильные реализации, но не уверен, почему он застрял в цикле. Функция завершения не выводит фамилию, имя. Не уверен, что я делаю не так. Моя идея состоит в том, чтобы проходить через строковый блок, который попадает в пробел, сохранять символы после пробела в регистр, когда он встречает нулевой символ, повторять цикл и начинать с фронта. Сохраняйте символы, пока они не попадут в пробел, затем выведите результат и выйдите из программы.

Ввод: первый последний Выход: последний, первый

...