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
Busan IT/제어기초2015. 1. 30. 17:43

** OrCad 사용방법.

 

OrCad에서 저장 시 저장경로에 가능한 한글과 빈칸을 넣지 않는다.

 

OrCadPCB에 실습을 하기 전에 먼저 회로도를 그려보는데 쓰인다..

 

첨부된 매뉴얼을 읽고 대략적인 조작법을 익혀보자.

마이크로 컨트롤러와 프로그램

학습목표 : 마이크로 컨트롤러의 종류와 특성을 이해한다.

프로그램의 종류와 해당 하드웨어를 이해한다.

 

마이크로 프로세서(Micro Processor Unit)

- 마이크로컴퓨터에 사용된 단일 Chip CPU

Hardware적 구조:CPU+I/O 장치

- 용도: 마이크로 컴퓨터 시스템의 CPU로 가장 일반적으로 사용되는 컴퓨터 시스템에서 Date의 처리에 적합

ex) 8051

 

마이크로컨트롤러(MCU)

- MPUCPU기능 + 메모리(ROM, RAM), I/O제어 회로 등을 하나의 칩에 내장

- 단일칩, one-chip 마이크로 컴퓨터, 임베디드 마이크로 컨트롤러라고도 함.

- Hardware 구조: CPU + Memory, I/O

- 용도 : 시스템의 입출력 제어용

ex) Atmega, ARM, Coretex M3, PIC, DSP

 

* - 이를 제어하기 위해 C언어를 공부한다.

- 사람이 이해하기 편할수록 고급언어, 기계어에 가까울수록 저급언어이다.

- 주기억장치는 전기적인 신호로 정보를 전달하고 보조기억장치는 물리적인 신호를 쓴다.

 

<구조 및 용도에 의한 분류>

 

General Purpose u-processor

(범용 마이크로프로세서)

- 일반적으로 일컬어지는 마이크로프로세서

- CPU의 기능만을 갖추고 있다.

- CPU: Register Set, ALU(Arithmetic and Logic Unit), CLU(Control Logic Unit)

 

Single chip or One chip u-Computer

- CPU 기능 + Memory, I/O Interface회로를 하나의 Chip에 내장시킨 u-Processor

- 기본적인 컴퓨터의 기능을 갖추고 있다.

- 시스템 제어용으로 주로 사용된다.

- Bit-slice u-Processor

- 2 Bit 또는 4 Bit의 기본 구성 단위로 되어 있는 u-Processor

- 미니컴퓨터의 설계, 실험실 수준에서의 CPU설계 등에 사용

 

<Bit 수에 의한 분류>

 

한 번에 처리할 수 있는 Date Bit의 수에 따라 4, 8, 16, 32, bit 형으로 분류

반도체 기술의 발달에 따른 흐름

PMOS, NMOS, CMOS, Schottky TTL, HMOS, CHMOS, HCMOS, XMOS

* MOS(meter onside silicon)

MOS의 차이는 반도체 공정에 따라 발생한다.

 

<명령어 구조에 의한 분류>

 

CISC(complex Instruction Set Computer)

- 많은 수의 명령어- 일반적으로 100~250개의 명령어

- 몇몇 명령어는 특별한 동작을 수행하며 자주 사용되지 않는다.

- 다양한 어드레싱 모드- 일반적으로 5~20가지의 모드

- 가변 길이 명령어 형식

- 메모리의 피 연산자를 처리하는 명령어

 

RISC(Reduced Instruction Set computer)

- 상대적으로 적은 수의 명령어 및 Addressing Mode

- 메모리 참조는 loadstore명령으로 제한된다.

- 모든 동작은 CPU의 레지스터 안에서 수행된다.

- 고정된 길이 명령어 형식으로 Decoding이 간단하다.

 

폰 노이만 방식

- 폰 노이만 - 최초의 프로그램 내장형 컴퓨터를 고안한 수학자

- 폰노이만이 고안한 방식은 50년이 넘은 지금까지 컴퓨터의 근본 원리

- InterAMD의 마이크로프로세서

 

폰 노이만 방식의 컴퓨터

- 실행할 프로그램

- 데이터를 저장할 메모리

- 메모리에 저장된 프로그램을 실행할 프로세서

- 프로그램과 데이터를 메모리에 입력시키는 입력 장치

- 프로세서에서 프로그램을 실행한 결과를 출력하는 출력 장치로 구성

- 이중가장 핵심은 메모리와 프로세서

- 프로세서가 입출력 장치를 메모리의 일부라고 간주 함.

- 결국 컴퓨터는 프로세서와 메모리로 구성된 단순한(?) 기계

 

마이크로 컨트롤러의 특징

 

1. 소형, 경량화가 가능

다양한 프로그램으로 응용범위와 주변 소자 수를 대폭 줄일 수 있어 회로가 간단.

2. 가격이 저렴

하나의 칩 안에 입/ 출력포트, /병렬통신, 기억소자, 카운터/타이머 등을 내장

3. 타 시스템과의 이식성이 뛰어나다.

작은 변경 혹은 기능의 추가를 쉽게 달성할 수 있어 다양한 용도로 활용된다.

 

