Pergunta

Eu estou trabalhando em algum código MIPS para minha classe Organizações computador e, bem, eu simplesmente não consigo obter os MIPS para funcionar corretamente e não há que os recursos muitas MIPS online. Estou executando o código em PCSpim. O código é suposto para adicionar 10 ao conteúdo do array2 e armazená-los em array1 e, em seguida, imprimir série 1. refez o código funciona corretamente agora.

.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 vezes e retorna Exception 7 [Bad dados de endereços] ocorreu e ignorado

Foi útil?

Solução

Esta é a lição de casa, então eu só vou lhe dar pistas para agora e adicionar a ele como você vai. Um par de coisas:

1 / Você precisa nos dizer o que é deveria para fazer. Essa é a coisa mais importante.

2 / Você armazenar o endereço array1 em t0 então reutilização t0 dentro do primeiro loop.

3 / Você parece estar confuso sobre endereços e os conteúdos desses endereços ("la $s0, valuec" e "addu $t0, $t1, $s0").

UPDATE:

Na verdade eu tenho de assinar por um tempo, então eu vou postar a minha solução de modo a não deixá-lo em apuros.

A confusão I referida antes foi o fato de que você está carregando até dois endereços em $ t1 e US $ s0, em seguida, adicioná-los em conjunto para obter um outro endereço - isso é provável que seja bem além de sua área de dados (você deve realmente estar adicionando um endereço e um deslocamento).

Isso é basicamente o problema que você tem com o seu código (ambos os zeros a ser impresso e o acidente). Sua melhor aposta seria a correção e se referem ao meu código abaixo apenas como um último recurso para ver como eu teria feito isso. código de cópia não irá ajudá-lo a longo prazo e você seria sábio para assumir o seu educador também está verificando todos os sites de plágio.

Este é o código que eu vim acima com (rapidamente, assim que você precisa testá-lo - ele pode ter bugs). Eu sugiro que você leia os comentários no grande detalhe para entender o que está fazendo.

Eu estarei de volta em poucas horas para ver como você está fazendo. Felicidades.

.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

Outras dicas

Há uma série de possíveis problemas, mas o mais óbvio / provável é que você não está voltando de principal antes do início de sua seção de dados.

jr ra
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top