C Language인라인 어셈블리


비고

인라인 어셈블리는 C 소스 코드의 중간에 어셈블리 명령어를 추가하는 관행입니다. ISO C 표준은 인라인 어셈블리를 지원할 필요가 없습니다. 필수가 아니므로 인라인 어셈블리 구문은 컴파일러마다 다릅니다. 일반적으로 지원되는 경우에도 인라인 어셈블리를 사용해야하는 이유는 거의 없으며 그렇지 않은 경우 많은 이유가 있습니다.

찬성

  1. 성능 연산에 대한 특정 어셈블리 명령어를 작성하면 컴파일러에서 생성 된 어셈블리 코드보다 우수한 성능을 얻을 수 있습니다. 이러한 성능 향상은 거의 없습니다. 대부분의 경우 옵티마이 저가 작업을 수행 할 수 있도록 C 코드를 재배치하여 성능을 향상시킬 수 있습니다.
  2. 하드웨어 인터페이스 장치 드라이버 또는 프로세서 시작 코드는 올바른 레지스터에 액세스하고 특정 작업이 특정 순서로 발생하고 작업간에 특정 지연이 발생하도록 보장하기 위해 일부 어셈블리 코드가 필요할 수 있습니다.

단점

  1. 컴파일러 이식성 인라인 어셈블리의 구문은 한 컴파일러에서 다른 컴파일러로 동일하지 않을 수 있습니다. 다른 컴파일러에서 지원해야하는 인라인 어셈블리가있는 코드를 작성하는 경우 선행 처리기 매크로 ( #ifdef )를 사용하여 사용중인 컴파일러를 확인하십시오. 그런 다음 지원되는 각 컴파일러에 대해 별도의 인라인 어셈블리 섹션을 작성합니다.
  2. 프로세서 이식성 x86 프로세서 용 인라인 어셈블리는 작성할 수 없으며 ARM 프로세서에서 작동 할 수 있습니다. 인라인 어셈블리는 특정 프로세서 또는 프로세서 제품군 용으로 작성되었습니다. 다른 프로세서에서 지원하려는 인라인 어셈블리가있는 경우 전 처리기 매크로를 사용하여 코드를 컴파일 할 프로세서를 확인하고 적절한 어셈블리 코드 섹션을 선택하십시오.
  3. 향후 성능 변경 인라인 어셈블리는 특정 프로세서 클럭 속도를 기반으로 지연을 예상하여 작성 될 수 있습니다. 프로그램이 더 빠른 시계로 프로세서 용으로 컴파일되면 어셈블리 코드가 예상대로 수행되지 않을 수 있습니다.

인라인 어셈블리 관련 예