Busan IT/제어언어2015. 2. 2. 17:13


20150202-컴파일의 단계와 처리.hwp

컴파일의 단계와 처리

 

#1. 지난 주 정리 요약

 

<지난 주 정리>

 

우리는 C언어를 하고 있다.

 

CPU와 메모리의 의사소통 과정을 배우고 있다.

 

변수의 표현방식에 관하여 정수(char, int - short, long)가 있고 이것들은 ‘sizeof'변수로 바이트가 얼마인지 확인해 볼 수 있다.

 

사칙연산(+ - * / %) 형수정자(long, short, unsigned) 명령어(형선언, printf, cast(), 앰퍼센트)

 

메모장으로 c언어를 기입한 후 cl(컴파일러)을 통하여 exe파일을 만들어 실행할 수 있다.

컴파일러는 언어를 번역하는 번역기 역할을 한다.

 

* 번역기는 크게 두 개로 나눌 수 있다. 1. 컴파일러(compiler) 2. 인터프리터(interpretor)

 

exe0,1을 사용하는 이진수로 되어 있다.

 

c언어 기본형을 배웠다.

 

파일은 파일이름.확장자형식으로 표시되고 확장자에 따라 파일형식이 바뀐다.

 

다만 exe는 연결프로그램이 없고 바로 실행되는 파일 형식이다.

 

금일 3교시부터는, 컴파일러가 exe로 바꾸는 단계에 대하여 알아볼 예정이다.

 

exe파일을 2진법으로 보는 방법은 exe파일의 확장명을 bin으로 바꾼 후 Visual Studio에서 드래그에 드롭으로 실행시킨다.

 

Visual Studio 제일 우측에 각 16진수에 해당되는 ASCII코드를 보여준다.

 

해당하는 ASCII코드가 없는 경우 ‘.’으로 찍힐 수 있다.

 

#2 컴파일러와 인터프리터

 

학습목표: 컴파일러와 인터프리터의 기능과 종류를 설명할 수 있다.

 

X.c ->(cl; 컴파일러) X.exe 2진수인 기계어로 번역되고 이것을 binary파일이라고 한다.

구체적으로 C언어를 바꾸어줬기 때문에 C컴파일러라고 부른다.

 

** 인터프리터는 프로그램 언어를 순간순간 해석하여 가동시키는 역할을 한다.

 

X.java ->(컴파일) X.class -> JVM로 실행을 시킨다. 자바는 컴파일러로 거쳐 바로 실행 시킬수 없다. class파일은 가상 CPU파일로 존재한다.

 

Java프로그램의 목적

 

인텔사에서 보급형 컴퓨터용으로 제조한 CPU8088(고급형), 8086(일반형)으로 보급되고 80286, 80386, 80486에서 80586(펜티엄; AMD사와의 모델명 상표권 싸움 이후 문자형으로 고침) 86으로 끝나는 것을 86계열이라고 부른다.

 

AMDIntel의 기계언어를 도입하였다.

 

Intel은 저전력 시장에 진출하지 못하고 ARM이 저전력 CPU를 사용하는 mobile시장을 점유하고 있다.

 

CPU최적화를 원하는 경우는 특정 CPU에 대한 언어에 최적화된 언어로 개발해야 하지만(Firmware)

 

성능이 아닌 프로그램에 집중할 경우에는(게임, java, contents 시장) 해당 소프트웨어를 만드는데 집중하면 된다.

 

Javaapplication용이다. * Java는 커피 원산지의 이름이다.

 

Java는 프로그램을 한번에 해석하는 것이 아니라 순간순간 해석하여 옮기기 때문에 이것을 interpretor라고 한다.

 

C언어로 Window에 바로 돌릴 수도 있지만 FrameworkMiddleware를 활용하여 다른 운영체제에서도 가동 시킬 수 있다. ex) .net

 

* AndroidLinux기반의 프로그램이다.

 

<학습요약>

 

- 컴파일러는 저급 언어를 CPU에서 실행할 수 있도록 binary 형식 실행파일로 바꿔주는 기능을 한다.

 

