2015-03-08 2 views
0

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

В настоящее время у меня есть этот код:

.data 
array: .word 1:32  # array of 32 integers 
line: .asciiz "\n" 
main: 
    li $t0, 0   # $t0 is the loop induction variable 
    li $t1, 32  # $t1 is the sentinal value for the loop 
    la $t2, array  # $9 starts as the base address of the array 
        # and is the address of each element 
    li $t3, 1  # $12 is the value 18, to be put in desired element 
for:  
    bge $t0, $t1, end_for 
    sw $t3, ($t2) 
    li $v0, 4 
    la $a0, line 
    syscall 
    li $v0, 1 
    move $a0, t3 
    syscall 
    add $t2, $t2, 4  # get address of next array element 
    add $t0, $0, 1  # increment loop induction variable 
    b valfor   
valfor: 
    addi $t3, $t3, 1  
    b for 

end_for: 
    li $v0, 10 
    syscall 

При попытке запуска этого, мой код немедленно заканчивает. Он не перечисляет никаких ошибок или ничего смешного, он просто говорит -- program is finished running (dropped off bottom) --

Если кто-то может указать мне в правильном направлении, создавая, получая доступ и печатая массив целых чисел, я был бы признателен за огромную сумму.

сайты я думал, что я интерпретировал точно придумать мой код: http://pages.cs.wisc.edu/~cs354-2/onyourown/arrays.html http://courses.cs.vt.edu/~cs2505/fall2010/Notes/pdf/T23.MIPSArrays.pdf

ответ

0

Вы на самом деле пытались запустить код, который вы положили в свой вопрос? Он содержит строку move $a0, t3, которая не собирается в SPIM из-за отсутствующего знака $ (t3 должно быть $t3).

Кроме того, я вижу, по крайней мере две проблемы с кодом:

У вас есть бесконечный цикл из-за этой линии:

add $t0, $0, 1  # increment loop induction variable 

Это просто делает $t0 = 1. Его следует изменить на add $t0, $t0, 1.

Другая проблема заключается в том, что вы поместили свой код в раздел данных. Код должен быть в текстовом разделе, то есть прямо перед main: вы должны иметь:

.text 
.globl main 
+0

Я обязательно посмотрю на это! Я думал, что это правильно составлено, я использовал MARS на Ubuntu, и он никогда не рассказывал мне эти маленькие детали. Еще раз спасибо! – CtRan

Смежные вопросы