str*_*0r3 2 assembly programming-languages mips
编程语言的变量和寄存器之间的一个主要区别是寄存器的数量有限,在当前的计算机(如 MIPS)上通常为 32 个。
这是我学习MIPS语言时读到的。假设有一个程序有超过32个变量,每个变量都存储在一个寄存器中。当没有空寄存器时,其余变量会发生什么?
小智 5
并不是所有的 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
Run Code Online (Sandbox Code Playgroud)
当您想要更新变量或像计数器一样大量使用它时,您可以将其从内存加载到寄存器中,做您想做的事情,然后更新内存存储的变量。
| 归档时间: |
|
| 查看次数: |
2199 次 |
| 最近记录: |