4. 신뢰성이 높다.

시스템 구성 소자 수가 적어 신뢰성이 높다.

 

응용분야

 

1.산업분야

모터제어, 로봇공학, 프로세서 제어, 수치제어, 지능형 변환기 등

2.계측 분야

액체/가스 크로마토그래프, 의료용 계측기, 오실로스코프

3.가전분야

비디오 레코더, 레이저 디스크 구동부, 비디오 게임, 전자렌지, 에어컨

4.유도 및 제어분야

미사일 제어, 지능형 무기, 우주선 유도 제어

5.데이터 처리분야

플로터, 복사기, 프린터, 하드디스크 구동부

6. 정보통신 분야

모뎀, 지능형 카드 제어

7. 자동차 분야

점화제어, 변속기 제어, 연료분사제어, 브레이크 제어

 

 

PROGRAM

 

 

 

Software의 대 분류

 

응용 소프트웨어: 사용자 관심의 특별 형태의 작업을 처리하는 프로그램.

시스템 소프트웨어: 운영체계 및 응용 소프트웨어를 지원하는 프로그램.

 

Utility

작지만 제한된 능력을 가진 유용한 프로그램

디스크 조각 모음, 압축, 암호 해제, 바이러스 검사

응용 프로그램 실행기, 텍스트 편집기

 

BIOS

Basic Input Output system

컴퓨터의 H/wS/W사이를 중계하여 입/출력을 관장하는 소프트웨어

컴퓨터를 처음 부팅 할 때부터 전원을 끌 때까지 모든 동작을 제어하는 프로그램

컴퓨터를 부팅할 때 시스템을 자기 진단하여 고장유무를 판단

디스크 드라이버, 모니터, 키보드 등과의 기본적 연결 상태를 설정해 준다.

 

RAM

Random Access Memory

필요할 경우 data를 쓰고 지우고 할 수 있는 기억장치

휘발성을 메모리이다. 저장을 하지 않으면 지워진다.

 

SRAM(STATIC RAM)

전원이 나가도 계속해서 저장된 Data를 유지

읽기/쓰기 시간이 DRAM에 비해서 빠름

비싸다는 단점이 있다.

 

DRAM(Dynamic RAM)

저장된 Data를 유지하기 위해서는 일정 시간 간격 Refresh가 필요

가격이 SRAM에 비해 저렴하다.

 

 

ROM(Read Only Memory)

저장된 Data를 읽을 수만 있고 쓸(변경할) 수 없는 메모리

데이터를 한번 쓰면 변경할 수 없다.

 

EPROM(Erasable Programmable ROM)

자외선을 이용하여 저장된 Data를 지운다.

 

EEPROM(Electrically Erasable Programmable ROM)

전기적인 힘을 이용하여 저장된 데이터를 지운다.

 

Flash Memory RAM

Block 단위로 데이터를 지울 수 있고, 프로그램 할 수 있는 Memory

Block 단위로 쓰기, 지우기가 가능하므로 속도가 빠르다.

지속적으로 전원이 공급되는 비 휘발성 Memory

 

Cashe Memory

CPUMemory (DRAM)의 가운데 위치 또는 동일 chip내에 위치

Access time을 향상하여 시스템 전체의 실행 속도향상

주로 Static RAM을 사용

 

마이크로 컨트롤러.hwp

반응형
Posted by newind2000
Busan IT/제어언어2015. 1. 30. 17:42

수의 출력, 연산 그리고 address

 

학습목표 : 변수형과 형수정자를 조작하여 자유롭게 정수와 실수를 표현할 수 있다.

연산자를 활용하여 정수와 실수를 표현할 수 있다.

심볼테이블과 address를 표현할 수 있다.

 

#1. 정수와 변수형

 

지난 시간 CPU와 메모리 사이의 처리과정을 배웠다.

 

변수를 만들 때 값을 넣음으로써 초기화할 수 있다.

 

어떠한 값을 넣었을 때 특정 값을 나오는 이유를 이해할 수 있어야 한다.

 

실습)257를 입력했을 때와 999를 넣었을 때를 연습해본다. 값이 나오는 논리를 이해한다.

 

숫자 25732bit CPU에서는 0000 0001 0000 0001(16)으로 인식한다.

그러므로 메모리는 01을 가져 오는데 이것은 1임으로 결과창에 1로 표시된다.

 

 

999CPU에서 3E7으로 인식되고 이것은 8bit에서 1110 0111값을 가짐으로 음수임을 알 수 있다.

 

그러므로 여기에 1의 보수를 취하면 0001 1000이고 여기에 1을 더하면 0001 1001임으로 결과값은 -25가 된다.

 

 

Bell사가 전화기로 미국에서 크게 성공하고 벨 연구소를 만든다.

 

벨 연구소에서 슈퍼컴퓨터에 있는 운영체제를 개인적으로 쓸 수 있는 방법을 고안하여 나오는 것이 Unix이다. 통신사에서 쓰는 운영체제는 Unix이다. Unix 연구를 통해 많은 수의 해커들이 양성되고 핀란드인 또 다른 운영체제를 만든 것이 Linux이다. 리눅스 안에 Java엔진이 있고 AndroidJava를 기반으로 돌아가는 프로그램이다. Unix를 개발할 때 쓰인 언어가 C언어이다.

 

