Busan IT/제어언어2015. 2. 4. 17:35


20150204 - 포인터 변수의 기초.hwp

포인터 변수의 기초

 

학습목표 - 포인터의 개념을 이해하고 심볼 테이블을 만들 수 있다.

 

#1. Pointer - Randomized Base Address

 

보안이 강화되어 DOS에서 주소 값 출력을 요구하면 해당 주소의 값은 지속적으로 바뀌는 현상을 보였다.

 

지난 시간에 Visual Studio에서 Randomized Base Address의 설정을 해지하면 Memory에서 address가 고정되어 나타남을 확인할 수 있다.

 

실습) Visual Studio에서 Randomized Base Address의 설정을 해지한 후 주소 값을 확인해 본다.

 






 


#2. Address값의 직접입력 실습

 

#include <stdio.h>

 

int main()

 

{

int iNum = 100;

 

printf("iNum의값:%d\n", iNum);

printf("iNum의주소:%08X\n", &iNum);

printf("iNum의주소:%p\n", &iNum);

 

return 0;

}

 

위에 과정에 대한 CPUMemory의 처리과정을 설명하면,

1. CPU에서 변수형 int 변수명 iNum 100 선언

2. 메모리에서 해당 변수형, 변수명, 변수값을 메모리에 등록

//단 변수명은 문자임으로 해당 변수가 저장된 메모리의 위치를 숫자로 표현

3. CPU에서 해당 변수의 값과 주소를 불러달라고 요청하면 컴파일러가 이를 해석하여 저장되어 있던 iNum의 주소와 값을 불러온다.

 

인간이 기계가 쓰는 2진수 체계의 언어를 이해하고 구사하기 힘들기 때문에 그 중간역할을 하는 중간언어를 만들어 인간이 기계에게 특수한 과제를 실행하도록 프로그램을 짤 수 있게 만들어 놓았다

//중간언어를 기계어로 번역하기 위해 중간프로그램이 필요하다.

 

변수 iNum는 인간의 인식을 위한 문자이고 실제로 변수는 숫자형태의 주소로 메모리에 저장된다.

 

주소 0012FF28(16진수)10진수 1,244,968이다. 이것을 표현하면 0012FF28=1,244,968인데 이것은 오류를 일으킨다. ‘=’의 명령어는 오른쪽에 있는 것을 왼쪽에 넣는 명령어인데 왼쪽에 위치한 값은 항상 변수이어야 한다.

//오른쪽에는 변수든 상수든 올 수 있다.

 

실습) 변수명 대신에 주소, 1244968을 넣고 변수 값 50을 넣어보자.

 

//연산을 위해 몇 개의 항이 필요한지에 따라 단항 연산자, 다항 연산자로 구분된다.

//사칙연산은 다항 연산자이고, 단순 부호(+/-)는 단항 연산자이다.

//C에서 숫자 앞이나 변수 앞에 ‘*’를 붙이면 주소로 취급된다.

//형식은 (‘변수형’ *)(‘주소’) = ‘변수 값으로 된다.

 

#include <stdio.h>

 

int main()

 

{

int iNum = 100;

 

 

printf("iNum의값:%d\n", iNum);

printf("iNum의주소:%08X\n", &iNum);

printf("iNum의주소:%p\n", &iNum);

 

(int *)(1244968) = 50;

printf("iNum의값:%d\n", iNum);

//(int *)

return 0;

}

 

 

 

#3.

 

포인터의 사용 방법을 지난 시간에 배웠다.

 

실습) 포인터를 사용하여 iNum의 값을 불러와 보자.

 

#include <stdio.h>

 

int main()

 

{

int iNum=100;

 

 

printf("iNum의값:%d\n", iNum);

printf("iNum의주소:%08X\n", &iNum);

printf("iNum의주소:%p\n", &iNum);

 

 

//iNum = 50;

*((int *)(1244968)) = 50;

printf("iNum의값:%d\n", iNum);

 

return 0;

}

 

* 는 주소의 값을 선언하는 변수



실습) int iNum의 값을 99로 설정하고 값과 주소를 출력해 본다.




 

 

 

포인터 변수(Pointer type)

 

메모리의 공간주소를 가리키는 변수를 말한다. 포인터 변수는 주소를 담는 변수이다.

 

자료형마다 포인트 타입이 다 따로 있다.

//왜 자료형마다 포인터의 타입이 따로 있을까? 변수형이 부여하는 byte수의 차이 때문일까?

 

int *int형의 포인터 변수이다.

#4.

 

실습) 인트 변수 iNum=99와 포인터 변수 iP를 설정하고 이것의 주소와 크기를 출력한다.

