在MIPS中交换两个数组元素

时间:2015-05-14 12:09:48

标签: arrays mips swap

我必须交换两个数组元素。我已经完成了这个,但在lw $t2, 0($t0) #$t2 = array [i]它开始崩溃,我不知道如何解决它。

以下是代码:

.data

vector: .word   10, 20, 3, 20, 20, 50, 560, 100, 1005, 10
J:      .word   0
I:      .word   0
cad:    .asciiz     "Introduce el indice del primer elemento:\n"
cad2:   .asciiz     "Introduce el indice del segundo elemento:\n"


    .text

main:

    la $a1, vector  #cargo en a1 la dirección base del vector
    la $a2, I       #cargo en a2 el índice i
    la $a3, J       #cargo en a3 el índice j
    move $a1, $zero  #inicializo i a cero
    move $a2, $zero  #inicializo j a cero

    li $v0,4        #imprimo un string
    la $a0, cad
    syscall

    li $v0, 5       #leo el primer índice
    syscall

    move $a1, $v0   #muevo el entero de v0 a a1
    li $v0,4        #imprimo un string
    la $a0, cad2
    syscall

    li $v0,5        #leo el segundo índice
    syscall

    move $a2, $v0   #muevo el entero de v0 a a2

    sll $t0, $a2,2      # $t0 = i*4
    add $t0, $t0, $a1   # $t0 contiene la dirección del vector[i]
    sll $t1, $a3, 2     # $t1 = j*4
    add $t1, $t1, $a1   # $t1 contiene la dirección del vector[j]

    lw $t2, 0($t0)      #$t2 = array [i]
    lw $t3, 0($t1)      #$t3 = array[j]
    sw $t2, 0($t1)      #array[j]=array[i]
    sw $t3, 0($t0)      #array[i]=previous values of array[j]
    syscall     

    li $v0,1
    la $a0, vector
    syscall
    li $v0, 10
    syscall

感谢您的帮助,对不起,如果我说错了,就像您看到我来自西班牙。

1 个答案:

答案 0 :(得分:0)

查看您的代码,我发现了两个问题:

您正在使用$a1存储vector的基址,但$a1用作某些系统调用的参数。查看代码,您将看到覆盖$a1的{​​{1}}。我建议你使用其他寄存器来存储vector的基址。

当您想要初始化索引变量( i j )时,您也会覆盖syscall,根据您的代码,它们应该是{{1} }和$a1