C언어의 표준화를 위해 ANSI C를 정립하였다.

 

변수형에서 Int가 기준이 되고 Int를 줄일 때 short (int) 늘릴 때 long (int)를 쓴다.

 

정수는 4가지 타입이 있다.

 

char(1) < short(2) < int(4) < long(4)

#2. ASCII코드와 컴퓨터의 사칙연산

 

형수정자란 기본형의 자료의 형태를 바꿔주는 역할을 하는 명령어이고 여기에는

short long signed unsigned가 있다.

 

표시 형식에 %d가 되어 있으면 signed decimal을 표시하기 때문에 최대수를 넣어봤자 -1이 나온다.

 

이것을 %u로 바꾸면 unsigned의 약자임으로 양수로 표현이 된다.

 

프로그램 작동을 최적화 시키려면 레지스터와 메모리가 일치시켜야 한다. 메모리를 쓰지 않는 경우에도 CPU에서 쓰지 않는 메모리에 대한 제어를 해야 하기 때문에 메모리를 적게 쓴다고 속도가 높아지는 것은 아니다. 하여 변수를 크기를 꼭 줄여야 하는 것은 아니다.

 

C에서 기본적으로 변수의 모양을 정해놓은 것을 기본형이라고 한다.

 

char은 알파벳에 대한 숫자를 저장한다.

 

알파벳에 대한 표시는 그림으로 출력하지만 저장하고 출력하는 것은 숫자이다.

 

charASCII를 사용하기 위해 쓰인다.

 

 

ALT를 누른 상태에서 숫자를 누르면 ASCII(American Standard Code for Information interchange)코드를 테스트할 수 있다.

 

컴퓨터의 사칙연산 + - * /로 표시

 

CPU에서 소수점의 계산은 상당히 복잡하기 때문에 정수로만 표현해준다.

 

연산기호에서 %를 쓰면 나누기 후에 나머지를 표시해준다.

 

실습>> unsigned 방식에서 음수가 나오게 표현시켜보자.

 

컴퓨터는 2진수를 사용하고 인간은 10진수를 사용하기 때문에 소수점의 진수 변환에 대한 문제가 생긴다.

 

10진수에 있는 소수점을 2진수로 바꾸는 방법은 소수점 이상의 수에 대하여 우선 2진수로 변환하고 소수점 이하의 값에 대해서는 *2를 한 다음에 앞에 1이 나오면 1 소수점 뒤에 표시해 준다.

#3. 실수의 표현과 sizeof

 

10진수를 2진수로 고치는 방법

 

첫째자리 0.5 둘째자리 0.25 셋째짜리 0.125...

 

소수점 자리에 곱하기 2를 하여 1로 넘어가는 경우는 소수점 자리에 1을 표시하고 이 숫자가 다 소거될 때까지 계속 2를 곱해준다.

 

실습) 3.5, 0.625, 0.2

 

0.2는 순환소수이기 때문에 저장되지 않는다. 이 같은 경우에는 오차가 생겨난다.

 

실수형을 저장하는 변수형을 float이라고 한다. 크기는 4byte이다. 8byte의 경우에는 double이라는 변수형을 쓴다.

 

실수가 개입되는 경우 컴퓨터의 연산이 느려진다. 때문에 소수점이 없는 경우에는 정수형을 써야 한다.

 

실습) float으로 3.2표시

 

5/3

 

5/3

 

둘 중에 하나면 소수점을 넣어주면 소수점으로 결과 값을 보여준다.(OR logic)

 

Cast연산자(형변환 연산자)

 

둥근 가로로 기본형을 기입하는 방법을 Cast연산자라고 한다.

 

* 현재까지 배운 연산자

 

=, +, -, *, /, %, ()

 

sizeof연산자

 

뒤에 적은 대상의 크기를 알려준다(int 형으로)

 

학습) CPU와 메모리의 의사소통에 대해서 다시 찾아본다.

#4. 여러 종류의 출력 방법과 address

 

문자 출력법 = %c

 

ASCII를 찾는 방법 찾고 싶은 문자를 넣고 %d로 출력한다.

 

여러 가지 문자를 연속으로 출력하는 방법

 

printf("%c%c%d%c\n", 'T','E','S','T');

 

%기호를 넣고 삽입하고 싶은 형태를 넣은 후 입력하면 ‘’,마다 순차적으로 입력한 형태를 표현한다.

 

주소연산자(&, 앰퍼샌드, ampersand)

 

//주석처리하는 명령어

 

심볼테이블

 

Type

Name

Address

int

iNum

1BF7DC

char

cNum

1BF7E3

float

fNum

1BF7D8

 

 

* 위의 처리과정이 CPUMemory에서 어떻게 일어나는 그림으로 그려서 올려야 한다.

 

address.c


char.c


main.c


pmmd.c


sizeof.c


var.c

20150130-수의 출력, 연산 그리고 address.hwp


반응형
Posted by newind2000