检查MIPS阵列中的零个数

时间:2016-04-08 15:48:53

标签: arrays mips mips32 sll

我有一个问题如下:

给定内存中32位有符号整数的数组及其在其中一个寄存器中的长度,编写一个MIPS程序,计算该数组包含多少个零。假设数组从Ox12345678开始,并且数组的长度已经存储在$ 1中。零的数量应存储在$ 2中,市长可能不会在开头用零初始化。有关MIPS组装说明,请参阅表1.

这是我自己掌握的地方,但我有一个主要问题:

1)我认为如果我有子程序,我需要使用sw $ra, 4($sp)addi $sp,$sp,-8以及sw $fp, 0($sp)推送然后从堆栈中弹出数据。但是,使用我的程序,我有一个break子句,它只移动到一个条件的子程序(如果是$ 0)。所以我没有jal子程序,我beq到子程序。如何修改我的代码才能执行此操作?

这是我目前的代码:

Add $3, $0, $0 #Set a counter to 0, the start of the array
Lui $4, 0x1234
Ori $4, $4, 0x5678  #Store register $4 to start of the array so you can offset
Add $2, $0, $0 #Sets $2 to $0 which is the total number of zeros

Start_for:  Beq $3, $1, end_for #If counter is equal to the array length, go to end
            Lw $5, 0x0($4) Load the current value of array into temp register $5
            Addi $4, $4, 4 #Increment array pointer to next value
            Beq $5, $0, increment #Increment the sum by 1 if the array[i] is zero
            Addi $3, $3, 1 #Increment counter by 1
            J start_for     
increment:
            Addi $2, $2, 1 #Increment the number of zeros by 1 and add to sum
            Jr $ra
End_for:    Lui $8, 0xffff
            Ori $8, $8, 0xf004 Load the outtray into $8
            Lw $8, 0x0($2) Store the number of zeros in the array to the outtray

0 个答案:

没有答案