【发布时间】: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]这样的总和,但对结果不做任何处理,编译器可以将其视为死代码并选择根本不翻译它。编译器决定使用寄存器和/或从内存中加载数据也是如此。