繁体   English   中英

谁能用更简单的方式解释一下?

[英]Can anyone please explain this in a easier way?

一年前,我参加了一门计算机组织课程,现在我以“计算机体系结构”作为后续课程,我正在使用约翰·轩尼诗的第三版“计算机体系结构的定量方法”,并通过了MIPS ISA但仍然需要一些帮助,您能否更详细地解释这一行代码

源代码:

for(i=1000; i>0; i--)
    x[i] = x[i] + s;

汇编代码:

   Loop:      L.D         F0, 0(R1)          ; F0 = array element
              ADD.D       F4, F0, F2        ; add scalar
              S.D         F4, 0(R1)          ; store result
              DADDUI      R1, R1,# -8      ; decrement address pointer
              BNE         R1, R2, Loop    ; branch if R1 != R2

这是作为循环展开以利用ILP的示例,我对此有一些疑问。 我确实知道该数组从Mem [0 + R1]开始,然后向后直到Mem [R + 8](如文本中所示),这是出于任何原因,或者它们只是随机地占据了这个位置?

另外,为什么要在添加带符号的数字(-8)时使用DADDUI(无符号)?

请对此进行详细概述,以便我可以遵循其余主题。 谢谢

对内存的访问是按照源代码中循环指定的顺序对地址进行的。

daddiu指令足以执行这种地址运算。 “负”值完成了二进制补码的减法。 地址既不是消极也不是积极; 它们只是位模式。 请参考ISA参考以了解有关MIPS和说明的更多信息。

将16位带符号立即数添加到GPR rs中的64位值中,并将64位算术结果放入GPR rt中。 在任何情况下都不会发生Integer Overflow异常。

指令名称中的“无符号”一词是不正确的; 该操作是64位模运算,不会在溢出时捕获。 它适用于无符号算术(例如地址算术)或忽略溢出的整数算术环境(例如C语言算术)。

该示例未优化或展开。 这只是来源的字面翻译。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM