【问题标题】:C++ to MIPS assemblyC++ 到 MIPS 程序集
【发布时间】:2015-12-09 21:51:32
【问题描述】:

如果我将此代码传输到 mips。

int arr[3];

cin>>arr[0];

cin>>arr[1];

arr[1]+=arr[0];

cin>>arr[2];

arr[2]+=arr[1];

如果我在 $t0 中具有 arr[0] 的值,在 $t1 中具有 arr[1] 的值,并且在 $s0 中具有 arr 的地址。

在这一行

arr[1]+=arr[0];

我应该怎么做? 像这样直接使用 $t1 和 $t0

add $t1,$t1,$t0

或者我应该再次从寄存器中的内存中获取值,然后像这样执行添加指令:

lw $s1,($S0)

lw $s2,4($S0)

add $s2,$s2,$s1

编译器是做什么的?

【问题讨论】:

  • > 编译器做什么?检查你的自我
  • 编译器的作用也取决于其他因素——例如优化。如果你计算一个像arr[1]+=arr[0] 这样的总和,但对结果不做任何处理,编译器可以将其视为死代码并选择根本不翻译它。编译器决定使用寄存器和/或从内存中加载数据也是如此。

标签: c++ arrays assembly mips


【解决方案1】:

如果您已将值正确加载到$t0$t1,则无需再次从地址中获取值。

编译器非常复杂,编译器产生的结果取决于很多事情,比如 Tilo 提到的优化。最好的查看方法是自己编译并查看生成的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 2014-01-24
    • 1970-01-01
    • 2021-04-07
    相关资源
    最近更新 更多