1

的背景

我是一名刚开始为我的一门课程学习 MIPS 的学生,我的教授不允许la在我们的代码中使用诸如 Load Address ( ) 之类的伪指令。我想知道如何正确使用标准指令的示例将已声明变量的地址存储到寄存器中以供稍后在代码中使用。

我的解决方案

我目前一直在尝试使用此代码,尽管我在lui指令中遇到语法错误。

main:
.data
    Array:
    .space 80             #Declares that Array will hold 20 integers
.text
    lui  $s0, Array       #loads most significant bits into $s0
    ori  $s0, $s0, Array  #loads least significant bits into $s0

我的问题

据我了解,这应该导致将地址Array放入$s0. 但是,由于情况似乎并非如此,我想知道是否有人能够帮助我解决我应该在这里做的事情。

4

1 回答 1

2

您需要参考 lui 和 ori 指令中数据部分的标签。以下适用于 gnu 汇编器(as):

    .data
    Array:
    .space 80             #Declares that Array will hold 20 integers
...
.text
    lui $s0, %hi(Array)
    ori $s0, %lo(Array)
    lw  $s1, 0($s0)       # load 1st word of Array
...

%hi 和 %lo 指令告诉链接器发生了什么,以便它可以将标签“Array”的地址放入机器代码中。(注意:这可能不适用于 SPIM 或 MARS。)

看到这个问题

请参阅 MIPS Run是关于 MIPS CPU 的规范书籍。本书解释了 MIPS 指令集、CPU 架构以及它们与 MIPS Linux 的关系。

于 2012-10-11T23:40:18.627 回答