当有超过32个变量时,寄存器会发生什么?

时间:2013-10-09 13:15:30

标签: assembly programming-languages mips

  

编程语言和寄存器的变量之间的一个主要区别是寄存器数量有限,在当前计算机上通常为32,如MIPS。

这是我在学习MIPS语言时所阅读的内容。假设有一个程序有超过32个变量,每个变量存储在寄存器中。当没有空的寄存器时,其余变量会发生什么?

1 个答案:

答案 0 :(得分:2)

并非所有MIPS 32寄存器都用于存储变量,有些具有特殊用途,如$k0$k1$gp$sp,因此存储变量的可用寄存器少了。

通常变量不存储在寄存器中,它们通过为函数创建堆栈帧存储在内存中,如下所示:

# make space of 30 vars, 4 bytes each
addi    $sp, $sp, -4 * 30

# $t0 = 1
addi    $t0, $0, 1

# store vars into the stack
sw      $t0, 0($sp)  # 1
addi    $t0, $t0, 1  # $t0++
sw      $t0, 4($sp)  # 2
addi    $t0, $t0, 1  # $t0++
sw      $t0, 8($sp)  # 3
addi    $t0, $t0, 1  # $t0++
sw      $t0, 12($sp) # 4
#...

# now to access the 4th var, 12($sp), into $t1
lw      $t1, 12($sp)

# do stuff

# deallocate the space and destroy those vars when you done
addi    $sp, $sp, 4 * 30

当你想要更新变量或像在计数器中那样大量使用它时,你将它从内存加载到一个寄存器中,做你想做的事情,然后更新内存存储变量。