调用函数时如何在 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
我正在从混合 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