Arrays MIPS汇编语言中的排序优化
我有一个对数组排序的代码,用MIPS汇编语言实现。我想知道是否有可能进一步优化。 A是数组,A_Size是A的元素数。 代码是:Arrays MIPS汇编语言中的排序优化,arrays,sorting,optimization,assembly,mips,Arrays,Sorting,Optimization,Assembly,Mips,我有一个对数组排序的代码,用MIPS汇编语言实现。我想知道是否有可能进一步优化。 A是数组,A_Size是A的元素数。 代码是: .text lw $s0, A_Size la $s1, A sll $s0, $s0, 2 add $s0, $s0, $s1 add $t4, $0, $s1 Loop1: # iterator: $t4 ble $s0, $t4, End move $t1, $t4 Loop2: # iterator
.text
lw $s0, A_Size
la $s1, A
sll $s0, $s0, 2
add $s0, $s0, $s1
add $t4, $0, $s1
Loop1: # iterator: $t4
ble $s0, $t4, End
move $t1, $t4
Loop2: # iterator: $t1
beq $t1, $s1, End2
lw $t2, 0($t1)
lw $t3, -4($t1)
ble $t3, $t2, End2
sw $t2, -4($t1)
sw $t3, 0($t1)
addi $t1, $t1, -4
j Loop2
End2:
addi $t4, $t4, 4
j Loop1
End:
那是插入排序,不是吗?因此,您最好的优化可能是切换到更有效的排序算法,如合并排序或快速排序。@Michael Yes。这是一项任务。到目前为止,这是我的答案。我的意思是,我优化了给出的代码的一些部分。但我的任何增强功能都没有更改为对特定数组进行排序所需的指令数。但我必须减少它。所以这些变化是对一些指令的一些变化。如果我们假设你只对至少包含一个元素的数组进行排序,你可以去掉ble$s0,$t4,End,并用bne$t4,$s0,Loop1替换j Loop1。但从性能角度来看,这是一个毫无意义的优化。对于初始情况,您可以将End2块上移到Loop1之前调整$t4。这将在每次迭代中为您节省1次跳跃。另外,在我看来,它更像是冒泡排序,所以实际上切换到选择或插入排序将是一个简单的优化。当元素顺序不正确时,将0t1加载到t2中,存储在-4t1中,然后从t1中减去4,然后重复。此时,再次将完全相同的值重新加载到t1中。你能做一个内部循环,保存t1直到你不需要交换它吗?