1

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

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

4

1 回答 1

3

并非所有 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

当您想更新变量或像在计数器中那样大量使用它时,您可以将其从内存加载到寄存器中,执行您想做的事情,然后更新内存存储的变量。

于 2013-10-09T21:42:30.967 回答