谁能用更简单的方式解释一下?
Can anyone please explain this in a easier way?
我一年前参加了计算机组织课程,现在我有一个后续课程 'Computer architecture',我正在使用 John Hennessy 的书的第 3 版 'Quantitative approach to computer architecture',我去了通过 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 reference 以了解有关 MIPS 和指令的更多信息。
The 16-bit signed immediate is added to the 64-bit value in GPR rs and
the 64-bit arithmetic result is placed into GPR rt . No Integer
Overflow exception occurs under any circumstances.
…
The term “unsigned” in the instruction name is a misnomer; this operation is 64-bit modulo arithmetic that does not
trap on overflow. It is appropriate for unsigned arithmetic such as address arithmetic, or integer arithmetic environments that ignore overflow, such as C language arithmetic.
示例未优化或展开。这只是源代码的直译。
我一年前参加了计算机组织课程,现在我有一个后续课程 'Computer architecture',我正在使用 John Hennessy 的书的第 3 版 'Quantitative approach to computer architecture',我去了通过 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 reference 以了解有关 MIPS 和指令的更多信息。
The 16-bit signed immediate is added to the 64-bit value in GPR rs and the 64-bit arithmetic result is placed into GPR rt . No Integer Overflow exception occurs under any circumstances.
…
The term “unsigned” in the instruction name is a misnomer; this operation is 64-bit modulo arithmetic that does not trap on overflow. It is appropriate for unsigned arithmetic such as address arithmetic, or integer arithmetic environments that ignore overflow, such as C language arithmetic.
示例未优化或展开。这只是源代码的直译。