2.3. 리눅스와 어셈블리

여러분도 눈치챗을 테지만, 일반적으로, 리눅스에서 프로그래밍을 하면서 어셈블리를 사용할 필요는 없다. 리눅스는 도스와는 달라서, 드라이버와 같은 것들을 어셈블리로 작성할 필요는 없다 (음.. 만약 여러분이 어셈블리로 만들겠다면 할 수 없지만 말이다) 그리고, 오늘날의 좋은 컴파일러들을 이용한다면, 서로 다른 프로세서들을 타겟으로 각각 수행속도의 최적화를 하기를 원하더라도, c 언어를 사용해서 프로그래밍하는 것이 어셈블리로 하는 것보다 더 쉽다. 그러나... 그럼에도 불구하고, c 나 c++ 보다 어셈블리가 더 적절한 경우가 있을 것이다.

여러분이 어셈블리 프로그래밍을 필요로 하거나, 혹은 어셈블리 언어를 사용하기를 원할지도 모른다. 간단히 얘기해서, 어셈블리의 미궁으로 뛰어들어야 하는 경우는 매우 작은 코드가 필요하거나 libc 에 독립적인, 즉, 라이브러리를 필요로 하지 않는 프로그램을 만들어야 하는 좀.. 비정상적인(?) 경우 밖에는 없다. 그리고, 가장 자주 보게 되는 그러한 경우는, 신화시대의(!) 전설적인 광기의 해커처럼 되고 싶어하는 사람의 경우이다. 그런 사람은 주로 스무살 가량의, 모든것을 자신이 다 알아야 하고, 모든것을 스스로 하고 싶어하고, 모든것을 어셈블리로 하고 싶어하는 사람이 많다. :-) (역자 주:역자의 의역이 너무(!) 많았습니다. 아래에 - 그래왔듯이 - 원문을 보입니다.

You may need to use assembly, or you may want to use assembly. In short, main practical (need) reasons of diving into the assembly realm are small code and libc independence. Impractical (want), and the most often reason is being just an old crazy hacker, who has twenty years old habit of doing everything in assembly language.

그러나, 여러분이 리눅스를 임베디드 시스템에 포팅하려는 경우, 전체 프로그램의 크기에 상당히 예민해 질텐데, 즉, 커널, libc, 유틸리티들(file|find|text|sh|etc.) 전부를 단지 몇백 kb 의 작은 크기에 맞추어 넣을려고 하고, 1킬로바이트가 늘어날 때마다 시스템 생산 비용이 너무 많이 들 때가 있을 것이다. 그럴 경우에는 시스템의 일부 혹은 전부를 어셈블리로 재작성하는 것도 한 방법이 될 수 있다. 그리고, 그렇게 한다면, 사이즈는 감동적으로(! 정말로) 작아질 것이다. 예를 하나 들어보자. 어셈블리로 간단한 httpd 데몬을 만들면 600바이트 이하로 만들어질 수 있다. 그러면, 여러분은 커널과, httpd 를 탑재한 웹서버를 400 kb 혹은 보다 더 작은 사이즈로 만들 수 있게 된다.