如何在调用函数时在MIPS中保留堆栈中的全局变量?

时间:2017-08-15 02:15:55

标签: assembly compiler-construction mips code-generation

我正在使用将C ++和Javascript混合到MIPS程序集的语言开发编译器

调用一个或多个函数(包括递归)时保留堆栈中全局变量的最佳方法是什么?

在main函数中,全局和局部变量位于堆栈中,从$ fp开始,该部分运行良好。 但是,当调用另一个函数时,我使用的方法保存了返回地址$ ra并设置了新的$ fp和$ sp。 这意味着我无法再访问保存全局变量的旧$ fp地址。 怎么办?

下图描述了我正在使用的过程。图片来自Berkley的Sen教授讲座 Prof. Koushik Sen - Berkley

1 个答案:

答案 0 :(得分:2)

我将全局变量放在.data段

以下是我访问和修改其内容的方式

data
   globalVariable:  .word  10

.text

   #access
   lw $a0, globalVariable 

   #modify
   la $a0, globalVariable #get address
   li $a1, 11 #new value
   sw $a1 0($a0) #save new value

   lw $a2, globalVariable  #get new value