0

我在理解 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 个字节。一个r或通用寄存器只能有 4 个字节为一组的 32 位整数/定点数。

在二进制中,28 是11100224 是11100000

我怀疑因为它们都有11100共同点,所以我想当试图将双精度放入R寄存器时,它需要11100000并以某种方式将其放入 32 位寄存器中11100...

真正令人困惑的东西......任何帮助将不胜感激!

4

1 回答 1

1

r1加载了 的地址xtop。开始只是一个意外11100。该代码中没有“双整数转换”。它是 224,因为您之前定义了 28 个双精度xtop,每个占用 8 个字节(pi 后跟数字 1-27)。

于 2015-01-14T00:03:50.687 回答