如何在不使用伪指令的情况下加载内存地址?

时间:2011-08-31 23:12:07

标签: assembly mips mips32 mars-simulator

我正在尝试使用 MARS模拟器自行学习MIPS汇编语言。

出于教学原因,我限制自己不使用伪指令。

在尝试将某些数据的地址放入寄存器时,我遇到了一个问题,因为我无法使用la

我尝试将luiori结合使用,就像我直接加载数字一样,但无济于事:

  .data
arr:
  .byte 0xa1
  .byte 0xb2
  .byte 0xc3
  .byte 0xd4
  .byte 0xe5
  .byte 0xf6
  .byte 0x7a
  .byte 0x8b
  .byte 0x9c
  .byte 0xad

.text

  lui $s0, mem # <--- mars just gives me errors here :(
  ori $s0, mem # ?? ... 

这是否可以使用特别是MARS,没有伪指令?怎么样?

提前致谢!

2 个答案:

答案 0 :(得分:6)

要回答修改过的问题“这是否可以使用专门的MARS,没有伪指令?”:从快速扫描MARS文档来看,它似乎没有。 MARS似乎是出于教学目的而故意限制的。

如果你想在一个完整的MIPS模拟器上试一试,它将模拟在MIPS上运行的Linux操作系统并运行使用gnu工具链构建的代码,请查看OVP Simulator。这是免费的,可以在Linux和Windows上运行,但它可能比你需要的更多很多

答案 1 :(得分:2)

您需要在lui和ori说明中引用数据部分中的标签。这适用于gnu汇编程序(as):

    .data
lab1: .byte 0xa1
...
.text
    lui $s0, %hi(lab1)
    ori $s0, %lo(lab1)
    lw  $s2, 0($s1)
...

%hi和%lo指令告诉链接器发生了什么,以便它可以将标签“lab1”的地址放在机器代码中。