인라인 어셈블러의 용도... 주로 어느 목적으로 사용하면 좋을까요 ?
글쓴이: dingkyu / 작성시간: 일, 2008/06/29 - 6:38오후
C에서 인라인 어셈블러를 사용하면서 어셈블러 언어를
배우려고 생각중인데요, 문뜩 든 생각이
어떤 일을 어셈블러로 짜고, 어떤 일을 C코드로 짜면
효율적일까 ? 하는 생각이 들었습니다.
가만 생각해 보면 C에 포인터니 뭐니 다 있으니까
C로 가지고 짜도 되긴 할꺼 같은데 인라인 어셈블러가
C보다 좋은 부분이 있으니까 쓰는걸텐데 주로 어느부분을
인라인 어셈블러로 만들어야 하나 궁금하네요.
뭐 예를 들어 C코드로 파일 내용을 메모리에다 옮기고
그 메모리 상에서 내용을 조작한다던가
하는 것들 말이죠..
주로 어느부분에 어떻게 활용하시나요 ?
Forums:
엄청나게 시스템
엄청나게 시스템 종속적인 일이나, 최신 명령어집합을 이용한 최적화 등이 있지 않을까 싶네요.
x86에서의 예를 들어 cpuid 명령이라던지, SSE3 이상의 명령어집합 사용 같은 거요.
--
임수서룬뫼 윤희수 {cppig1995/돼지군}
Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.
in, out 같은 하드웨어
컴파일러가 지원하지 않는 in, out 같은 하드웨어 입출력 명령어들을 쓸 때 쓰죠.
보통 연산 알고리즘은 C, 하드웨어에 매우 종속적인 몇줄 코드에 대해서 어셈블리로 하는 코딩이 많습니다. C 한줄짜리도 어셈블리로 짜면 10줄 내외는 기본이고 수십줄 나올때도 많습니다.
그외에도 속도향상을 도모하기 위해 길이는 짧지만 시간을 많이 잡아먹는 루틴에 대해 사람이 직접 코드 최적화시켜서 넣는 경우도 있습니다. 동영상 인코딩에서 볼 수 있는 mmx, sse 관련코드들이 여기에 해당됩니다.
Written By the Black Knight of Destruction
Written By the Black Knight of Destruction
운영체제 개발
운영체제 개발 과정중에는
직접 CPU레지스터를 건드려야 하는 경우가 있는데,
그럴때 인라인 어셈블러를 사용합니다.
----------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라
----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라
컴파일러만으로는
컴파일러만으로는 mmx, sse, sse2, sse3 같은 스트리밍 인스트럭션을 제대로 활용하기가 쉽지 않습니다. 이런 인스트럭션을 제대로 활용하기 위해선 인라인 어셈블리를 사용해야죠.
단 어설프게 잘못 사용했다가는 -_- 오히려 성능이 떨어지게 될 수 있습니다. 컴파일러에서 만들어내는 코드들이 생각보다 꽤 효율적이거든요.
x264 코드 같은걸 받아보시면 c 버젼과 asm 버젼의 코드들이 (것도 mmx 버젼 sse 버젼 등등) 공존하고 있으니 공부하시는데 도움이 될 것입니다.
(단 x264 에선 인라인 어셈이 아니라 nasm 을 사용하므로 c calling convension 을 알아야할 것 같네요. 이에 대해선 구글 같은 곳에서 stdc calling convension 정도로 검색하면 자료들이 많이 나옵니다. msdn 에도 정리되어 있는 내용이구요.)
--
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
댓글 달기