Сохранить результаты непосредственно после входных данных в сегменте данных - PullRequest
2 голосов
/ 27 февраля 2012

Это мой код:

.data  
.ascii "r", "o", "r", "y", "\n"
key: .word 2
.text
.globl main

main:   la  $t0, string
        move    $t5, $t0         # preserve original data
        la  $t1, key            # load cypher into t1 reg
        lw  $a1, 0($t1)      # key loaded into a1 reg   

Loop:   lb  $a0, 0($t5)      # ith element of array loaded into a0    
        beq $a0, 10, exit_all   # if ith character is \n, get out of loop
        jal sub1               # otherwise, call sub  

        addi    $t5, $t5,      # increment index of array   
        j   Loop

exit_all: syscall 

sub1:   
    some code
    move $v0, $t0              # what i want to return to main
    jr  $ra                 # exit iteration

У меня есть цикл с подпрограммой. Подпрограмма возвращает (в $ v0 reg) вывод, который я хочу сохранить каждый раз, когда команда 'jr $ ra' возвращает поток в мою основную функцию. Мне нужно сохранить эти результаты сразу после ввода в сегмент данных. Как мне это сделать? Если бы это был только один выход, я мог бы сказать:

sb $v0, 4($t1)

и он будет сохранен сразу после. Но есть несколько выходов, так как мне сделать это в общем виде?

1 Ответ

2 голосов
/ 27 февраля 2012

Вам необходимо зарезервировать место в разделе данных для всех ваших выходных значений, поэтому, например, для 32 выходных значений добавьте:

results: .byte 32

в ваш раздел данных.Затем установите регистр в адрес результатов и увеличивайте регистр каждый раз вокруг цикла:

        la  $t7, result
...
Loop:   ...
        jal sub1
        sb  $v0,0($t7)
        addiu $t7,1
        j loop

Приведенный выше код не проверен.

...