我正在为学校分配工作,这项任务的一部分是对各种MIPS指令进行排序,并确定它们是否对常量或变量起作用。我的问题与地址有关。我正在阅读我的教科书,我无法弄清楚地址是被视为常数还是变量。我想说这是一个变量,但我真的不太确定。如果有人可以为我验证这将是非常有帮助的。
答案 0 :(得分:1)
好吧,考虑到内存中指令的通常上下文框架,人们通常认为指令本身是常量,尽管可以编写将其修改为所需效果的代码 - 偶尔用于某些超优化目的和也用于病毒。但鉴于正常情况:
.data
array1: .space 12 # reserve 12 bytes for 3 integer array
.text
__start:
la $t0, array1 # load array address
li $t1, 5 # $t1 = 5 ("load immediate")
sw $t1, ($t0) # a[0] = 5
li $t1, 13 # $t1 = 13
addi $t0, t0, 4 # t0 = t0 + 4
sw $t1, ($t0) # a[1] = 13
li $t1, -7 # $t1 = -7
sw $t1, 4($t0) # a[2] = -7
done
因此,在此序列中,值5,13和-7是指令的一部分,通常被视为常量。此外,用于递增$ t0中的地址指针的4也是常量。此外,一旦程序加载到内存,array1
的地址就是常量,因为它不会变化。但是,在程序加载之前,其地址不已知:两个程序段(.data和.text)的地址分配由加载程序分配。