c소스를 컴파일하면 그 과정속에 어셈블리어로 컴파일되고 어셈블로 컴파일한후 링크해서 실행된다고 알고있는데요
어셈블리어로 컴파일된다는것은 처음부터 어셈블리어로 작성한 소스랑 같다는 의미인가요?
예로 1. c언어로 작성한 Hell World와 2. 어셈블리어로 작성한 Hell World가 있을경우
c언어로 작성한 소스를 컴파일하는 과정속에 나오는 어셈블리어도 윗줄에 있는 최초에 작성한 어셈블리어와 소스가 같은가요?
헬이라니 조금 무섭지만..
가령 C를 가지고 해당 프로그램을 작성한다 했을 때 가능한 방법은 수도 없이 많을 것입니다.
어셈블리로 직접 작성한다 해도 마찬가지입니다.
그러니 C코드를 컴파일해서 나온 코드가 사람이 직접 어셈블리로 만들어서 나온 코드와 완벽하게 똑같을 확률은 높지 않다고 봐야죠.
물론 동일한 함수와 동일한 진행방식으로 프로그램을 작성할 경우에는 최적화 부분을 제외하면 프로그램 진행 방식은 의미상으로는 거의 같은 게 맞지만,
어쨌든 코드상으로는 완전히 동일하기가 어렵다는 것이죠.
컴파일러상에서 어셈블리 리스팅 파일을 생성하게 할 수 있으니, 한번 직접 해보시면 이해가 빠를 것입니다.
--
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
음... Hell World 라니..
헬이라니 조금 무섭지만..
가령 C를 가지고 해당 프로그램을 작성한다 했을 때 가능한 방법은 수도 없이 많을 것입니다.
어셈블리로 직접 작성한다 해도 마찬가지입니다.
그러니 C코드를 컴파일해서 나온 코드가 사람이 직접 어셈블리로 만들어서 나온 코드와 완벽하게 똑같을 확률은 높지 않다고 봐야죠.
물론 동일한 함수와 동일한 진행방식으로 프로그램을 작성할 경우에는 최적화 부분을 제외하면 프로그램 진행 방식은 의미상으로는 거의 같은 게 맞지만,
어쨌든 코드상으로는 완전히 동일하기가 어렵다는 것이죠.
컴파일러상에서 어셈블리 리스팅 파일을 생성하게 할 수 있으니, 한번 직접 해보시면 이해가 빠를 것입니다.
--
댓글 달기