MIPS地址说明

时间:2016-01-31 06:07:29

标签: assembly mips

我正在为学校分配工作,这项任务的一部分是对各种MIPS指令进行排序,并确定它们是否对常量或变量起作用。我的问题与地址有关。我正在阅读我的教科书,我无法弄清楚地址是被视为常数还是变量。我想说这是一个变量,但我真的不太确定。如果有人可以为我验证这将是非常有帮助的。

1 个答案:

答案 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)的地址分配由加载程序分配。