iP변수를 iNum의 주소로 설정한 후 iNum을 출력해본다.

 



 


<Symbol Table + value>

Style

Name

Address

Value

int

iNum

12FF28

99

int *

iP

12FF1C

12FF28

 

+@

iP주소(=iNum의 주소)77을 넣으면 실제로 77이 표시된다.

*iP = 77;

printf("iNum의값은[%d] 입니다.\n", iNum);

 

결과 값, iNum = 77

반응형
Posted by newind2000
Busan IT/제어기초2015. 2. 3. 17:31


20150203 - ADC와 Lego Mindstorm.hwp


학습목표 - ADC의 원리를 이해하고 종류에 대해 안다

 

 

ADC

 

아날로그 변환을 A/D변환을 거쳐 아날로그로 바꾸는 원리이다.

 

원리<그림>:계단 모양으로 아날로그 입력 전압에 따른 디지털 출력

디지털 출력의 폭이 좁을수록 분해능이 좋다라고 표현한다.

 

카운터 램프형(추적형) AD 변환기<그림>

아날로그 입력>귀환 전압 -> x=1

 

램프형 A/D변환기<그림>

아날로그 압력전압이 높아질수록 카운트를 하기 위한 시간이 길어지는 단점이 있다.

아날로그 전력이 클럭보다 클 때 1이 발생되어 변환된다.

 

축자 근사형 A/D변환기

최상위 비트로부터 순서대로 하위 비트 쪽으로 수정하여 가는 방법으로 DAC의 출력을 훨씬 빨리 아날로그 입력 전압에 근사 시킨다.

100-110-111-110의 과정으로 최종적으로 디지털 변환출력 110을 얻는다.

비교적 변환시간이 빠르고 회로도 간단하여 현재 저가형 이면서 분해능이 비교적 높은 범용A/D Converter에 가장 널리 사용되고 있다.

변환 중에 아날로그 입력전압에

 

잡음 제거 방법

독립적인 아날로그 회로 전원 단자 AVCC 및 기준 전원 입력단자 AREF를 가지고 있음에도 불구하고 A/D컨버터는 잡음에 상당히 민감하다.

아날로그 입력 선은 최소한 짧게 잡음의 영향을 받지 않도록 AVCC는 디지털 전원 VCCLC필터로 안정화 시켜 인가

A/D변환 결과가 잡음 등에 의하여 흔들리는 경우에는 디지털 필터를 사용하거나, 여러번 A/D변환하여 읽어 들인 결과를 평균 처리하여 사용하면 좋다.

LEGO MINDSTORM

 

소프트웨어 설치 및 기본 설정

 

LEGO Mindstorm NXT 소프트웨어를 레고 홈페이지에서 다운로드 받는다.

 

 

반응형

'Busan IT > 제어기초' 카테고리의 다른 글

LEGO - Mindstorm #2  (0) 2015.02.05
LEGO - Mindstorm  (0) 2015.02.04
마이크로 컴퓨터와 ADC & DAC  (0) 2015.02.02
마이크로 컨트롤러와 프로그램  (0) 2015.01.30
전기회로와 트랜지스터/캐피시터  (0) 2015.01.29
Posted by newind2000
Busan IT/제어언어2015. 2. 3. 17:30


20150203-제어문, 수의 표현 그리고 포인터.hwp

제어문과 수의 표현 그리고 포인터

 

#1. ASCII Code 제어문

 

학습목표 - ASCII Code에서 사용되는 제어문 개념에 대해 이해한다.

 

C프로그램이 어떻게 실행파일을 만들어 내는가에 대해 지난 시간에 학습하였다.

 

C프로그램은 *.exe의 실행파일이 만들어지고, 리눅스에서는 확장자가 없이 표시된다.

 

오늘은 제어문에 대해서 배워본다.

 

* 다음 주 월요일 책 배포 예정

 

printf("%d,c,u,x,o,f)

 

c = 아스키코드를 표현한다.

 

명령어 끝에 엔터(\n)를 넣어줘야 한다. 리눅스 환경에서는 자동으로 엔터를 넣어주지 않기 때문에 리눅스 작성환경을 대비하여 엔터를 넣어주는 습관을 들인다.

 

줄 바꿈과 엔터는 다르다. 줄 바꿈은 다음 줄로 내려오는 것이고, 엔터는 줄을 바꾸고 커서도 제일 앞으로 옮겨주는 역할을 한다.

 

ASCII code(128)

 

0 - 31 (32) : 제어문자

역슬레쉬는 cl에서 해석하지 않는다. \n의 경우 단순히 n으로 해석하지 않고 엔터로 해석한다.

 

도스에서만 10번이 엔터 역할을 한다.(줄 내림, 커서 제일 앞으로 이동)

 

10번은 CR + LF

 

파일명을 bin으로 변경한 후 Visual Studio에서 실행해보면 Magic Number가 나타나고 이것은 파일의 형식을 나타내준다. ex) MZ는 윈도우 파일, BM 비트맵



 

