programing

C 코드는 어셈블리 코드(예: 최적화 스트렐렌)를 어떻게 호출합니까?

lastcode 2023. 10. 9. 23:17
반응형

C 코드는 어셈블리 코드(예: 최적화 스트렐렌)를 어떻게 호출합니까?

나는 항상 C 프로그래밍 언어 내의 어떤 기능들이 어떻게 어셈블리로 작성되어 최적화되는지에 대한 것들을 읽습니다.그 문장이 조금 잘못 들린다면 사과하겠습니다.

그래서 분명히 말씀드리겠습니다.UNIX/C 시스템에서 strlen과 같은 일부 기능을 호출할 때 실제 호출하는 기능이 어셈블리에 기록되는 이유는 무엇입니까?조립품을 어떻게든 C 프로그램에 바로 쓸 수 있습니까, 아니면 외부 통화 상황입니까?이것을 할 수 있는 것이 C 표준의 일부입니까, 아니면 운영 체제 고유의 것입니까?

C 표준은 구현 방식보다는 각 라이브러리 기능이 수행해야 할 작업을 지시합니다.

C의 알려진 거의 모든 구현은 기계 언어로 컴파일됩니다.은 C다러와 같은 을 어떻게 는 C /에게 달려 .strlen할 수 C로 구현하여 오브젝트에 컴파일하거나, 어셈블리로 작성하여 오브젝트에 조립하는 방법을 선택할 수 있습니다.아니면 다른 방법으로 실행할 수도 있습니다.다를 때strlen.

많은 C 도구 집합에서 인라인 어셈블리를 작성할 수 있지만 이는 표준의 일부가 아닙니다.모든 그러한 설비는 C 표준의 확장으로 포함되어야 합니다.

도로의 끝에서 컴파일된 프로그램과 어셈블리의 프로그램은 모두 기계어이므로 서로 호출할 수 있습니다.이 방법은 어셈블리 코드가 C로 작성된 프로그램과 동일한 호출 규약(호출 준비, 파라미터 준비 등)을 사용하도록 하는 것입니다.x86 프로세서에 대한 인기 있는 호출 규약에 대한 개요는 여기에서 확인할 수 있습니다.

많이 (대부분?)C 컴파일러는 인라인 어셈블리를 지원하지만 표준에 포함되지는 않습니다.그렇다고 해서 그런 것을 지원하는 컴파일러가 엄격하게 필요한 것은 아닙니다.

첫째, 어셈블리는 대부분 사람(반)이 읽을 수 있는 기계 코드이고, C는 어쨌든 기계 코드가 된다는 것을 인지해야 합니다.

"콜링" C 함수는 단지 레지스터, 스택 및/또는 어떤 확립된 호출 규약에 따라 다른 기계 의존적 메커니즘을 준비하는 일련의 명령어를 생성한 다음 호출된 함수의 시작으로 점프합니다.

A block of assembly code can conform to the appropriate calling convention, and thus generate a blob of machine code that another blob of machine code that was originally written in C is able to call. The reverse is, of course, also possible.

The details of the calling convention, the assembly process, and the linking process (to link the assembly-generated object file with the C-generated object file) may all vary wildly between platforms, compilers, and linkers. A good assembly tutorial for your platform of choice will probably cover such details.

I happen to like the x86-centric PC Assembly Tutorial, which specifically addresses interfacing assembly and C code.

C 코드가 gcc에 의해 컴파일될 때, 그것은 먼저 어셈블러 명령어로 컴파일되고, 그리고 나서 다시 바이너리, 머신 실행 파일로 컴파일됩니다.다음을 지정하면 생성된 어셈블러 명령을 볼 수 있습니다.-S, 와 같이gcc file.c -S.

Assembler code just passes the first stage of C-to-assembler compilation and is then indistinguishable from code compiled from C.

One way to do it is to use inline assembler. That means you can write assembler code directly into your C code. The specific syntax is compiler-specific. For example, see GCC syntax and MS Visual C++ syntax.

인라인 어셈블리는 C 코드로 작성할 수 있습니다.이것에 대한 구문은 매우 구체적이지만,asm보통 키워드를 사용합니다.자세한 정보는 인라인 어셈블리를 살펴봅니다.

ReferenceURL : https://stackoverflow.com/questions/7300160/how-does-c-code-call-assembly-code-e-g-optimized-strlen

반응형