2012-10-14 1 views
0

표현식을 해결하고 레지스터에 넣는 방법, 인라인 어셈블리에서 사용하고 다시 사용하여 어딘가에 넣으십시오. 예를 들어C++ - 어셈블리에 등록하고 사용하는 표현식 넣기

: 그런데

EAX=a[i]; //Any expression that valid in C++ 
__asm xor eax,0xFFFF //Do something with this 
b[i]=EAX; //And then put it in some variable. 

는 이유는 성능이다.

+0

컴파일러에 따라 다릅니다. [MSVC] 문서 (http://msdn.microsoft.com/en-us/library/4ks26t93.aspx), [GCC] (http://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html)), [GCC 다시] (http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html). 그러나 요즈음 컴파일러는 대부분의 경우 어셈블리보다 코드를 최적화 할 수 있습니다. – DCoder

+0

확률은 당신보다 더 똑똑하고'b [i] = a [i] xor 0xfff; '입니다. – elmigranto

+0

@DCoder 그래, 알아. 해체에서 보았고 더 나은 코드를 만들 수 있습니다. (3 액션을 3 액션으로 결합하십시오.) – DividedByZero

답변

2

여러 컴파일러는 이것을 달성하기위한 컴파일러 특정 방법을 가지고 있습니다. 그러나 거의 가치가 없습니다.

  • 컴파일러는 일반적으로 대부분의 시간을 쓸 수있는 것보다 더 나은 코드를 생성합니다 :

    이 일을 가치가 거의 결코 이유의 목록이 있습니다.

  • 그래도 코드를 자주 미세 조정하여 컴파일러가 최소한 작성할 수있는 코드를 작성하도록 유도하고 프로그램을 이식성있게 유지할 수 있습니다.
  • 인식 된 성능 문제가있는 코드는 프로그램에서 실제로 시간의 0.01 %를 소비하기 때문에 성능에 실제로 중요하지 않습니다.
  • 당신은 프로그램을 표준 C++로 유지하고 #ifdef 수톤의 경비원들로 인해 혼란스럽지 않게하고 싶습니다.

표시 한 예는별로 매력적이지 않습니다.