私は 1 年前にコンピューター編成コースを受講しましたが、現在は「コンピューター アーキテクチャー」としてフォローアップしています。ジョン ヘネシーの著書「コンピューター アーキテクチャーへの定量的アプローチ」の第 3 版を使用しています。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 (unsigned) を使用するのはなぜですか?
残りのトピックに沿ってフォローできるように、これの詳細な概要を教えてください。ありがとう