例如,我正在尝试将C代码转换为等效的MIPS:
int a[50];
int i;
...
a[0] = 1;
a[1] = 1;
...
查看其中一个answers,除此之外别无他法吗?:
.data
array: .word 1,1,...,0 (till the 50th zero)
答案 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”。