Assembly_MIPS无法交换2个字符串

时间:2019-05-29 10:50:28

标签: assembly mips swap

我在Assembly中有一个作业,其中我必须交换字符串数组中2个元素的内容,每个元素的长度为8位。 我用两个元素数组进行测试。 首先我使用以下命令将字符串数组加载到$ s2:la $ s2,string 我使用lw $ t5($ s2)将第一个元素存储在$ t5中 并使用lw $ t6,8($ s2)将第二个元素存储在$ t6中 并使用以下方法交换:

lw $ t5,($ s2) lw $ t6,8($ s2) sw $ t6,($ s2) sw $ t5,8($ s2)

但是我有一个错误:运行时异常位于0x00400074:第53行的地址超出了范围0x000a7574

这是总代码:

.data
.align 2
    string:     .space  1600       
    op:         .asciiz "Enter number of student:"
    prompt:     .asciiz "Enter name of student:"
    text:       .asciiz "The list of student after sort is:"
    newline:    .asciiz "\n"
.text
.globl main

main:
# prompt user for array length
    li          $v0,51
    la          $a0,op
    syscall

    addi        $s0,$a0,0           # $s0 contains the integer we read

    add         $t0,$zero,$zero     # index of  number array
    addi        $t1,$zero,1         # counter=1
    add         $t2, $zero,$zero   #index of string aeeay
    la          $s2,string          # load address of string storage area [NEW]
read_string:
    bgt      $t1,$s0, start_swap          # if ($t1 > length) then array is done -- fly
    #-------------------------------------------------
    # prompt the user for next student name
    li          $v0,54
    la          $a0,prompt
    la          $a1, ($s2)
    la          $a2, 20
    syscall

    #----------------------------------------------------


    addi        $s2, $s2,8          #+1 string array
    addi        $t1,$t1,1           # advance iteration count

    j           read_string

start_swap:
#TEST WITH 2 STUDENTS
la  $s2, string
lw  $t5, ($s2)
lw  $t6, 8($s2)
sw  $t6, ($s2)
sw  $t5, 8($s2)

#print first name
la          $a0,($t5)
li          $v0,4           #4 -> string    
syscall

la          $a0,($t6)
li          $v0,4           #4 -> string    
syscall

我是Assembly的新手,所以我们将不胜感激!

0 个答案:

没有答案