首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在不用伪指令的情况下加载内存地址?

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

Stack Overflow用户
提问于 2011-08-31 23:12:06
回答 3查看 3.9K关注 0票数 5

我正在尝试使用火星模拟器来学习MIPS汇编语言。

出于说教的原因,我限制自己不使用假指令。

在试图将某些数据的地址输入寄存器时,我遇到了一个问题,因为我不能使用la

我尝试将luiori结合使用,就像我要直接加载一个数字一样,但没有结果:

代码语言:javascript
运行
复制
  .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 # ?? ... 

这是可行的具体使用火星,没有伪指令?多么?

提前感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-28 18:56:04

要回答修改后的问题“这是否可以使用火星,没有伪指令?”:从快速扫描火星文档,它似乎没有。为了教学目的,火星似乎被故意限制。

如果您想在一个完整的MIPS模拟器上尝试这一点,该模拟器将模拟运行在MIPS上的Linux,并运行使用gnu构建的代码,请查看OVP模拟器。这是免费的,可以在Linux和Windows上运行,但它可能比您需要的要多得多。

票数 7
EN

Stack Overflow用户

发布于 2011-09-01 00:02:23

您需要参考lui和ori说明中数据部分中的标签。这适用于(as):

代码语言:javascript
运行
复制
    .data
lab1: .byte 0xa1
...
.text
    lui $s0, %hi(lab1)
    ori $s0, %lo(lab1)
    lw  $s2, 0($s1)
...

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

票数 3
EN

Stack Overflow用户

发布于 2015-12-20 19:17:31

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

代码语言:javascript
运行
复制
.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"
        #...

如果它不能工作,火星很可能无法获得标签内容,没有伪指令。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7264532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档