2015-01-13 53 views
0

我在DLX中發生從double到integer的轉換時出現了一些問題。希望大會極客可以幫助我!在DLX處理器中從Double轉換爲Integer

,其具有以下數據:

.data 0 
    .global  a 
a: .double  3.14159265358979  
    .global  x 
x: .double  1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 
    .double  17,18,19,20,21,22,23,24,25,26,27  
    .global  xtop  
xtop: .double  28 

組件DLX代碼如下:

ld f2,a  
    add  r1,r0,xtop 
      ; how does r1 get the value of 224 instead of 28???!!! 
loop: ld f0,0(r1)  
      ; load stall occurs here 
    multd f4,f0,f2  
      ; 4 FP stalls 
    sd 0(r1),f4  
    sub  r1,r1,#8  
    bnez r1,loop  
    nop   ; branch delay slot 
    trap #0 ; terminate simulation 

我知道double是64位中的8個字節劃分。 A r或通用寄存器只能在4個字節的組中具有32位的整數/固定點數。

在二進制中,28是11100而224是11100000

我,因爲他們都懷疑有共同11100,所以我想嘗試,以適應雙成R寄存器時,它需要的11100000,並把它以某種方式在32位寄存器作爲11100 ...

真是令人困惑的東西....任何幫助將不勝感激!

回答

1

r1加載的地址爲xtop。這只是一個意外,它開始於11100。該代碼中沒有「double to integer cast」。這是224,因爲你在xtop之前定義了28個雙打,每個佔8個字節(pi後跟數字1-27)。

+0

謝謝。那麼'xtop'中的值會是什麼呢?我認爲值分配發生在數據文件中,所以我認爲xtop的值爲28. –

+0

最初'xtop'是'28'。代碼將所有數字從「28」向下循環到「1」,並將每個數字乘以「pi」(這是加載到「f2」中的值)。 – Jester

相關問題