어셈블리 언어는 CPU의 내부구조도 잘 알아야 할 뿐만 아니라 배우는데도 오래걸리고, 인
간적인 사고로 복잡한걸 표현하는데도 제한이 있음.
그래서 탄생한게 프로그래밍 언어고 대표적인게 사람이 이해하기 쉬운 C언어와 같은것인데
C언어로 프로그램을 만들면 컴파일러가 알아서 어셈블리 코드로 바꿔준다.
그리고 다시 어셈블리 코드를 어셈블러가 바이너리코드로 바꿔주는 것이다.
3. 바이너리 코드는 어떻게 실행파일이 되는가?
바이너리코드가 자체가 실행파일은 아니다.
프로그램의 실행파일은 운영체제에 매우 의존적이다.
왜냐하면 프로그램들은 운영체제 위에서 동작하도록 되어있다.
그렇기 때문에 실제 프로그램을 실행시키는것은 CPU위에서 동작하는 운영체제이다.
그래서 실행 파일은 운영체제가 이해 할 수 있도록 만들어야하고 운영체제에 의존적이다.
그래서 실행파일은 다른 운영체제에서는 실행이 불가하다.
즉 바이너리 코드를 각 운영체제의 실행파일 포맷(구성형태)에 맞춰서 구성해야 한다.
그것을 바로 링커(Linker)라는 프로그램이 해준다.
1 단계) C언어로 프로그램을 작성(소스 파일)
2 단계) 이 프로그램을 컴파일러가 컴파일하여 어셈블리 코드로 만들고
3 단계) 어셈블러가 어셈블리 코드를 오브젝트파일(바이너리파일)로 생성을 한다.
-오브젝트파일 = 바이너리코드의 모음
4 단계) 링커가 오브젝트파일을 리눅스나,윈도우가 이해할수 있는 포맷으로 구성하여 실행파일을 만든다.
그래서 실행 파일이란 최종적으로 CPU에게 일을 시키기 위한 바이너리 형태의 명령어를, 운영체제에서 요구하는 포맷에 맞춰서 구성한 파일이다.
'BackEnd > C' 카테고리의 다른 글
진수와 진수변환 (0) | 2018.12.04 |
---|---|
메모리 공간의 할당과 활용 (0) | 2018.12.04 |
서식문자(Conversion specifier) (0) | 2018.12.04 |
이스케이프 시퀀스(특수문자) (0) | 2018.12.04 |
프로그램의 기본 구성과 printf 함수의 기능 (0) | 2018.12.03 |