我在装配MIPS中乱搞Stacks Push和Pops。我只能通过更改指针的索引手动弹出堆栈$sp
中的数据,但是如何使用循环?
示例:
lw $t1, 0($sp) ## pops the first data at index 0
lw $t1, 4($sp) ## pops the second data at index 4
lw $t1, 8($sp) ## pops the third data at index 8
addui $sp, $sp, 12 ## Lets free our stack
现在我的问题是,如何在循环中执行此操作?如果我使用以下
addui $sp, $sp, 4
这将意味着我们的堆栈中有1个空间。这并不意味着将堆栈指针递增到下一个索引。
我希望你们能得到我在这里想说的话。
我认为这里不允许使用$ t2 lw $t1, $t2($sp)
答案 0 :(得分:1)
addiu $sp, $sp, 4
意味着将堆栈指针递增4(这是单词的大小)。如果你想要一个循环,你可以这样做:
li $t0, 3 # loop counter
loop:
lw $t1, 0($sp) # load top of stack
addiu $sp, $sp, 4 # free top of stack
# ... # do something with $t1
addiu $t0, $t0, -1 # decrement loop counter
bgtz $t0, loop # repeat if not 0