Получая кучу, как мой вывод и программные сбои. Что я делаю неправильно?

## Question:
## Swap each pair of elements in
## the string "chararray" and
## print the resulting string.
## There will always be an even number
## of characters in "chararray".
##
## Output format must be:
## "badcfe"

#################################################
#                       #
#       text segment            #
#                       #
#################################################

    .text       
        .globl main
main:       # execution starts here

# Any changes above this line will be discarded by
# mipsmark. Put your answer between dashed lines.
#-------------- start cut -----------------------

la $t1, chararray
la $t2, chararray 


nextCh: lb $t0, ($t1) # get a byte from string
        lb $t3, ($t2) #get a byte from string


        beqz $t0, strEnd   #zero means end of string

        add $t2, 1
        sb $t3, ($t1)
        sb $t0, ($t2)
        add $t1, 1

        j nextCh

strEnd: la $a0, chararray
        li $v0, 4
        syscall


        li $v0, 10
        syscall


#--------------  end cut  -----------------------
# Any changes below this line will be discarded by
# mipsmark. Put your answer between dashed lines.

#################################################
#                                               #
#               data segment                    #
#                                               #
    #################################################

        .data
chararray:
    .asciiz "abcdef"
endl:   .asciiz "\n"

##
## End of file loop4.a

Я довольно новичок в этом деле. Я думаю, что я не перебираю массив должным образом или, возможно, я неправильно использую инструкции. Что вы, ребята, думаете? У вас есть идеи? Программа продолжает падать.

1 ответ

Попробуй это:

        la   $t3, chararray
nextCh:
        lb   $t0, 0($t3)  # even byte
        lb   $t1, 1($t2)  # odd byte

        beqz $t0, strEnd  # end of string?

        sb   $t0, 1($t3)  # swap bytes
        sb   $t1, 0($t3)

        add  $t3, 2       # advance by 2 bytes
        b nextCh
Другие вопросы по тегам