我正试图使用MARS simulator使用MIPS汇编语言。
我现在的主要问题是如何初始化一组内存位置,以便稍后通过汇编语言指令访问它们?
例如,我想初始化地址0x1001000 - 0x10001003,其值为0x99,0x87,0x23,0x45。我认为这可以在我的汇编程序的数据声明(.data)部分完成,但我不确定语法。这可能吗?
或者,在.data部分中,如何指定将整数值存储在某个内存位置(我不在乎哪里,但我只是想在某处引用它们)。所以我正在寻找C等价于“int x = 20,y = 30,z = 90;”我知道如何使用MIPS指令,但是可以在MIPS汇编程序的.data部分声明类似的内容吗?
答案 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