簡體   English   中英

如何在MIPS組件中初始化龐大的數組?

[英]How to initialise a huge array in MIPS assembly?

例如,我正在嘗試將C代碼轉換為等效的MIPS:

int a[50];
int i;
...
a[0] = 1;
a[1] = 1;
...

看着答案之一 ,除了做別的沒有別的辦法嗎?:

     .data
array: .word  1,1,...,0  (till the 50th zero)

文字數據不等同於您的C代碼。 這會更像

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

未初始化的 BSS部分中使用.data 如果您要走這條路線,請確保將數據歸零。

但是,我發現插入實際文字數據沒有錯。 僅僅50個零是什么,盡管我不會像鍵入它們那樣多,而是使用文本編輯器的功能。 對於更多隨機數據,我編寫了一些簡短的程序將其二進制格式轉換為可以插入代碼的二進制格式。

好吧,我要說的是您所說的沒有錯。 但是,顯然也可以使用循環來初始化數組。

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數據指令可以這樣實現:

array: .word 1:49
       .word 0

其中冒號后面的數字表示應分配給冒號前面的值的單詞數。 這可能是您想要的。

那不是.space指令的目的嗎?

所以答案不只是

.data 
a: .space 1:50

它創建一個數組a,為其分配50個單詞,並在每個單詞中存儲“ 1”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM