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 비트 레지스터에 어떻게 든 넣어
정말 혼란 스럽다 .... 어떤 도움을 주시면 감사하겠습니다!
감사합니다. 그렇다면 'xtop'의 가치는 무엇입니까? 나는 값 할당이 데이터 파일에서 일어난다 고 생각 했으므로 xtop의 값이 28이라고 가정했다. –
원래'xtop'는'28'이다. 이 코드는 모든 수를 '28'에서 '1'로 역순으로 반복하고 각각을 '파이'('f2'에로드 된 값)로 곱합니다. – Jester