【问题标题】:How to load memory address without using pseudo-instructions?如何在不使用伪指令的情况下加载内存地址?
【发布时间】:2011-08-31 23:12:06
【问题描述】:

我正在尝试使用 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,没有伪指令?怎么样?

提前致谢!

【问题讨论】:

    标签: assembly mips mips32 mars-simulator


    【解决方案1】:

    要回答修改后的问题“在没有伪指令的情况下使用专门的 MARS 是否可行?:快速浏览 MARS 文档,似乎不行。出于教学目的,MARS 似乎受到有意限制。

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

    【讨论】:

    • 你又来了!感谢您的洞察力。 :) 是的,我怀疑这是不可能的,但只是认为设计人员让伪指令做你用实际指令无法实现的事情是一个主要缺陷。我会尝试 OVP 并等待几天看看是否有人提出了解决方案,如果没有,赏金就是你的;)
    • @Trinidad:我也试过了,你连li $t0, 2+2都做不到,所以我同意markgz的观点,这似乎是不可能的。
    【解决方案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”的地址放入机器代码中。

    【讨论】:

      【解决方案3】:

      您的ori 指令还需要另一个操作数才能工作,而且就我查看您的代码而言,“mem”不是现有标签。 试试这个:

      .data 0x10000000 #or choose any other location
              #pointer section
              .word arr
              #...
      
              #pointed section
      arr:    .byte #...  only as tip, you can separate multiple values with comma
                    #behind .byte so that you don't need multiple .byte directives 
              #...
      
      .text
              #...
              lui $s0, 0x1000
              lw $t0, 0($s0)           #get the value of "arr"
              #...
      

      如果不起作用,MARS 很可能在没有伪指令的情况下无法获取标签内容。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-30
        • 2014-08-13
        • 2014-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多