Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何在MIPS程序集中初始化大型数组?_C_Arrays_Assembly_Mips - Fatal编程技术网

C 如何在MIPS程序集中初始化大型数组?

C 如何在MIPS程序集中初始化大型数组?,c,arrays,assembly,mips,C,Arrays,Assembly,Mips,例如,我试图将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。如果要走这条路线,请确保将数据归零 不过,我发现插入实际的文字数据

例如,我试图将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个零算不了什么,尽管我不会像键入它们那样多,而是使用我的文本编辑器的功能。对于更多的随机数据,我编写了几个简短的程序,将其二进制格式转换为可以插入代码的格式。

文字数据与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

其中,冒号后面的数字表示应分配给冒号前面的值的字数。这可能就是你想要的。

好吧,我想说的是,你所描述的没有错。但是,显然也可以使用循环来初始化数组

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”。

这不是.space指令的作用吗

那么答案不就是这样吗

.data 
a: .space 1:50

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

yeah只是好奇,但在感兴趣之前从未见过函数“mov”。啊,我看到“mov”实际上被称为“加载”和“存储”(lw/lb和sw/sb)用于MIPSmov'是通用的英特尔操作码,适用于两个方向。顺便说一句,也许你的汇编程序为数据提供了一个.repeat伪操作码。是的,我只是好奇,但在感兴趣之前从未见过函数'mov'。啊,我看到'mov'对于MIPS实际上被称为'load'和'store'(lw/lb和sw/sb)mov'是通用的英特尔操作码,适用于两个方向。顺便说一下,您的汇编程序可能会为数据提供一个.repeat伪操作码。