访问存储在堆栈MIPS中的值

时间:2013-11-03 22:26:57

标签: assembly stack mips

我想知道在单个函数中,当我通过beq或bne去其他地方时,会创建一个新堆栈,或者因为我仍然在同一个函数内部,我的堆栈会继续吗?让我通过一个例子解释我的问题。 在测试部分之前,我已经将$ t3的内容压缩到堆栈中并且在进行测试后我想要达到它。这可能吗?提前致谢

   main:
       addi $sp, $sp, -1
       sb $t3,($sp)       #t3 stores value 1 and I stored it into stack by this line
       beq $t1 $t2 test   #assume it holds


   test:
      lb $t7,($sp)        # now I want to take 1 into $t7 here.Is it possible ??
      addi $sp, $sp, 1
      la $t7,($a0)
      li $v0,4 
      syscall 
      li $v0,10
      syscall

1 个答案:

答案 0 :(得分:0)

首先,如果要调用函数,请使用jump而不是branch。分支通常用于ifs,whiles等。有专门为此目的而设置的jalr(跳转和链接寄存器)等特殊跳转指令,因为它将返回地址存储在$ra中(因此您可以从函数返回 )。

截至您的问题,您当然可以访问。堆栈只是一个内存区域。但你所做的实际上是将参数传递给函数。 MIPS ABI声明这应该通过$aX寄存器而不是堆栈来完成。

编辑:我看到你对堆栈感到困惑。有关MIPS中堆栈的更多详细信息,请参阅this(在其他架构中它也非常相似)。