#2. 숫자의 정렬과 표시(실습)

 

 

실습) 1. 3 * 3 = 9%d 3개와 printf 1개를 써서 출력하여라.

2. 구구단을 3단을 전부 적고 1의 자리는 결과 값을 나머지 값들과 같은 자리 수에 표 현 되게 정렬하여라.

3. 실수 3.2의 소수점 2자리까지만 표시되게 출력하여라.




 

%d사이에 숫자를 넣으면 그만큼 공간이 확보된다.

기본은 %와 문자 사이에 숫자를 넣으면 오른쪽으로 밀리게 된다.(왼쪽에 빈공간이 생긴다)

사이에 ‘-’를 붙이면 왼쪽정렬(오른쪽에 빈공간이 생긴다)

표현하는 자리수보다 적은 숫자를 사이에 넣어도 내용은 다 표시된다.

숫자 다음에 점을 찍고 숫자를 넣으면 소수점 이하에 출력하고자하는 자리수를 나타낸다.

 

변수를 대괄호로([]) 넣고 표현하면 감춰진 내용도 볼 수 있다.

#3. 포인터의 주소 표시

 

실습) 1. int iNum=100을 설정하고 printfiNum의 값과 주소(16진수로)를 표시 한다.

 

주소 출력 시 %08X 출력 한다 -> %p로 대체된다.

 

%d, c, f, u, x 는 기본 암기가 필요하다.

 

 

** 해킹 방지를 위해 심볼 테이블의 address는 계속 바뀌지만 CPU에서는 해당 주소를 보고 위치를 알아낼 수 있다.

 

** 원하는 사이트의 IP 주소를 알아내기 위해서는 DOS창에서

ping_‘도메인 주소를 입력하면 된다.

#4. Visual Studio에서 고정 포인터

 

기계어를 이해할수록 짜여진 프로그램에 대해 조작이 가능하다.

 

Java는 사용자가 주소를 건들지 못하게 보호되어 있다.

 

C언어 쪽이 컴퓨터에 대한 이해도가 높아야하며 컴퓨터의 최적화에 알맞다.

 

* JVM(Java Virtual Machine)

 

숫자를 주소 값을 넣는 것을 배운다.

 

조작하는 DOS창을 Console이라고 부르기도 한다. Win32 = window 32bit

 

MFC C++ 윈도우 작성하는 경우

 

Makefile Project는 윈도우 창 작성

 

엠티 프로젝트를 선택하여 창을 연다.

반응형
Posted by newind2000
Busan IT/제어기초2015. 2. 2. 17:14


20150202 - 마이크로 컴퓨터와 ADC &amp; DAC.hwp

마이크로 컴퓨터와 ADC & DAC

학습목표 - 마이크로 컴퓨터의 역사와 특징을 설명할 수 있다.

ADCDAC의 특징과 용도에 대하여 설명할 수 있다.

 

마이크로 컴퓨터(Micro Computer)

 

마이크로 프로세서의 역사

-4비트 마이크로 프로세서-Intel 4004(1969), 4040

-8비트 마이크로 프로세서(1970년대 중반)

- 인텔(Intel)- Intel 8008(1972)-> Intel 8080(1973)->Intel 8085

- 모토로라(Motorola) - MC 6800(1974) -> MC 6802

- 자일로그(Zilog)- Z80 <- Intel 8080을 개선, Intel 8080의 명령어를 모두 포함하 고 내부 구조도 크게 향상

- MOS 테크(MOS Technology)-MCS6502 -> Apple IICPU(Central Process Unit)로 사용

 

-32비트 마이크로 프로세서

- Intel 80386, MC 68020, MC68030(1985), Z80000(1986)

- Intel 80486 -> 386PC;MC 68020 ->매킨도시 II

- Intel 80486 -> IBM PC 486, PS/2;MC 68030 -> Power Book 컴퓨터, MC 68040 -> 매킨토시 FX

- Intel 80586(Pentium, 1992) - CISC -> P6

- IBM, 모토롤라, 애플사가 공동으로 RISC형태인 파워 PC 601을 발표 (1993sus) ->IBM의 파워 PC, 애플사의 파워 PC

 

- 마이크로 프로세서의 2대 계열

- 80계열과(펜티티엄으로 넘어감) 68계열(Apple)

 

