【问题标题】:Simple C function to MIPS instructions简单的 C 函数到 MIPS 指令
【发布时间】:2011-04-22 04:54:40
【问题描述】:

我有一个简单的 c 函数,我需要将其转换为 MIPS 指令以完成家庭作业。

函数是:

int load(int *ptr) {
     return *ptr;
}

我想出的 MIPS 指令是:

load:
     move $v0,$a0
     jr $ra

这是正确的吗?

【问题讨论】:

  • 你试过运行它吗?成功了吗?
  • 您之前的@​​987654321@ 以j $ra 结尾;这以jr $ra 结尾。区别重要吗?
  • 我通常使用 MARS 来测试我的工作,但目前我不在我的主计算机旁,我没有能力测试
  • 根据我的教科书,'jr' 是正确的语法。我一定是打错了——我很累^_^

标签: c assembly mips


【解决方案1】:

让我们分析一下这个函数。

首先,这里所涉及的一切都有哪些类型?

  • ptr 是指向 int 的指针。
  • 返回值的类型应该是int

接下来,函数对此做了什么?

  • 取消引用int 指针(即读取指针指向的int 值)ptr 并返回该值。

接下来考虑你的代码在做什么。

  • 您将参数移至返回值。
  • 从函数返回。

这对吗?

我会说不。您实际上返回了指针,而不是指针指向的值。

你能做些什么呢?

记住我们在这里处理的类型以及你对它做了什么。你有你的论点(int * 类型)并且你返回它(int 类型)。类型不匹配。我们在 C 程序中做了什么?我们取消引用指针以获取值。换句话说,将int * 转换为int。你也需要这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-01
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    相关资源
    最近更新 更多