簡體   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