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

How to preserve the global variables in the stack in MIPS when calling a function?

我正在从混合 C++ 和 Javascript 到 MIPS 汇编的语言开发编译器

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

在main函数中,全局变量和局部变量都在栈中,从$fp开始,这部分运行良好。 但是,当调用另一个函数时,我使用的方法是保存 return 地址 $ra 并设置新的 $fp 和 $sp。 这意味着我无法再访问保存我的全局变量的旧 $fp 地址。 如何进行?

下图描述了我正在使用的过程。图片来自伯克利森教授的讲座

我把全局变量放在 .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