위가 원본 소스이고 아래가 디스 어셈한 부분인데
보다싶이 int형 곱셈, 나눗셈, 나머지연산을 수행했음.
나도 자세히 이해한건 아니지만 딱봐도 나누기 연산에 cdq라는 명령어가 더 추가되어있음.
블로그에서 검색해보니
32bit기준 자료형을 나눗셈할때(int형) 이 cdq라는 명령어가 붙게된다고 하더라.
이유는
나누기 연산을 수행 할 때 우선
eax에 변수 a의 값을 넣고
나누기를 수행하기 위해서는 이 eax를 32비트가 아닌
64비트로 변환 시켜야 한대(확실 이부분에 대해서는 공부가 필요한듯. 상위32에 몫, 하위 32에 나머지가 들어가니 그래야 할꺼같긴하지만 단순히 이 이유인지는 모르겠음.)
따라서 이 cdq라는 명령어는 이 eax를 eax:edx로 확장 시키는 명령어라는거지.
이런식으로 확장후 나머지 연산을 수행하게 되는데 결과는 eax에 몫, edx에 나머지가 저장되는거지.
mul명령어와 div명령어 에 대한 성능 비교는 나도 잘모르겠지만
처리 과정에 있어서 확실히 나눗셈 연산이 좀더 복잡하기 때문에 더 느리다고
판단할 수 있겠네.. 자세한건 연산이 정확히 어떤식으로 수행되는지 파고들어야할듯함.
ps. 참고로 float연산의 경우는 저 cdq연산이 안들어가네.... 아마 float자체가 따로 몫과 나머지를 분리할 필요가 없기 때문 아닐까.
오 저런식으로 표시하는건 어떤 기능을 쓴거야
처음본당..멋짐
ㄴ비주얼 스튜디오에서 디스어셈 쓴거에여
1/1000000000 초 정도 차이난다고 빠른거냐?
어떻게하냐
어 찾았다. 이런것도 있었다니
설마 씨피유 인스트럭션당 수행속도가 다 똑같다고 생각하는건가????? ㅋ