- CPU기능을 최적화 시키는 목적의 프로그램 작성을 위해서 compiler를 활용하는 저급언어를 활용하고 주로 firmware를 만들 때 쓰인다.

 

- Contents와 상이한 환경에서 구동시키기 위해 interpretor(frameworkmiddleware)를 활용한 프로그램을 개발하기도 하며 게임이 이에 해당된다.

 

#3. CL라인 컴파일의 5단계

 

학습목표 : CL컴파일 과정에 생기는 파일을 생성할 수 있고 그 내용을 설명할 수 있다.

 

Review> Interpretor는 조금씩 해석하여 가동시키는 형태이고 compiler는 완전히 번역 후 가동시키는 형태이다.

 

주석

 

//: 현재 위치로부터 한줄

/* */: 사이에 있는 모든 내용이 주석

 

컴파일의 과정

 

CL라인

 

1. main.c ->(전처리 preprocess) 2. main.i ->(컴파일 compile) 3. main.asm ->(어셈블리 assembly) 4. main.obj ->(링크 link) 5. main.exe

 

1 ~ 3 text file

 

4 ~5는 기계어

 

gcc라인

 

main.c -> main.i -> main.s -> main.e

 

 

명령어에 따라 생성되는 파일이 달라진다.

 

cl /P *.c -> .i

 

cl /c *.c -> .obj

 

cl /Fa *.c -> .asm

 

* tap키를 누르면 해당 폴더에 있는 파일의 이름명을 순차적으로 하나씩 띄워준다

 

전처리과정(preprocess) 컴파일 이전에 명령어를 불러오는 기능을 한다. 전처리 언어는 C언어에 포함되지만 C언어는 아니다. 전처리의 구분은 ‘#’의 포함여부로 달린다.

 

#include <stdio.h> -> ‘#’ 전처리 언어, include <stdio.h>는 명령어를 불러 오는 것이다.

<> 대신에 “”도 쓸 수 있다.

<>는 환경변수에서 경로에서 찾는 것이다.

“”는 현재 위치에 있는 폴더 경로에서 찾는 것이다.

 

stdio.h - stdio 표준입출력(Standard Input Output)

h is for header

<학습 요약>

- 컴파일은 총 4단계를 거친다.

1. 전처리과정(Preprocess; cl /P *.c): 전처리 언어를 불러온다.

2. 컴파일(Compile; cl /c *.c): 전처리가 끝난 파일을 컴파일러한다.

3. 어셈블리(Assembly; cl /Fa): 컴파일된 파일을 어셈블리어로 만든다.

4. 링크(Link): 어셈블리어로 된 obj파일을 link작업을 통해 실행 파일로 만든다.

 

#4. Object파일에서 실행파일(*.exe)

 

학습목표: Obj의 속성과 exe파일로 변환될 때는 차이점을 설명할 수 있다.

 

전처리 과정을 거치면 전처리언어는 해석되고 C언어만 남는다.

전처리 언어를 제외하고 보고 싶다면 전처리과정을 거친 후의 파일을(*.i)을 보면 된다.

 

C언어를 assembly언어로 바꾼 후에 binary로 변경한다.

 

기계어로 만들어진 파일을 object라고 부른다.

 

obj파일을 실행시키려면 window에서 구동시키기 위한 추가 작업이 필요하다. 이를 link(연결)라고 부른다. ex) printf

 

obj도 기계어지만 실행이 불가능하다. obj을 실행파일의 모양을 만드는 것도 link에 속한다.

 

<학습요약>

- Object파일은 기계언어지만 실행은 불가능한 언어이다.

 

- Obj파일이 실행 파일(exe)이 되기 위해서는 ‘link'라는 과정이 필요하고 이는 Visual Studio lib폴더에서 명령어를 끌어와 작성된 언어와 대조후 이를 실행시키는 작업과 실행파일로 옮기는 작업을 거친다.

 

<실습>

 

- 컴파일 5단계에 해당되는 각 각의 파일을 생성하고 안의 내용을 살펴보자.

반응형
Posted by newind2000