[英]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.