2017-08-15 146 views
0

我自配C++和JavaScript来MIPS大会如何在调用函数时在MIPS堆栈中保留全局变量?

调用一个或多个功能时,包括递归什么是保存在栈中的全局变量,最好的办法语言开发编译器?

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

下图描述了我正在使用的过程。从森教授的讲座得到的图像,从伯克利 Prof. Koushik Sen - Berkley

+3

为什么把它们放在那里?如果你刚刚静态分配它们,你就不会有这个问题。 – harold

+0

你的意思是分配在.data区域? – raullalves

+2

他们是全局变量是吗?你为什么试图用局部变量把它们放在堆栈上? –

回答

1

我把全局的。数据段

这里是我如何访问并修改其内容

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