如何在MIPS汇编中初始化一个巨大的数组?

例如,我正在尝试将C代码转换为等效的MIPS:

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

看看其中一个答案 ,除此之外别无他法吗?:

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

好吧,我会说你所描述的内容没有任何问题。 但是,显然也可以使用循环来初始化数组。

 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数据指令可以用mips做到这一点:

 array: .word 1:49 .word 0 

冒号后面的数字表示应该在冒号前分配给值的单词数。 这可能就是你要找的东西。

文字数据不等同于您的C代码。 这更像是

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

未初始化的 BSS部分使用.data 。 如果您要使用此路线,请确保将数据归零。

但是,我发现插入实际的文字数据并没有错。 只有50个零是没有的,虽然我不会像输入它们那么多,而是使用我的文本编辑器的强大function。 对于更多的随机数据,我编写了几个简短的程序,将其二进制格式转换为可插入代码的二进制格式。

这不是.space指令的用途吗?

所以答案不会就这样

 .data a: .space 1:50 

它创建一个数组a,为其分配50个单词,并在每个单词中存储“1”。