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

时间:2013-07-21 10:55:31

标签: c arrays assembly mips

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

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

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

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

3 个答案:

答案 0 :(得分:2)

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

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

未初始化 BSS部分中的.data

。如果您要使用此路线,请确保将数据归零。

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

答案 1 :(得分: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人们可以用mips这样做:

array: .word 1:49
       .word 0

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

答案 2 :(得分:0)

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

所以答案不是

.data 
a: .space 1:50

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