2013-07-21 2 views

ответ

2

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

initTable: 

    la  $t0 table #$t0 stores first address in table 
    addi $t1 $t0 196 #$t1 stores address of one past end (49 * 4) 
    addi $t2 $zero 1 

    intiTableLoop: 

      sw $t2 0($t0) 
      addi $t0 $t0 4 
      blt $t0 $t1 initTableLoop 

    sw $zero 0($t0) 

    jr $ra 

Использование цикла - это, конечно, единственный способ инициализировать динамически выделенный массив.


С тех пор я обнаружил, из ответа здесь: MIPS Data Directives что можно сделать это в трудоемкости, как так:

array: .word 1:49 
     .word 0 

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

2

Буквальное данные не эквивалентны вашему C-коду. Это будет больше похоже

mov [data], 1 
mov [data+1], 1 

с вашим .data в неинициализированного секции BSS . Если вы идете по этому маршруту, обязательно обнулите данные.

Я не нахожу ничего плохого, однако, с вставкой фактических данных. Всего 50 нулей - ничто, хотя я бы не стал типа их, а использовал силу своего текстового редактора. Для получения более случайных данных я написал несколько коротких программ для преобразования своего двоичного формата в один, который я мог бы вставить в код.

+0

Да, было просто любопытно в любом случае, но никогда не видел функцию «mov» перед интересным – compski

+1

А, я вижу, что «mov» на самом деле называется «load» и «store» (lw/lb и sw/sb) для MIPS. «mov» - это общий код операции Intel для обоих направлений. – usr2564301

+0

Кстати, возможно, ваш ассемблер предоставляет псевдопротокод .repeat для данных. – usr2564301

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