2015-01-13 2 views
0

DLX에서 이중에서 정수로 변환하는 방법을 이해하는 데 약간의 문제가 있습니다. 어셈블리 괴짜가 나를 도울 수 있기를 바랍니다. I는 double 8 바이트로 나누어 64 비트인지 알DLX 프로세서에서 Double에서 Integer로 캐스팅

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 

:

.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 코드는 다음과 같다 : 다음 데이터를 갖는

. r 또는 범용 레지스터는 정수/고정 소수점 수를 4 바이트 그룹으로 32 비트로 제한 할 수 있습니다.

이진수에서, 28은 11100이고, 224는 11100000이다.

나는 공통점이 11100이 둘 다 있기 때문에 의심, 그래서 R 레지스터로 이중에 맞게하려고 할 때 내 생각, 그것은합니다 ... 11100000를 받아 11100로 32 비트 레지스터에 어떻게 든 넣어

정말 혼란 스럽다 .... 어떤 도움을 주시면 감사하겠습니다!

답변

1

r1xtop의 주소로로드됩니다. 11100으로 시작하는 것은 단지 사고 일뿐입니다. 해당 코드에는 "double to integer cast"가 없습니다. xtop 전에 28 개의 double을 정의했기 때문에 224입니다. 각각 8 바이트를 사용합니다 (pi 다음에 1-27이옵니다).

+0

감사합니다. 그렇다면 'xtop'의 가치는 무엇입니까? 나는 값 할당이 데이터 파일에서 일어난다 고 생각 했으므로 xtop의 값이 28이라고 가정했다. –

+0

원래'xtop'는'28'이다. 이 코드는 모든 수를 '28'에서 '1'로 역순으로 반복하고 각각을 '파이'('f2'에로드 된 값)로 곱합니다. – Jester

관련 문제