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ます...
本当に紛らわしいもの....助けていただければ幸いです!