MIPS程序集:如何在.data部分声明整数值?

时间:2010-04-12 03:21:32

标签: assembly mips

我正试图使用​​MARS simulator使用MIPS汇编语言。

我现在的主要问题是如何初始化一组内存位置,以便稍后通过汇编语言指令访问它们?

例如,我想初始化地址0x1001000 - 0x10001003,其值为0x99,0x87,0x23,0x45。我认为这可以在我的汇编程序的数据声明(.data)部分完成,但我不确定语法。这可能吗?

或者,在.data部分中,如何指定将整数值存储在某个内存位置(我不在乎哪里,但我只是想在某处引用它们)。所以我正在寻找C等价于“int x = 20,y = 30,z = 90;”我知道如何使用MIPS指令,但是可以在MIPS汇编程序的.data部分声明类似的内容吗?

3 个答案:

答案 0 :(得分:8)

通常不会初始化特定的内存位置;每个部分(包括.data)都位于链接时,然后解析重定位

要对数据条目进行重定位,请选择一个名称并在其前面放置name:,以便稍后通过名称引用它。您可以使用.size value指定数据块。例如:

.data
    x: .word 20
    y: .word 30
    z: .word 90

然后您可以使用装配中的标签:

.text
    lw $t0, x

答案 1 :(得分:0)

你可以在这里看到更多: MIPS Assembly Overview 在这里:MIPS dataseg

答案 2 :(得分:0)

  

所以如果我声明x:.word 701 y:.word 701然后.text bge y,x,endin   程序的主体,条件将接受整数   变量x和y因此允许结束方法完成?

我认为这是错误的,在你的mips程序中指定x或y只会返回x和y的基址。 例如, 如果你输入

addi $t0,y,8

会给你$ t0 = 10000010(假设y的地址从10000000开始)

将2个单词中的2个值与标签x和y进行比较的正确方法类似于

.data
x: .word 701
y: .word 701

.text
main:
   lw $t0,x              #loads $t0 with 701
   lw $t1,y              #loads $t1 with 701
   bge $t0,$t1,end       #compares $t0 and $t1, if equal, jump to address [end]

end:
   #the code segment for end label