编程语言的变量和寄存器之间的一个主要区别是寄存器的数量有限,在当前计算机上通常为 32 个,例如 MIPS。
这是我在学习 MIPS 语言时读到的。假设有一个程序有超过 32 个变量,每个变量都存储在一个寄存器中。在没有空寄存器的情况下,其余变量会发生什么?
编程语言的变量和寄存器之间的一个主要区别是寄存器的数量有限,在当前计算机上通常为 32 个,例如 MIPS。
这是我在学习 MIPS 语言时读到的。假设有一个程序有超过 32 个变量,每个变量都存储在一个寄存器中。在没有空寄存器的情况下,其余变量会发生什么?
并非所有 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
当您想更新变量或像在计数器中那样大量使用它时,您可以将其从内存加载到寄存器中,执行您想做的事情,然后更新内存存储的变量。