Arrays MIPS-帮助初始化阵列

Arrays MIPS-帮助初始化阵列,arrays,assembly,mips,Arrays,Assembly,Mips,我正在尝试将内存数组初始化为值1、2、3。。10虽然我有点麻烦。以下是我迄今为止的工作: .data myarray: .space 10 .text la $t3, myarray # Load the address of myarray addi $t2, $zero, 1 # Initialize the first data value in register. addi $t0, $zero, 10 # Initialize loop counter $t0 to the v

我正在尝试将内存数组初始化为值1、2、3。。10虽然我有点麻烦。以下是我迄今为止的工作:

.data
myarray: .space 10
.text
la $t3, myarray  # Load the address of myarray 
addi $t2, $zero, 1  # Initialize the first data value in register.
addi $t0, $zero, 10  # Initialize loop counter $t0 to the value 10

top:

sw $t2, 0($t3)   # Copy data from register $t2 to address [ 0 +
# contents of register $t3]
    addi $t0, $t0, -1   # Decrement the loop counter
    bne $t0, $zero, top  

任何帮助都将不胜感激。

您的代码有几个问题

  • 如果使用
    sw
    (存储单词),则假定为“单词”数组。它的大小应该是4*10。如果要创建字节数组,请使用
    sb

  • $t3

  • $t2中的数组值也存在同样的问题

  • 正如@PeterCordes所建议的,这可以通过将循环计数器和数组值寄存器合并到循环中的一条被抑制的指令来优化。C中相应的循环将是

    for(i=1, ptr=array; i!=11; ptr++,i++) *ptr=i;
    
    以及相应的代码

    .data
      myarray: .space 10
    .text
        la $t3, myarray     # Load the address of myarray 
        addi $t2, $zero, 1  # Initialize the first data value in register.
        addi $t0, $zero, 11 # Break the loop when array value reaches 11 
    top:
        sb $t2, 0($t3)      # Copy data from register $t2 to address [ 0 +
                            # contents of register $t3]
        addi $t2, $t2, 1    # Increment array value/loop counter
        addi $t3, $t3, 1    # next array element
        bne $t0, $t2, top  
    

    您可以使用数组元素值作为循环计数器,使用
    bne$t3,$t0,top
    。(在循环外初始化
    t0=11
    )更直译为C的是指针增量,因此没有
    i-1
    .data
      myarray: .space 10
    .text
        la $t3, myarray     # Load the address of myarray 
        addi $t2, $zero, 1  # Initialize the first data value in register.
        addi $t0, $zero, 11 # Break the loop when array value reaches 11 
    top:
        sb $t2, 0($t3)      # Copy data from register $t2 to address [ 0 +
                            # contents of register $t3]
        addi $t2, $t2, 1    # Increment array value/loop counter
        addi $t3, $t3, 1    # next array element
        bne $t0, $t2, top