인라인 어셈블러의 용도... 주로 어느 목적으로 사용하면 좋을까요 ?

0
points

C에서 인라인 어셈블러를 사용하면서 어셈블러 언어를
배우려고 생각중인데요, 문뜩 든 생각이

어떤 일을 어셈블러로 짜고, 어떤 일을 C코드로 짜면
효율적일까 ? 하는 생각이 들었습니다.

가만 생각해 보면 C에 포인터니 뭐니 다 있으니까
C로 가지고 짜도 되긴 할꺼 같은데 인라인 어셈블러가
C보다 좋은 부분이 있으니까 쓰는걸텐데 주로 어느부분을
인라인 어셈블러로 만들어야 하나 궁금하네요.

뭐 예를 들어 C코드로 파일 내용을 메모리에다 옮기고
그 메모리 상에서 내용을 조작한다던가
하는 것들 말이죠..

주로 어느부분에 어떻게 활용하시나요 ?

임수서룬뫼의 이미지
37217
points

엄청나게 시스템

2
points

엄청나게 시스템 종속적인 일이나, 최신 명령어집합을 이용한 최적화 등이 있지 않을까 싶네요.
x86에서의 예를 들어 cpuid 명령이라던지, SSE3 이상의 명령어집합 사용 같은 거요.
--
임수서룬뫼 윤희수 {cppig1995/돼지군}

Necromancer의 이미지
14761
points

in, out 같은 하드웨어

1
point

컴파일러가 지원하지 않는 in, out 같은 하드웨어 입출력 명령어들을 쓸 때 쓰죠.
보통 연산 알고리즘은 C, 하드웨어에 매우 종속적인 몇줄 코드에 대해서 어셈블리로 하는 코딩이 많습니다. C 한줄짜리도 어셈블리로 짜면 10줄 내외는 기본이고 수십줄 나올때도 많습니다.

그외에도 속도향상을 도모하기 위해 길이는 짧지만 시간을 많이 잡아먹는 루틴에 대해 사람이 직접 코드 최적화시켜서 넣는 경우도 있습니다. 동영상 인코딩에서 볼 수 있는 mmx, sse 관련코드들이 여기에 해당됩니다.

Written By the Black Knight of Destruction

나빌레라의 이미지
27357
points

운영체제 개발

1
point

운영체제 개발 과정중에는

직접 CPU레지스터를 건드려야 하는 경우가 있는데,

그럴때 인라인 어셈블러를 사용합니다.
----------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

정태영의 이미지
14606
points

컴파일러만으로는

2
points

컴파일러만으로는 mmx, sse, sse2, sse3 같은 스트리밍 인스트럭션을 제대로 활용하기가 쉽지 않습니다. 이런 인스트럭션을 제대로 활용하기 위해선 인라인 어셈블리를 사용해야죠.

단 어설프게 잘못 사용했다가는 -_- 오히려 성능이 떨어지게 될 수 있습니다. 컴파일러에서 만들어내는 코드들이 생각보다 꽤 효율적이거든요.

x264 코드 같은걸 받아보시면 c 버젼과 asm 버젼의 코드들이 (것도 mmx 버젼 sse 버젼 등등) 공존하고 있으니 공부하시는데 도움이 될 것입니다.

(단 x264 에선 인라인 어셈이 아니라 nasm 을 사용하므로 c calling convension 을 알아야할 것 같네요. 이에 대해선 구글 같은 곳에서 stdc calling convension 정도로 검색하면 자료들이 많이 나옵니다. msdn 에도 정리되어 있는 내용이구요.)

--
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~ 나 한줄기 바람처럼..

댓글 보기 옵션

원하시는 댓글 전시 방법을 선택한 다음 "설정 저장"을 누르셔서 적용하십시오.