2011-11-10 6 views
4

MARS에서는 li.s를 사용할 수 없습니다. 나는 MIPS 프로그래밍에 익숙하지 않으며 어떤 코 프로세서도 사용하지 않으려 고합니다. 왜 li.s는 MARS 프로그램을 사용할 수 없습니까? 누군가가 나를 새로운 방향으로 이끌 수 있다는 것이 매우 도움이 될 것입니다!왜 MARS에서 li.s를 사용할 수 없습니까?

답변

0

당신은 pseudoinstruction의 LS를 사용 pseudoinstruction의 li.s와 동일한 효과를 얻을 수 있고, 일정한 데이터 세그먼트에 저장된 :

l.s $f1, fpconst 

.data 0x1000 
fpconst: 
.float 1.2345 

이렇게하면 보조 프로세서 레지스터 $ f1을 사용하여 부동 소수점 상수를 저장합니다.

는 또한 l.s

+0

그러나 그 의미를 약간 변경하고 주 메모리에서 FSB를 통해 값을로드하는 비용을 초래합니다. –

+0

의사 지시문은 필자가 작성한 것입니다. [MIPS 어셈블리 언어 프로그래머 가이드] (http://www.cs.unibo.it/~solmi/teaching/.../AssemblyLanguageProgDoc.pdf), 9-21 페이지를 확인하십시오. – gusbro

+0

그리고 저는 여러분에게 동의합니다. 주소 (즉 메모리)에서 값을로드합니다. 당신이 선언 한 메모리에있는 장소에서. 데이터 세그먼트. 그러나 그것은 비용이들 것입니다. 만약 그것이 chache miss라면, li보다 훨씬 많은 비용이들 수 있습니다. –

2

이것은 화성에서 구현되지 않은 의사 명령입니다. li (ori)와 mtc1 시퀀스를 사용할 수 있습니다.

이 $ FP1에 값 1.234을로드하고 MARS에서 작동 : C에서, http://babbage.cs.qc.edu/IEEE-754/Decimal.html를 사용하거나 포트란 (간단한 프로그램을 사용하여 찾을 수 있습니다

li $t1,0x3f9df3b6 
mtc1 $t1,$f1 

진수 또는 정수 값 유사한 포인터를 사용하여) 주연 :

read(*,*) a 
i=transfer(a,i) 
write(*,*) i 
end 
+1

대신 lw $f1, fpconst를 사용하여 일반 레지스터에 상수를 넣을 수 있습니다하지만 MARS는 정수 레지스터에 부동 소수점 값을 허용하지 않을 것으로 보인다. –

+0

감사합니다. –