我不知道如何在mips中使用堆栈(汇编)

时间:2011-03-27 18:50:23

标签: stack mips

我给出了有问题的代码,并且堆栈的使用可能无效..

任何人都可以告诉我解决这个问题吗?

.data
.align 2
array:.space 100
.text
.globl main

main:
  li $t0,10


  addi $sp,$sp,-12     #stack
  sw $ra,0($sp)
  sw $s0,4($sp)
  sw $s1,8($sp)
  jal function
  addi $sp,$sp,12
  lw $ra,0($sp)    #hello stack
  lw $s0,4($sp)
  lw $s1,8($sp)
  li $v0,1
  add $a0,$t6,$0
  syscall
  li $v0,10
  syscall

function:
  move $s0,$a2
  move $s1,$a1     
   li $s0,10101    # s0,s1   dont change itsvalues NEVER 
   li $s1,20202
   li $t6,777
   move $v0,$t6
   jr $ra 

1 个答案:

答案 0 :(得分:1)

您是否听说过MIPS处理器中的“延迟插槽”? 任何“分支”指令之后的下一条指令放在“延迟槽”中。这意味着即使执行了分支,也会执行该指令。所以在下一段代码中:

  jal function
  addi $sp,$sp,12

您需要在nop之后放置jal指令,因为addi会在通话后立即执行,但不会在function返回后执行。它也驻留在jr指令。