특징

- 고집적 회로(LSI; Large Scale Itegrated Circuit) 구성으로 제품의 소형화

- 가격 저렴

- 기능의 변경이나 확장 용이

- 신뢰성 향상

 

* 은행 현금 인출기에 들어가는 CPU486성능. Embedded에 들어가는 OSPC버젼보다 가볍다.

 

응용 형태

- 컴퓨터 및 주변 부품으로 이용

- 독립된 장치의 내부 제어기로 이용-계측기, 자동차 분야

- 대형 시스템의 구성 요소로 사용-통신 시스템

 

마이크로 컴퓨터의 종류

- 슈퍼 마이크로 컴퓨터(Super microcomputer), 데스크탑 컴퓨터(desktop computer), 휴대형 랩탑 컴퓨터(portable laptop computer), 노트북 컴퓨터 (notebook computer), 팜탑 컴퓨터(palm computer)

 

마이크로 프로세서를 쓰는 이유는 데이터를 활용하는 목적한 바를 도출하려는 의도.

 

 

 

ADC(Analog to Digital Convert)

 

아날로그 : 선형, 연속적인 내용. 아날로그 신호는 주변의 간섭을 너무 많이 받는다는 단점이 있다.

 

아날로그의 단점을 보완하기 위해 등장한 것이 ADC이다.

 

디지털 : 불연속, 비선형. 간섭을 적게 받는다.

 

디지털 신호로 변환 시 연속된 자료를 잘게 쪼갤수록 데이터의 양은 증가하게 된다. 반대로 자료를 크게 분할할 시에는 본래 아날로그 자료의 정확도가 떨어지게 된다.

 

1. 디지털과 아날로그

 

1. 디지털 신호와 아날로그 신호

아날로그 신호(Analog Signal)

자연계에서 일어나는 물리적인 양은 시간에 따라 연속적으로 변화

온도, 습도, 소리 빛 등은 시간에 따라 연속적인 값을 갖는다.

 

디지털 신호(Digital Signal)

분명히 구별되는 두 레벨의 신호값(0,1 or T/F) 만을 갖는다.

 

2. 아날로그 시스템과 디지털 시스템

 

디지털 시스템

이산적인 정보를 가공하고 처리해서 최종 목적으로 하는 정보를 출력하는 모든 형태의 장치

 

아날로그 시스템

연속적인 정보를 입력받아 처리해서 연속적인 형태의 정보를 출력하는 시스템

 

디지털 시스템의 장점

 

디지털 시스템은 내,외부 잡음에 강함.

디지털 시스템은 설계하기가 용이.

디지털 시스템은 프로그래밍으로 전체 시스템을 제어할 수 있어서 규격이나 사양의 변경에 쉽게 대응할 수 있어서 기능 구현의 유연성을 높일 수 있고 개발기간을 단축시킬 수 있음.

디지털 시스템에서는 정보를 저장하거나 가공하기가 용이.

디지털 시스템에서는 정보처리의 정확성과 정밀도를 높일 수 있으며, 아날로그 시스템으로는 다루기 어려운 비선형 처리나 다중화 처리 등도 가능.

디지털 시스템은 전체 시스템 구성을 소형화, 저가격화로 할 수 있음.

-> 디지털 시스템의 많은 장점으로 인해 기존 아날로그 시스템이나 새로운 시스템의 대부분은 디지털 시스템으로 구성

 

<그림>

 

아날로그 회로와 디지털 회로의 상호 연결

 

디지털을 아날로그로 바꿀 때는 연속적인 자료가 아님으로 완벽한 아날로그(연속된 자료)가 될 수 없다.

 

2. 디지털 정보의 표현

1. 디지털 정보의 전압레벨

디지털 정보를 표현하기 위해 2진수 체계(Binary sistem)를 사용

“0”“1”만의 2종류의 디지트(digit)를 사용

 

** 5V 전압기준

출력 0: 0 ~ 0.4V 1: 2.7 ~ 5V

입력 0: 0 ~ 0.8V 1: 2.0 ~ 5V

 

그 중간 값에 있는 신호는 가까운 쪽으로 종속되게 된다. 이 때 잡음이 발생할 수 있다.

 

2. 디지털 정보의 표현단위

1 nibble = 4 bit

1 byte = 8 bit

1 byte = 1 character

영어는 1byte1문자 표현 한글은 2byte가 필요

1word : 특정 CPU에서 취급하는 명령어나 데이터의 길이에 해당하는 비트 수

 

3. 전자소자를 이용한 논리 표현

다이오드에 의한 스위칭

<그림>

쌍극성 트랜지스터에 의한 스위칭

<그림>

