br /관련글 : http://asmlove.co.kr/zBdC7/viewtopic.php?t=1776br /br /본 내용은 FPU 명령중에 FLD와 FISTP 에 대한 이해와 gcc와 VC간의 inline assembly 의 변환관계를 다루었던 글입니다.br /br /br /질문 내용 br /br /span class=postbodylong long llrint (double x)
br /
{
br /
long long retval;
br /
__asm__ __volatile__ \
br /
(fistpll %0 : =m (retval) : t (x) : st); \
br /
return retval;
br /
}
br /
br /
위 코드입니다.
br /
br /
Visaul C++ 에서 인라인 어셈코드로 바뀌면 어떻게 되나요?
br /
제가 어셈블러를 몰라서입니다.
br /
br /
꼭 가르쳐주세요!!!/spanbr /br /br /br /br /br /답변 내용br /br /table align=center border=0 cellpadding=3 cellspacing=1 width=90%tbodytrtdspan class=genmedstrong코드:/strong/span/td
/tr
tr
td class=codelong long llrint (double x)
br /
{
br /
#if defined(_WIN32)
br /
volatile long long r;
br /
__asm {
br /
nbsp; FLD QWORD PTR x;
br /
nbsp; FISTP QWORD PTR r;
br /
}
br /
return(r);
br /
#elif defined(__GNUC__)
br /
long long retval;
br /
__asm__ __volatile__ \
br /
(fistpll %0 : =m (retval) : t (x) : st); \
br /
return retval;
br /
#else
br /
# warning not supported llrint function (standard by C99)
br /
#endif
br /
}/td
/tr
/tbody/table
br /
br /
br /
다음과 같이 하시면 되겠습니다.
br /
br /
이것은 일종의 double 값을 반올림하여 정수로 반환하는 함수가 되겠습니다.
br /
br /
FLD는 FP 에 주어진 메모리를 읽는 명령입니다.
br /
FISTP는 FP에서 읽어와서 메모리로 저장할때 정수로 반올림과 동시에 pop 을 합니다.
br /
br /
br /
제가 알기로는 C99 표준에는 llrint 가 채택된거 같은데 정확한건 모르겠네요.
br /
그래서 llrint 함수는 gcc 에서는 그냥 컴파일 옵션으로 -std=c99 와 링크옵션으로 -lm 그리고 math.h를 include 하면 사용할수 있습니다.br /
받은 트랙백이 없고,
댓글이 없습니다.

글
댓글을 달아 주세요
댓글 RSS 주소 : http://blog.minzkn.com/rss/comment/195댓글 ATOM 주소 : http://blog.minzkn.com/atom/comment/195