【发布时间】:2021-03-27 11:52:45
【问题描述】:
我想以最干净的方式复制它
在python中
A = [0,0,0,0,0]
i = 0
while(i != 5):
A[i] = 10
i++
也就是说,我想遍历一个数组并将其所有值设置为 [10,10,10,10,10]
这就是我在 mips 汇编中所做的
.data
array: .word 0:5
.text
main:
li $t1, 0 # i = 0
la $t9, array # $t9 = addr(array)
li $t8, 10 # $t8 = 10
start_loop:
beq $t1, 5, end_loop # if i == 5 jump to end loop
sll $t2, $t1, 2 # $t2 = i x 4
add $t2, $t9, $t2 # $t3 = addr(array[i])
sw $t8, 0($t2) # array[i] = $t8
addi $t1, $t1, 1 # i = i + 1
j start_loop
end_loop:
li $v0, 10 # end program
syscall
我觉得我使用了很多寄存器,这不是最干净的方法。任何帮助表示赞赏
(还要确保使用循环,我可以在没有循环的情况下对其进行硬编码,但我只是想找出使用循环的其他方法)
【问题讨论】:
-
克雷格在Translating C function with args to MIPS: loop over an int array and count negatives 上的回答中的最终完全优化版本是您应该做的。在循环内部,您的情况只有 3 条指令:
sw/addiu指针递增 4/bne $p, $endp, top_of_loop(其中endp是指向您之前计算的 1-past-the-end 的指针,位于循环之前)。由于循环中不需要i,因此将其优化掉。