요즘 학교에서 어셈블리어를 배우고 있는데요...
c코드를 디스어셈블하면서 보는데.. 참 희한게 있네요.. gas이구요..
movl %esi , %esi 같은 라인들이 들어있는데 같은값을 같은곳에 옮기는데...
이런걸 왜하는거지요? 컴파일러가 생성한게 분명 사람이 작성한것보다 최적화되어있다고 배운거 같은데..
이런 쓰잘대기 없는 코드들이 들어가는 이유가.. 궁금하네요...
컴파일러가 생성한게 사람이 작성한것보다 최적화되어있다면 누가 어셈블리 루틴을 짜서 넣겠습니까?
그런건가요... ㅡㅡ; 의미없는 명령라인은 그냥 컴파일러의 잘못된 생성한거라고.. 생각하면 되는건가요?
오승택
제가 어셈블러는 잘 몰라서 직접적인 답변은 힘들듯합니다만, 사용하신 컴파일러 종류와 디스어셈블하신 바이너리를 만든 C소스코드를 올리시고 질문하셔야 할듯합니다. 예를 들어 volatile 같은 키워드를 썼다면 무의미한 라인이라도 최적화없이 컴파일됬을테니까요.
컴파일러가 생성한게 분명 사람이 작성한것보다 최적화되어있다고 배운거 같은데..
http://www.masm32.com/board/index.php?topic=12782.0
검색해보니 이정도... Assembly 공부라.. 흥미로울 듯
그러니까 아무일도 안하고 클럭만 소비하는 코드이군요.
nop 명령처럼.
결국 저걸로 파이프라인을 채우지요. 뭐 딱히 별 의미없는 코드도 파이프라인 채우려고 넣는 경우가 좀 있더군요.
이것이 정답일듯 ㅎㅎ ----------------------- 좋은사람한테 잘해라, 물어보자 남의 머리속을 볼수 없으니.. 2010. 1. 20일을 기억하기를 바라며
고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동 "만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"
텍스트 포맷에 대한 자세한 정보
<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]
컴파일러가 생성한게
컴파일러가 생성한게 사람이 작성한것보다 최적화되어있다면 누가 어셈블리 루틴을 짜서 넣겠습니까?
그런건가요...
그런건가요... ㅡㅡ;
의미없는 명령라인은 그냥 컴파일러의 잘못된 생성한거라고.. 생각하면 되는건가요?
오승택
제가 어셈블러는 잘
제가 어셈블러는 잘 몰라서 직접적인 답변은 힘들듯합니다만, 사용하신 컴파일러 종류와 디스어셈블하신 바이너리를 만든 C소스코드를 올리시고 질문하셔야 할듯합니다.
예를 들어 volatile 같은 키워드를 썼다면 무의미한 라인이라도 최적화없이 컴파일됬을테니까요.
어떻게 배우셨는지 모르겠지만, 어설픈 어셈코드보다는 컴파일러의 최적화가 낫다는 뜻이었을 것입니다.
저도 잘 모르지만...
http://www.masm32.com/board/index.php?topic=12782.0
검색해보니 이정도... Assembly 공부라.. 흥미로울 듯
그러니까 아무일도
그러니까 아무일도 안하고 클럭만 소비하는 코드이군요.
nop 명령처럼.
어떻게 보면 저것도 최적화라고 할 수 있는게...
결국 저걸로 파이프라인을 채우지요. 뭐 딱히 별 의미없는 코드도 파이프라인 채우려고 넣는 경우가 좀 있더군요.
이것이 정답일듯
이것이 정답일듯 ㅎㅎ
-----------------------
좋은사람한테 잘해라, 물어보자 남의 머리속을 볼수 없으니..
2010. 1. 20일을 기억하기를 바라며
고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"
댓글 달기