Pregunta

Estoy trabajando en un código MIPS para mi clase de Organizaciones informáticas y, bueno, parece que no puedo hacer que MIPS funcione correctamente y no hay tantos recursos MIPS en línea.Estoy ejecutando el código en PCSPIM.Se supone que el código debe agregar 10 al contenido de la matriz2 y almacenarlos en la matriz1 y luego imprimir la matriz 1.Reelaborado, el código funciona correctamente ahora.

.text
main:
    la $t0, array1
    la $t1, array2
    la $s0, valuec
    li $s2, 6
    add $t6, $zero, 1 #i = 1

Loop:
    addi $t6, $t6, 1 #i++

    lw  $t2, ($t0)
    lw  $t5, ($t1)
    lw  $s1, ($s0)
    addu $t2, $t5, $s1
    sw  $t2, ($t0)
    add $t0, $t0, 4
    add $t1, $t1, 4
    li $v0, 1
    move $a0, $t2
    syscall
    blt $t6, $s2, Loop

    li $v0, 10
    syscall
.data
    array1: .space 20
    array2: .word 1,2,3,5,9
    valuec: .word 10

PCSPIM imprime 0 5 veces y devuelve la Excepción 7 [Dirección de datos incorrectos] que se produjo y se ignoró

¿Fue útil?

Solución

Esto es tarea, así que solo te daré pistas por ahora y las iré ampliando a medida que avances.Un par de cosas:

1/ Necesitas decirnos qué es supuesto hacer.Eso es lo más importante.

2/ Almacena la dirección de la matriz1 en t0 y luego reutiliza t0 dentro del primer ciclo.

3/ Parece estar confundido acerca de las direcciones y el contenido de esas direcciones ("la $s0, valuec" y "addu $t0, $t1, $s0").

ACTUALIZAR:

En realidad, tengo que desconectarme por un tiempo, así que publicaré mi solución para no dejarte en la estacada.

La confusión a la que me referí antes fue el hecho de que estás cargando dos direcciones en $t1 y $s0, y luego las sumas para obtener otra dirección; es probable que esto esté mucho más allá de tu área de datos (realmente deberías agregar una dirección y un desplazamiento).

Ese es básicamente el problema que tienes con tu código (tanto los ceros que se imprimen como el bloqueo).Su mejor opción sería solucionarlo y consultar mi código a continuación solo como último recurso para ver cómo lo habría hecho.Copiar código no le ayudará a largo plazo y sería prudente asumir que su profesor también está comprobando todos los sitios web en busca de plagio.

Este es el código que se me ocurrió (rápido, por lo que tendrás que probarlo; puede que tenga errores).Te sugiero leer los comentarios en excelente detalle para entender lo que está haciendo.

Volveré en unas horas para ver cómo estás.Salud.

.text
main:

# Initialization of array pointers and loop

    la      $t0, array1       # address of array 1
    la      $t1, array2       # address of array 2
    li      $t2, 1            # element number
    li      $t3, 6            # upper limit of elements

# Process each word in array 2, adding 10 and placing
# into array 1.

Loop:
    lw      $t3, 0($t1)       # get word from array 2
    addi    $t3, $t3, 10      # add 10 to word
    sw      $t3, 0($t0)       # store word into array 1
    addi    $t0, $t0, 4       # move to next entry in array 1 and 2
    addi    $t1, $t1, 4
    addi    $t2, $t2, 1       # increment element number
    blt     $t2, $t3, Loop    # loop until all elements done

# Initialize printing loop by going back to start of array 1

    la      $t0, array1       # address of array 1
    li      $t2, 1            # element number

# Loop through array 1, printing each element.

pLoop:  
    lw      $t2, 0($t0)       # get word from array 1
    li      $v0, 1            # 'print' command code
    move    $a0, $t2          # needs value in $a0
    syscall                   # print it
    addi    $t0, $t0, 4       # move to next entry in array 1
    addi    $t2, $t2, 1       # increment element number
    blt     $t2, $t3, Loop    # loop until all elements done

    li      $v0, 10           # 'terminate' command code
    syscall                   # exit

# Data arrays for array 1 and 2

.data
array1: .word 0,0,0,0,0
array2: .word 1,2,3,4,5

Otros consejos

Hay una serie de cuestiones posibles, pero la más obvia / probable es que no se volverá de principal antes del inicio de la sección de datos.

jr ra
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top