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 /
크리에이티브 커먼즈 라이센스
Creative Commons License
2007/06/11 19:37 2007/06/11 19:37
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://blog.minzkn.com/rss/response/195

댓글+트랙백 ATOM :: http://blog.minzkn.com/atom/response/195

트랙백 주소 :: http://blog.minzkn.com/trackback/195

트랙백 RSS :: http://blog.minzkn.com/rss/trackback/195

트랙백 ATOM :: http://blog.minzkn.com/atom/trackback/195

댓글을 달아 주세요

댓글 RSS 주소 : http://blog.minzkn.com/rss/comment/195
댓글 ATOM 주소 : http://blog.minzkn.com/atom/comment/195