Печать из объявленного массива в MIPS - PullRequest
0 голосов
/ 05 мая 2018

Итак, я делаю что-то похожее на это

for(i=0; i<10; i++){
    print i;
}

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

.data
    a: 
        .word 3, 2, 1, 8, 6, 9, 3, 4, 2, 5
    nline: 
        .asciiz "\n"

    .text
    .globl main
main:
    li $v0, 0

    loop1:
        bgt $t0, 10, exit
        addi $t0, $t0, 1 #counter

        lw $t1, a

        li  $v0, 1      
        move    $a0, $t1
        syscall
    exit:
        li  $v0, 10
        syscall

поэтому я бы не хотел помещать lw $ t1 внутри цикла, но идея в том, что с каждой итерацией цикла он будет печатать 3, 4, 1, 8, и я знаю, что это будет a, a +4, + 8, + 12, и т. Д., Но я не понимаю, как это кодировать, не имея тысячи функций.

1 Ответ

0 голосов
/ 05 мая 2018

Я думаю, вы пытаетесь сделать это:

.data
    a: 
        .word 3, 2, 1, 8, 6, 9, 3, 4, 2, 5
    nline: 
        .asciiz "\n"

    .text
    .globl main
main:
    li      $v0, 0
    la      $t1, a
loop1:
    bge     $t0, 10, exit

    # load word from addrs and goes to the next addrs
    lw      $t2, 0($t1)
    addi    $t1, $t1, 4

    # syscall to print value
    li      $v0, 1      
    move    $a0, $t2
    syscall
    # optional - syscall number for printing character (space)
    li      $a0, 32
    li      $v0, 11  
    syscall


    #increment counter
    addi    $t0, $t0, 1
    j      loop1

 exit:
    li      $v0, 10
    syscall
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...