좋은 질문. 모든 새로운 C 또는 C ++ 개발자는이를 염두에두고 있습니다. 이 게시물의 나머지 부분에 대해 표준 x86 시스템을 가정합니다. Microsoft C ++ 컴파일러를 사용하는 경우 메모장을 열고 이것을 입력하십시오 (파일 이름은 Test.c).
int main(int argc, char **argv)
{
return 0
}
이제이 파일을 컴파일하십시오 (개발자 명령 프롬프트 사용) cl Test.c /FaTest.asm
메모장에서 Test.asm을 엽니 다. 번역 된 코드는 C / C ++가 어셈블러로 변환 된 것입니다. 힌트가 있습니까?
_main PROC
push ebp
mov ebp, esp
xor eax, eax
pop ebp
ret 0
_main ENDP
C / C ++ 프로그램은 금속에서 실행되도록 설계되었습니다. 즉, 하위 수준의 하드웨어에 액세스 할 수 있으므로 하드웨어 기능을 쉽게 이용할 수 있습니다. x86 컴퓨터에서 C 라이브러리 getch ()를 작성한다고 가정 해보십시오.
어셈블러에 따라 다음과 같이 입력합니다.
_getch proc
xor AH, AH
int 16h
;AL contains the keycode (AX is already there - so just return)
ret
어셈블러를 사용하여 실행하고 .OBJ-getch.obj라는 이름을 생성합니다.
그런 다음 C 프로그램을 작성합니다 (#include 아무것도 포함하지 않습니다)
extern char getch();
void main(int, char **)
{
getch();
}
이제이 파일 이름을 GetChTest.c로 지정하십시오. getch.obj를 전달하여이 파일을 컴파일하십시오. 또는 개별적으로 .obj 및 LINK GetChTest.Obj 및 getch.Obj로 컴파일하여 GetChTest.exe를 생성합니다.
GetChTest.exe를 실행하면 키보드 입력을 기다립니다.
C / C ++ 프로그래밍은 언어에 관한 것이 아닙니다. 우수한 C / C ++ 프로그래머가 되려면 실행되는 머신 유형에 대해 잘 알고 있어야합니다. 메모리 관리가 어떻게 처리되는지, 레지스터가 어떻게 구성되는지 등을 알아야합니다. 정기적 인 프로그래밍을 위해 이러한 정보가 모두 필요한 것은 아닙니다. 기본 하드웨어 지식 외에도 컴파일러가 작동하는 방식 (예 : 변환 방법)을 이해하면 도움이되므로 필요한 경우 코드를 조정할 수 있습니다. 재미있는 패키지입니다!
두 언어 모두 __asm 키워드를 지원하므로 어셈블리 언어 코드도 혼합 할 수 있습니다. C와 C ++를 배우면 전반적으로 더 나은 프로그래머가 될 것입니다.
항상 어셈블러와 연결할 필요는 없습니다. 나는 그것이 당신이 더 잘 이해하는 데 도움이 될 것이라고 생각했기 때문에 언급했습니다. 대부분의 이러한 라이브러리 호출은 운영 체제에서 제공하는 시스템 호출 / API를 사용합니다 (OS는 하드웨어 상호 작용을 수행함).