NMOS 트랜지스터에 의한 스위칭

 

3. 논리레벨과 펄스 파형

1. 정 논리와 부 논리

양논리 또는 부논리(Positive logic)

음논리 또는 부논리(Negative logic)

정논리와 부논리는 모두 디지털 논리 시스템에서 이용되고 있으며, 정논리가 일반적으로 많이 사용

 

정논리 : High = 1 Low = 0

 

2. 펄스(pulse) 파형

펄스파형은 low상태와 high 상태를 반복하는 전압레벨의 구성

주기 펄스(periodic pulse) & 비주기 퍼스(non-periodic pulse)로 분류

 

이상적인 펄스파형

이상적인 주기 펄스는 두 개의 에지로 구성

리딩 에지(leading edge) = 상승에지(rising edge)

트레일링 에지(trailing edge) = 하강에지(falling edge)

 

실제적인 펄스 파형

 

3. 주기, 주파스, 듀티 사이클

주파수(frequency)

주기적인 파형이 1초 동안에 진동한 횟수를 의미

단우는 전파를 처음으로 발견한 독일의 헤르츠의 이름을 따서 헤르츠(Hz)를 사용

 

주기(period)

주기적인 파형이 1회 반복하는데 걸리는 시간을 의미

ex) 1초에 1번 진동 = 1Hz

1초에 2번 진동 = 2Hz

 

주파수와 주기와의 관계는 역수이다.

 

Duty cycle = tw/T * 100(%)

 

HighLow의 비율이 1:1일 때 50%라고 한다

 

High: Low6:4일때 60%이다.

 

Duty cycle80%이상이면 통상적으로 100%로 본다.

 

4. 디지털 직접회로

 

논리회로의 종류

조합논리회로(combinational logic circuit)

기본 게이트의 조합으로 구성되는 논리회로

ex)리모컨의 숫자

 

순서논리회로(sequential logic circuit)

조합논리회로에 플립플롭(flip-flop)또는 메모리를 부가한 논리회로.

ex)리모컨의 채널조정 상.하 버튼

 

 

1. IC 패키지

PCB(Printed Circuit Board)에 장착하는 방법에 따라 삽입 장착(through-hole mounted)형과 표면 실장(surface-mounted)형으로 구분

 

삽입 장착형 ICPCB보드의 구멍에 끼우는 핀을 가지고 있어 뒷면의 도체에 납땜으로 연결할 수 있으며, DIP형태를 갖는다.

 

표면 실장형 ICPCB표면의 금속 처리된 곳에 직접 납땜 처리

 

SMDDIP형태의 논리회로의 크기를 70%가량 줄이고, 무게를 90%만큼 감소, 또는 SMDPCD의 제조 가격을 크게 하락 시킴.

 

디지털 시스템의 장점

디지털 시스템의 소형화 및 경량화

생산가격의 저렴화

소비전력의 감소

동작속도의 고속화

디지털 시스템의 신뢰도 향상

 

2. 직접회로의 분류

 

트랜지스터의 직접도에 따른 분류

 

SSI = 100개 이하

MSI 1000개 이하

LSI 10,000개 이하

VLSI 1,000,000개 이하

ULSI 1,000,000개 이상

5. ADCDAC

 

아날로그-디지털 변환과정의 블록도

 

아날로그 신호 -(표본화)> -(양자화)> -(부호화)> 디지털 신호

 

1. 표본화(Sampling)

 

샤논의 표본화 정리 : 신호의 최고 주파수의 2배 이상의 빈도로 샘플링하면 샘플링된 데이터로부터 본래 데이터를 재현할 수 있다.

 

사람의 음성인 경우 1초 동안에 8000번 샘플링 필요.(2 * 4kHz= 8kHz

 

2. 양자화

펄스의 진폭 크기를 디지털 양으로 변환

이 과정에서 불가피한 양자화 잡음이 발생

양자화 잡음은 미리 정한 신호레벨의 수를 늘리거나 줄일 수 있으나, 데이터의 양이 많아지는 단점이 있다.

 

3. 부호화

부호화는 양자화한 값을 2진 디지털 부호로 변환.

일반적으로 전화 음성에서는 8비트로 부호화한다.

 

아날로그-디지털 변환과정의 예

 

<그림>

 

4. ADCDAC과정의 예

 

소리 MIC -> AMP -> ADC -> CD -> DAC -> AMP -> SPEAKER 소리

 

CD오디오 시스템에서 신호처리과정

 

 

* 영상신호 NTSC/PAL

 

NTSC : 29.997fps

PAL : 25fps

 

ADC의 적용 예 - 온도계

반응형
Posted by newind2000
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