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