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 

double64 ビットが 8 バイトに分割されていることはわかっています。またはr汎用レジスタは、4 バイトのグループで 32 ビットの整数/固定小数点数のみを持つことができます。

バイナリでは、28 は11100で、224 は11100000です。

両方11100に共通点があるのではないかと思うので、ダブルをRレジスタに合わせようとすると、 を取り、1110000032ビットレジスタに何らかの方法で配置すると思い11100ます...

本当に紛らわしいもの....助けていただければ幸いです!

4

1 に答える 1

1

r1のアドレスが読み込まれますxtop。から始まるのはただの事故です11100。そのコードには「倍精度から整数へのキャスト」はありません。の前に 28 個の double が定義されておりxtop、それぞれが 8 バイト (pi の後に 1 ~ 27 の数字が続く) を使用するため、224 です。

于 2015-01-14T00:03:50.687 に答える