cpu 의 기초 이론

135
CPU CPU 의 의의 의의 의 의의 의의 일일일일 CPU 일 일일 일일 [email protected] http://blog.naver.com/dolic om

Upload: faith-hull

Post on 03-Jan-2016

133 views

Category:

Documents


4 download

DESCRIPTION

CPU 의 기초 이론. 일반적인 CPU 의 기본 구성. [email protected] http://blog.naver.com/dolicom. CPU 의 기본 이론. CPU 구조. CPU 의 기본적 구성 요소. 일반적인 CPU 의 구성 요소 레지스터 ALU & flag 명령 패치 및 명령 실행 모듈 CPU 가 실행되기 위한 가장 기초적 요소 메모리 ROM/FLASH RAM (SRAM,DRAM). 초기 CPU 레지스터의 구조 (8 비트 ). 초기 CPU 의 레지스터 - PowerPoint PPT Presentation

TRANSCRIPT

CPUCPU 의 기초 이론의 기초 이론

일반적인 CPU 의 기본 구성

[email protected]://blog.naver.com/dolicom

CPU CPU 구조구조

CPU 의 기본 이론

CPU 의 기본적 구성 요소

일반적인 CPU 의 구성 요소 레지스터 ALU & flag 명령 패치 및 명령 실행 모듈

CPU 가 실행되기 위한 가장 기초적 요소메모리

ROM/FLASHRAM (SRAM,DRAM)

초기 CPU 레지스터의 구조 (8비트 )

초기 CPU 의 레지스터 A (Accumulator ) : 데이터 처리의 기본 레지스터 B : A 와 연동하는 보조 레지스터 ALU 는 명령의 종류에 따라 1,2 개의 요소가 필요 한데 A,B

가 기본 요소이다 .2 개 필요 : ADD ; A+B -> A1 개 필요 : RR A ; 오른쪽 로테이션

일반적 레지스터가 여러 개 추가 - 일반 레지스터 . 8086,Z80 : B, C, D, E, H, L 2 개의 레지스터가 결합하여 동작하기도 한다 . BC, DE, HL -> 16 비트 조작 명령도 있음

진화한 구조 레지스터

일반 레지스터의 차이가 없다 .Accumulator 가 처리하는 것을 모든 일반

레지스터가 실행각 레지스터간의 특별한 의미가 없이 동등R0, R1, R2, … RnALU 와 선택적으로 연결되어 계산

ADD R2,R3 ; R2+R3 -> R2

ARM, 68000

8 비트 CPU 의 특수 레지스터 종류

Index 레지스터주로 메모리 주소를 나타내어 데이터를 읽거나 쓸 때

주소값으로 사용6800 : IX, 8051 : DPTR8086,Z80 : 일반레지스터 HL 을 메모리 인텍스로 사용

PC (Program Counter), IP(x86)현재 기계어 명령이 실행되는 있는 메모리의 위치를

나타낸다 . PC 값은 자동으로 처리되기 때문에 임의적으로 값을

바꾸는 명령은 없다 .SP (Stack Pointer)

메모리를 사용한 특수 stack 처리를 위한 메모리의 위치를 지정하는 포인터 값을 갖는다 .

Reset 후 초기 PC 값

A

B. . .

FLAG

data bus

. . .

ALU

주소 기계어 어셈블러 ORG 0000H0000 74 00 MOV A,01H0002 25 02 ADD A,02H0004 F5 A0 MOV 0A0,A0006 02 00 57 JMP MAIN 0009 02 . . . . . .

74

25

02

01

0000

0001

0002

0003

PC=0000

패치 (Fetch ) 을 할 때 PC 사용

A

B. . .

FLAG

data bus

. . .

ALU

주소 기계어 어셈블러 ORG 0000H0000 74 01 MOV A,01H0030 25 02 ADD A,02H0033 F5 A0 MOV 0A0,A

74

명령어 버퍼

명령어 해석

•처음 00 번지 기계어를 읽는다 . •명령어 74 는 다음 데이터를 A 레지스터로 옮기라는 명령으로 규정 -> 해석

25

02

01

740000

0001

0002

0003

PC=0000

Fetch 후 자동으로 PC 값 1 증가

B. . .

FLAG

data bus

. . .

ALU

주소 기계어 어셈블러 ORG 0000H0000 74 00 MOV A,01H0002 25 02 ADD A,02H0004 F5 A0 MOV 0A0,A

74

74

명령어 버퍼

명령어 해석

25

02

•다음 1 번지의 데이터 00 을 읽어 A 레지스터에 넣는다 . •명령 한 개가 종료 됨 .

A 01

01

0000

0001

0002

0003

PC=0001

자동으로 PC 1 증가하여 다음 명령처리

A = 01

B. . .

FLAG

data bus

. . .

ALU

주소 기계어 어셈블러0000 74 00 MOV A,01H0002 25 02 ADD A,02H0004 F5 A0 MOV 0A0H,A

25

명령어 버퍼

명령어 해석

•처음 02 번지 기계어를 읽는다 . •명령어 25 는 다음 데이터를 A 레지스터와 더하라는 명령으로 규정 -> 해석• A+02H -> A 준비

02

01

74

25

0000

0001

0002

0003

PC=0002

명령어 실행 -Machine Cycle

한 명령이 실행되기 까지의 전체 시간Fetch - 기계어 명령 읽기Decode - 기계어 기능 해석Execute - 실행Store - 메모리에 저장

MOV A,02HADD A,02H

8051-MOVX- 외부 데이터 억세스

MC1 Fetch- 명령어 읽기

MOV A,01H = 7474 01 메모리로 부터 명령어 74 을 읽는 과정이다 .

Address bus

25

02

01

74 0000

0001

0002

0003

PC=0000

B. . .

FLAG

ALU

A

data bus

. . . . . .

명령어 버퍼

제어신호

읽기제어신호

ROM

16

8

CS, OE

EPROM Read Timing

CPU 출력ROM 출력

0000

74

MOV A,01H

8051 코어

MC2 Decode – 명령어 해석MOV A,01H = 7474 01

읽어들인 명령어 74 을 해석 한다 .

Address bus

25

02

01

74 0000

0001

0002

0003

PC=0001

B. . .

FLAG

ALU

A

data bus

. . . . . .

명령어 버퍼 74

Decode

읽기제어신호

ROM

16

8

Decode:74 가 MOV 명령 해석

MOV A,01H

제어신호

MC3 Execute – 명령어 실행

MOV A,01H = 74 0101 다음 데이터을 읽어 A 에 넣기 실행

Address bus

25

02

01

74 0000

0001

0002

0003

PC=0001

B. . .

FLAG

ALU

A 01

data bus

. . . . . .

제어신호

읽기제어신호

ROM

16

8

CS, OE

EPROM Read Timing

CPU 출력ROM 출력

0001

01

MOV A,01H

MC1 Fetch- 명령어 읽기

ADD A,02H = 2525 02 메모리로 부터 명령어 25 을 읽는 과정이다 .

Address bus

25

02

01

74 0000

0001

0002

0003

PC=0002

B. . .

FLAG

ALU

A = 01

data bus

. . . . . .

명령어 버퍼

제어신호

읽기제어신호

ROM

16

8

CS, OE

EPROM Read Timing

CPU 출력ROM 출력

0002

25

ADD A,02H

MC2 Decode – 명령어 해석ADD A,02H = 2525 02

읽어들인 명령어 25 을 해석 한다 .

Address bus

25

02

01

74 0000

0001

0002

0003

PC=0003

B. . .

FLAG

ALU

A

data bus

. . . . . .

명령어 버퍼 25

Decode

읽기제어신호

ROM

16

8

Decode:25 가 ADD 명령 해석

ADD A,02H

MC3 Execute – 데이터 실행

ADD A,02H = 25 0202 다음 데이터을 02 를 읽는다 .

Address bus

25

02

01

74 0000

0001

0002

0003

PC=0003

B. . .

FLAG

ALU

A 01

data bus

. . . . . .

제어신호

읽기제어신호

ROM

16

8

CS, OE

EPROM Read Timing

CPU 출력ROM 출력

0003

02Oper and 버퍼 02

ADD A,02H

MC4 Execute – 더하기 실행ADD A,02H = 25 02

ALU 을 이용하여 A+operand 실행

Address bus

25

02

01

74 0000

0001

0002

0003

PC=0004

B. . .

ALUALU

data bus

. . . . . .

Operand 02

Decode

읽기제어신호

ROM

16

8

ALU: ADD 선택

A = 01 -> 03

FLAGFLAG

01 02

03

제어 : ADD

Z=0,C=0, N=0, Z=0,C=0, N=0, V=0, P=0V=0, P=0

ADD A,02H

MC1 Fetch- 명령어 읽기

MOV 0A0H,A = F5F5 A0 메모리로 부터 명령어 F5 을 읽는다 .

Address bus 25

02

01

74 0000

0001

0002

0003PC=0004

B. . .

FLAG

ALU

A=03

data bus

. . . . . .

명령어 버퍼

제어신호

읽기제어신호

ROM

16

8

CS, OE

EPROM Read Timing

CPU 출력ROM 출력

0004

F5

MOV 0A0H,A

F5F5

A0

0004

0005

MC2 Decode – 명령어 해석MOV 0A0H,A = F5F5 A0

읽어들인 명령어 74 을 해석 한다 .

Address busPC=0005

B. . .

FLAG

ALU

A=03

data bus

명령어 버퍼 F5

Decode

읽기제어신호

16

8

Decode:F5 가 MOV 명령 해석

25

02

01

74 0000

0001

0002

0003

. . . . . .

ROM

F5

A0

0004

0005

MOV 0A0H,A

MC3 Execute – 명령어 실행

MOV 0A0H,A = F5 A0A0 저장할 주소값 읽기

Address busPC=0005

B. . .

FLAG

ALU

A = 03

data bus

제어신호

읽기제어신호

16

8

CS, OE

EPROM Read Timing

CPU 출력ROM 출력

0005

A0

25

02

01

74 0000

0001

0002

0003

. . . . . .

ROM

F5

A0

0004

0005

MOV 0A0H,A

Oper and A0

MC4 Store – 데이터 저장

MOV 0A0H,A = F5 A0 읽힌 주소값 (A0) 을 이용 RAM 쓰기

Address busPC=0006

B. . .

FLAG

ALU

A = 03

data bus

제어신호

읽기제어신호

8/16

8

CS, WE

CPU 출력CPU 출력

A0

03

25

02

01

749E

9F

A0

A1

. . . . . .

내부 RAM

F5

A0A2

A3

MOV 0A0H,A

Oper and A002

00

30

. . .

FF

54

03

8051 의 RAM은 내부에 있는 것이므로 8비트 주소값을 갖는다 .그러나 통상 8비트 CPU 는 주소는 16비트이다 .

RAM Write Timing

MC3 Store – 데이터 저장

MOV @DPTR,A 읽힌 주소값 (A0) 을 이용 RAM 쓰기

Address busPC=0006

B. . .

FLAG

ALU

A = 03

data bus

제어신호

읽기제어신호

16

8

CS, WE

CPU 출력CPU 출력

5011

03

25

02

01

74500F

5010

5011

5012

. . . . . .

외부 RAM

F5

A05013

5014

MOVX @DPTR, A 현재 DPTR=5011

DPTR = 501102

00

30

. . .

FF

54

03

RAM Write Timing

PC 값이 자동으로 진행하지 않는 경우

PC 는 CPU 가 실행하면서 현재 실행 시점에서 자동으로 증가하면 다음 명령을 실행

필요에 따라 다음 명령이 아닌 곳으로 실행을 옮길 필요가 있는데 이것은 기계어 명령에 따라 이루어 진다 .Jump 명령CALL / RET 명령

8 비트 CPU 의 PC 는 16 비트 레지스터 이므로 최대 64K 바이트 내에서 기계어 코드가 실행 된다 .

플래그 플래그 (FLAG)(FLAG)

CPU 의 기본 이론

플래그 (FLAG) 의 개념과 종류

ALU 산술연산 , 논리연산 , 쉬프트 등의 결과로 발생되는 상태를 나타내고 CPU 에 저장하여 , 이 상태를 사용하는 명령에 의해 명령 고려 시 참조된다 .

수학적 2 진법 계산에서 주로 언급되는 이론수학적 계산을 할 때 , 디지털 회로에서 정해진

비트로 설정하고 계산한다 .CPU 마다 취급되는 종류는 약간씩 다르나

기본적인 것은 모두 가지고 있다 .

플래그의 종류

C (Carry) : 어떤 연산결과 맨 앞의 비트 계산 결과 발생되는 자리 올림 값 . 더하기 할 때는 carry 빼기 할 때는 borrow

Z (Zero) : 계산 결과가 모두 0 일 때 Carry 비트는 제외

V (Overflow) : 계산 결과 레지스터가 취급할 수 값의 범위를 넘었을 때 발생

S (Sign) : 맨 앞의 비트 (MSB) 가 1 일 때 음수를 나타낸다 .

P (Parity) : 계산 결과 값에서 1 의 개수가 홀수 개 인지 짝수개 인지를 나타낸다 .

AC(Auxiliary Carry) : 8 비트 CPU 에서 3 번째 비트를 연산한 결과의 Carry/Borrow 값

8 비트 계산의 C 와 AC

char inum; inum = -3; inum += 2;

0000 0011 : 3 1111 1100 : 3 의 1 의 보수 1111 1101 : 3 의 2 의 보수 = 1 의 보수 + 1 => -3

0 1111 1101 : (-3) 0 0000 0010 : + 2----------- ADD 0 1111 1111 : (-3) + 2 => -1

맨 앞의 비트에서 더할 때 carry 가 발생하지 않아C = 0 (clear) 되고 AC=0

0

Carry 예 2

char inum; inum = -3; inum += -2;

0 1111 1101 : -30 1111 1110 : -2---------- + ADD1 1111 1011 : (-3) + (-2) => -5

맨 앞의 비트에서 더할 때 carry 가 발생하여C=1 (set) 되고 AC=1

1

로테이션 명령에서 carry 와 함께

RRC A : RRC (Rotate Right with Carry)

 

0 → 1111 1101 → C C=1

RLC A : RLC (Rotate Left with Carry) 

C ← 1111 1101 ← 0 C=0

A 레지스터

A 레지스터

Zero 예 (8 비트 )

char inum; inum = -3; inum -= 3;

0 1111 1101 : -30 0000 0011 : 3----------- SUB 0 0000 0000 : (-3) - 3 => 0

연산결과 0 이 나와 Z=1(set), C=0(clear)

S (Sign), N(Negative)

char inum; inum = -3; MOV A,#0FDH inum += 2; ADD A,#02

0 1111 1101 : -30 0000 0010 : 2----------- ADD 0 1111 1111 : (-3) +2 => -1

연산결과 -1 이고S=1(set), Z=0(clear), C=0(clear)

V (Overflow)

-127 -1 = 80H – 01H => 127 : V=1, C=0, S=0

0 1000 0000 : 80H = -1280 0000 0001 : 01H = 1---------- : SUBB 0 0111 1111 : -128 - 1 = +127

-128 - 1 = -129 와 같이 결과가 나와야 하지만8 비트의 제한 때문에 127 이 나와 한계를 넘는경우를 overflow 라고 한다 .V=1(set) 로 됨

char icn;icn = -127;icn -= 1;

CLR CMOV A,#80HSUBB A,#01

V (Overflow)

126 +3 = -127 : V=1, C=0, S=1

0 0111 1110 : 1260 0000 0011 : 3---------- : ADD 0 1000 0001 : 126 + 3 = -127

126 + 3 = 129 와 같이 결과가 나와야 하지만8 비트의 제한 때문에 -127 이 나와 127 보다 큰 수가될 수 없고 한계를 넘는 경우를 overflow 라고 한다 .V=1(set) 로 됨

char icn;icn = 126;icn += 3;

CLR CMOV A,#126SUBB A,#03

P (Even Parity )

char inum; inum = -3; MOV A,#0FDH inum += 2; ADD A,#02

0 1111 1101 : -30 0000 0010 : 2----------- ADD 0 1111 1111 : (-3) +2 => -1

연산결과 값은 -1 이고 , 1 의 개수가 8 개로 짝수이다 . 이 때 P=1 로 set 됨 .

P=1(set), S=1(set), Z=0(clear), C=0(clear)

스택 스택 (Stack)(Stack)

CPU 의 기본 이론

스택 이란

스택 (Stack) 의 개념

스택은 데이터를 저장하거나 꺼내 사용할 때 , 저장하는 방식을 말한다 .

마지막에 넣은 데이터를 우선 꺼내지는 구조이다 .

데이터 넣기PUSH

데이터 꺼내기POP

스택 구조를 지원하기 SP 레지스터 사용

메모리에 데이터를 넣고 빼기 위해 주소값을 저정하기 위한 포인터가 필요한데 이것이 SP 레지스터 이다 .

SP 는 특정 명령이 실행되며 자동으로 증가하거나 감소 한다 .

PUSH POP

SP

메모리

레지스터

8 비트 CPU 의 스택의 억세스 순서

스택에 넣을 때는 PUSH 명령을 사용 한다 .

PUSH

00FF

메모리

00FF

00FE

00FD

00FC

주소

MOV SP,#00FFH

SP

00FF 00FF

00FE

00FD

00FC

주소

SP

MOV A,#10PUSH A

10

00FE

00FF

00FE

00FD

00FC주소

SP

10

PUSH A 실행 과정

1. SP 가 가리키는 주소에 10 을 넣는다 .

2. SP 가 1 이 자동감소

XX

스택의 억세스 순서 step2

기계어 데이터를 꺼내려면 POP 명령을 사용

읽기

00FF 00FF

00FE

00FD

00FC

주소

SP

POP A

10

00FE

00FF

00FE

00FD

00FC

주소

SP

10

POP A 실행 과정

2. SP 가 가리키는주소에서 값을 읽는다

1. SP 가 1 이 자동증가

10 A

3. 읽혀진 값을 A 에 저장

00FF

8051 스택의 억세스 순서

기계어 데이터를 넣으려면 PUSH 명령을 사용

5F

내부메모리

5F

62

61

60

주소

MOV SP,#5FH

SP

60SP

MOV A,#10PUSH A

60SP

PUSH A 실행 과정

2. SP 가 가리키는 주소에 A=10 을 넣는다 .

1. SP 가 1 이 자동증가

5F

62

61

60

주소

105F

62

61

60

주소

10 A

8051 스택의 억세스 순서 step2

기계어 데이터를 꺼내려면 POP 명령을 사용

읽기

POP A

주소

POP A 실행 과정

1. SP 에서 읽어 A 에 저장 한다 .

10 A 레지스터

2. SP 을 1 감소 한다 .

60

62

61

60SP 5F

10

주소

60

62

61

60

SP 5F

10

주소

5F

62

61

60

SP5F

10

CPU CPU 레지스터 예레지스터 예

CPU 의 기본 이론

8051 의 레지스터

A

B

R0

R1

R3

R4

R2

R5

R7

R6

DPH DPL

PC

DPTR

PC 16 비트

SP스택

포인터

CY AC F0 RS1 OVRS0 P--FLAGPSW

ALU 와연동

범용

8 비트 – 내부 RAM 만 사용

16비트

8 비트

8 비트

8086 레지스터

A : Accumulator General registers:

B,C, BC (data pointer) D,E, DE (data pointer) H,L, HL (reference memory address)

PC (Program counter,16 비트 ) SP (Stack pointer,16 비트 )-stack

2 씩 증가 /감소 . FLAG

S : Sign Z : Zero AC : Auxiliary carry - carry 3 비트의 결과 ->4 비트에 영향 P : Parity – even parity (1 의 숫자가 짝수개 일때 , 1) C : Carry – 더하기 (carry), 빼기 /비교 (borrow)

Z-80 레지스터

Z-80 플래그

CarryZeroMinusParity/overflowHalf-carry

Z-80 칩의 구조

ARM

ARM 의 상태 레지스터

메모리메모리

CPU 의 기본 이론

• EPROM (8 비트의 시스템에서 주로 사용 )• SRAM (8 비트의 시스템에서 주로 사용 )• DRAM (ARM 등 임베디드 시스템에서 주로 사용 ) 고 용량의 메모리에 필요

메모리의 엑세스

CPU 가 프로그램을 읽어 실행하기 위해 필요

변수의 값을 설정 하기 위해MOV/MOVX 등의 값 설정

스택을 사용할 경우PUSH/POP 명령에 의한 스택 사용CALL/RET 에 의한 복귀 주소 처리인터럽트 /RETI 에 의한 복귀 주소 처리

CPU 는 억세스 하기 위한 신호

현재 메모리의 억세스 인가를 나타내는 신호와 억세스 방향 (read/write) Z80 : MREQ, RD, WR

MREQ=0 이고 RD=0,WR=1 인 동안 메모리 읽기MREQ=0 이고 WR=0,RD=1 인 동안 메모리 쓰기프로그램과 데이터 /변수영역의 구분이 없다 .

8051 : RD, WR, PSEN, ALE프로그램 메모리와 데이터 /변수 영역 구분 있음RD=0 이고 WR=1,PSEN=1 : 데이터 메모리 읽기RD=1 이고 WR=0,PSEN=1 : 데이터 메모리 쓰기RD=0 이고 WR=1,PSEN=0 : 프로그램 메모리 읽기RD=1 이고 WR=0,PSEN=0 : 프로그램 메모리 쓰기

CPU 와 메모리

CPU 의 신호에 따라 Read/Write 한다 .

CPU

Decoder

ROMAddress Bus A[n:0]

Data Bus D[7:0]

RAM

•메모리 제어 신호 발생•ARM 등의 임베디드 칩은 CPU 내에 포함

RD/WRPSEN

CS OE

CS RD WR

메모리의 구조 – 신호

메모리는 여러 개의 데이터 저장이 필요하므로 각 데이터의 위치를 결정하기 위한 주소 값이 필요 - Address Bus

한 번에 읽거나 쓰기 때 , 여러 비트의 데이터 처리를 위해 데이터 신호가 필요 – Data Bus (1,8,16,32 비트 )

읽거나 쓸 때 정확한 시점을 결정하기 위한 신호 ( CS – Chip Selector)

RAM 의 경우 읽거나 쓰기를 결정하기 위한 신호 (RD / WR )

ROM 의 경우 읽을 때 , 데이터의 출력을 결정하기 위한 신호 (OE)

EPROM

EPROM

읽는 것은 가능하나 쓰기는 별도의 장치 사용전원이 공급되지 않아도 데이터 유지별도의 자외선에 의해 지움

메모리의 구조 – ROM 신호

A[n:0] – Address Bus : 신호의 라인수는 칩의 용량과 관계가 있다 .

D[7:0] – Data Bus : 한번에 8 비트 단위로 읽는다 .

CS (CE) : 읽거나 쓰는 시점을 결정한다 . Active 에서만 데이터를 읽거나 쓴다 .

OE(Output Enable) : 읽을 때 데이터를 출력 한다 . 이것이 deactive 되면 데이터 버스는 끊어 진다 ( 하이 임피던스 ).

CS, OE 의 신호는 0 일 때 active 된다 .

EPROM – 27C256

256x1,024bit=32,768byte=> 32Kbyte

ROM 타이밍 – READ 데이터 읽기

EPROM 쓰기 – 롬라이터에 의해

EPROM 지우기 – 자외선 등에 의해

SRAM

SRAM

읽거나 쓰기가 가능전원이 공급되면 데이터 유지전원이 공급되지 않으면 데이터 사라짐

메모리의 구조 – SRAM 신호

A[15:0] – Address Bus : 신호의 라인수는 칩의 용량과 관계가 있다 .

D[7:0] – Data Bus : 한번에 8 비트 단위로 읽는다 .

CS : 읽거나 쓰는 시점을 결정한다 . Active 에서만 데이터를 읽거나 쓴다 .

WE : CS 가 active 시점에서 쓰기를 한다 .OE(Output Enable) : 읽을 때 데이터를 출력

한다 . 이것이 deactive 되면 데이터 버스는 끊어 진다 ( 하이 임피던스 ).

CS, WE, OE 의 신호는 0 일 때 active 된다 .

SRAM – 681000 (1Mbit=128Kbyte)

SRAM 의 메모리 셀 (1 비트 )

DRAMSRAM

SRAM 읽기 타이밍

SRAM 읽기와 쓰기 속도

SRAM 쓰기 타이밍

DRAM

DRAM

읽거나 쓰기가 가능전원이 공급되면 데이터 유지되지만 서서히

데이터가 사라져 주기적으로 리플레쉬 함 .전원이 공급되지 않으면 데이터 사라짐

DRAM 의 셀 구조

FET 와 캐패스터의 전류 손실 때문에 주기적 리플레쉬가 필요하고 별도의 하드웨어가 필요하다

DRAM Write

DRAM Read

DRAM 과 SDRAM 차이

메모리의 구현

CPU 와 메모리의 배치시스템 설계

CPU 와 메모리

CPU 의 메모리 처리 한계CPU 가 처리할 수 있는 메모리의 한계가 있다 .

CPU 의 레지스터가 주소 지정을 할 수 있는 공간8 비트 CPU 대부분 16 비트 주소를 갖는 64Kbyte

임 .

CPU 의 메모리 배치 방법프로그램과 변수 /데이터 영역이 구분되지 않은

경우 대부분의 CPU 는 여기에 속함 )

프로그램과 변수 /데이터영역이 구분8051 계열

CPU 의 메모리 처리 한계

CPU 가 정해진 길이 만큼의 메모리 한계필요에 따라 메모리의 용량을 결정프로그램과 데이터 영역의 구별이 없는 CPU 경우 예

AddressBus A[15:0]

32K

16K

16K

0000

7FFF8000

BFFFC000

FFFF

ROM

RAM1

RAM2

MREQRDWR

A15A14

A15=0 CS

CS

CS

A15=1,A14=0

A15=1,A14=1

CPU

디지털 로직

Address

decoder

메모리 배치 개념시스템이 필요한 용량만큼의 메모리 설계

00

011011

0

1

0

1

000001

010011

100101

110

111

CPU측에서 본 주소값ROM 칩 1

RAM 칩 2

RAM 칩 3

CSOE

A0A1

CSRD

A0

WR

CSRD

A0

WR

A0A1

RDWR

A2

MEMREQ

CPU 신호

ROM 칩 1 의 CS 신호 논리

MREQ A2 A1 A0 Out

0 0 X X 0

0 1 X X 1

1 0 X X 1

1 1 X X 1

MREQ A2 Out

0 0 0

0 1 1

1 0 1

1 1 1

RAM 칩의 CS 신호 논리

MREQ A2 A1 Out

0 0 0 1

0 0 1 1

0 1 0 0

0 1 1 1

1 0 0 1

1 0 1 1

1 1 0 1

1 1 1 1

Out = MREQ A2 A1

= MREQ + A2 + A1

논리 식

입출력 장치입출력 장치

CPU 의 기본 이론

포트 (Port)

장치에서 시스템 구성 상 상황에 따라 디지털 입출력이 필요 출력 : 어느 장치를 제어하기 위한 디지털 1 비트

출력 CPU 가 한번 쓰기를 하면 이 상태가 다음 쓰기전에는 유지해야 한다 .

입력 : 디지털 입력 0,1 의 상태를 읽음 keypad

포트는 간단 디지털의 1 비트만을 입 /출력 주로 8 비트 단위로 입출력 -CPU 마다 다름

디지털 입 . 출력

디지털 출력은 필요한 비트 만을 설계 초기의 CPU 는 TTL 를 사용 하였다 .

출력 :D-FF/LATCH 을 이용 입력 : 74244 등의 버퍼 사용

MCU/ 임베디드는 칩 내부에서 지원 메모리가 내부에 존재하므로 밖에 있는

메모리를 억세스 할 필요가 없다 . 칩의 핀을 포트로 사용하도록 진화 하였다 . 각 핀을 선택적으로 디지털 입 .출력과

특수목적으로 선택할 수 있다 .

디지털 출력 초기의 CPU 는 TTL 의 D-FF/LATCH 을 이용

AddressDecoder

Data Bus D[7:0]

RD/WRPSEN

AddrBus

D

CLK

Q

D

CLK

Q

D

CLK

Q

D

CLK

Q

D

CLK

Q

D

CLK

Q

D

CLK

Q

D

CLK

Q

D0

D1

D2

D3

D4

D5

D6

D7

74374

출력 8 비트

CPU

디지털 입력 초기의 CPU 는 TTL 의 D-FF/LATCH 을 이용

AddressDecoder

Data Bus D[7:0]

RD/WRPSEN

AddrBus

D0

D1

D2

D3

D4

D5

D6

D7

74541

8 비트 입력

CPU

포트 - 입출력의 구현 ( 범용 )

D

CLK

Q

D-FF

출력 CLK

Data bus

출력 Write

외부 입력 읽기

입출력을 선택적으로 사용한다 . 프로그램에 의해 입출력 선택 ( 레지스터 사용 )

PT7 PT6 PT5 PT4 PT3 PT2 PT1 PT0

D[7:0]

. . .

출력 Data 읽기

P0D0

포트가 입력인지 출력인지를 결정하는 레지스터

1 : 출력0 : 입력

8 개의 D-FF 사용D

CLK

Q

PortPort

입력은 제어필요없다 .

PT0 가 1 이면출력 버퍼가 D-FF을 핀에 출력 한다 .

포트의 개수 - 처리단위

출력 CLK

8 개의 포트를 하나로 묶어 사용 입출력 선택 및 제어를 위한 레지스터 – 8 개 단위

PT7 PT6 PT5 PT4 PT3 PT2 PT1 PT0

D[7:0]

. . .

PA0

PT0 가 1 이면출력 버퍼가 D-FF을 핀에 출력 한다 .

포트가 입력인지 출력인지를 결정하는 레지스터

PortPort

D

D

D

. . .

PA1

PA7

PA.0

0,1,2,3,4,5,6,7

A,B,C,D,E, . . .0,1,2,3,4, . . . PA3, PB2

P1.3, P0.1

D0

D1

D[7:0]

DataBus

. . .

포트 이름 붙이기 예

AVRARM

일반적으로 많이 사용

포트를 출력으로 사용

D

CLK

Q

D-FF

Data bus

출력 Write

외부 입력 읽기

출력 선택 : PT 레지스터에 1 을 설정한다 . 포트의 D-FF 에 원하는 로직을 쓴다 .

0 0 1 0 0 1 1 1PTA

. . .

출력 Data 읽기

PA0

D0

PT0 가 1 이므로출력 버퍼가 D-FF 을 핀에 출력 한다 .

레지스터에 1 을 쓰면 출력 선택

1 : 출력

PT0

입력은 제어필요없다 .

PT1PT2PT3PT4PT5PT6PT7

출력한 데이터를 다시 읽기

D

CLK

Q

D-FF

Data bus

출력 Write

외부 입력 읽기

출력 선택 : PT 레지스터에 1 을 설정한다 . 포트의 D-FF 에 원하는 로직을 쓴다 .

0 0 1 0 0 1 1 1PTA

. . .

출력 Data 읽기

PA0D0

PT0 가 1 이므로출력 버퍼가 D-FF 을 핀에 출력 한다 .

레지스터에 1 을 쓰면 출력 선택

1 : 출력

PT0

외부입력은 제어필요없다 .

PT1PT2PT3PT4PT5PT6PT7

포트를 입력으로 사용

D

CLK

Q

D-FF

Data bus

출력 Write

외부 입력 읽기

출력 선택 : PT 레지스터에 1 을 설정한다 . 포트의 D-FF 에 원하는 로직을 쓴다 .

0 0 1 0 0 1 1 0PTA

. . .

출력 Data 읽기

PA0D0

PT0 가 0 이므로출력 버퍼가 Z 상태

레지스터에 0 을 쓰면 출력 해제

0 Z

PT0

입력할 때 만 읽어 들이면 된다 .

PT1PT2PT3PT4PT5PT6PT7

포트의 멀티기능 출력 디지털 입출력과 다른 하드웨어 출력 선택적으로 사용 예 : 디지털 입출력과 UART 의 핀으로 사용 UART_ENABLE

레지스터 비트를 1 로 설정하면 UART 쪽의 버퍼를 활성화

D

CLK

Q

D-FF

Data bus

출력 Write

외부 입력 읽기

출력 Data 읽기

P3.1/TxD

D10

포트출력은 무시포트 입출력 레지스터는 무시된다 .

0 0 1 0 0 1 X 1PT3

출력버퍼 Shift Register

X X X X X X X 1

UART 제어레지스터

UTxD_ENABLE

Z

TxD

P3.1

PT3.1

UART

모듈

포트의 멀티기능 입력 디지털 입출력과 다른 하드웨어 출력 선택적으로 사용 예 : 디지털 입출력과 UART 의 핀으로 사용 UART_ENABLE

레지스터 비트를 1 로 설정하면 UART 쪽의 버퍼를 활성화

D

CLK

Q

D-FF

Data bus

출력 Write

외부 입력 읽기

출력 Data 읽기

P3.0/RxD

D10

포트출력은 무시포트 입출력 레지스터는 무시된다 .

0 0 1 0 0 1 0 XPT3

입력버퍼 Shift Register

X X X X X X X 1

UART 제어레지스터

RxD_ENABLE

Z

RxD

P3.0

PT3.0

UART

모듈

키패드키패드(keypad)(keypad)

입출력 장치 - 입력

키패드 (keypad)

키패드는 장치의 특성에 개수는 결정키의 개수와 CPU 의 포트의 수에 따라

회로를 결정개수가 적을 경우 CPU 포트 하나에

하나의 키로 설계개수가 많으면 매트릭스 형태로 설계

키의 개수가 적을 경우

CPU 의 포트에 직접 연결 한다 .

5V

전류 1R 저항4.7K 10K

CPU

P0.14.xV

키의 눌리면

CPU 의 포트에 직접 연결 한다 .

5V

전류 2

R 저항4.7K 10K

CPU

P0.1

전류 1

0V

소프트에서 처리

키가 눌리면 논리 1 -> 0 로 바뀜만약 포트의 인터럽트가 가능하면

인터럽드 사용 인터럽트가 발생하면 키를 읽어 확인키에 맞는 기능 수행

인터럽트 불가능하면 계속 키가 눌렸는지 확인키가 눌리면 이에 맞는 동작 실행

키가 많을 때 (4x4=16 키 )

VDD

R출력 회로

CPU 포트 출력TTL D-FF

CPU 포트 입력TTL(74244)

11 22 33

◀◀

44 55 66

▶▶

77 88 99

** 00 ##

RR

Run/Run/StopStop

매트릭스 키의 신호처리

키가 눌리면 인터럽트 신호 발생하는 경우어느 키 인지를 감지하는 프로그램 실행키에 맞는 동작 실행

인터럽트가 불가능 하면 키 눌렸는지 확인 어느 키 인지를 확인하고 동작 실행

어느 키인지를 확인하는 절차 -1

키 대기 상태에서 R[3:0] 에 모두 0 을 출력하고 키입력을 가다린다 . 만약 어느 비트라도 0 이 입력되면 키가 눌렸음을 확인을 안다 .

VDD

R

키출력R0

R1

R2

R3

C0C1C2C3 D0D1D2D3

0

0

0

0

1011

키입력

키 확인 절차 - 2

우선 R0 에 을 나머지는 0 을 나머지는 1 을 출력하고 키입력 값을 읽는다 . 입력된 키 값이 모두 1 이므로 R0 줄의 모든 키는 입력이 되지 않았음 .

VDD

R

키출력R0

R1

R2

R3

C0C1C2C3 D0D1D2D3

0

1

1

1

1111

키입력

키확인 절차 - 3

VDD

R

출력R0

R1

R2

R3

C0C1C2C3 D0D1D2D3

1

0

1

1

1011

R1 에 0 을 나머지는 1 출력하고 키입력값 C[3:0] 을 읽는다 . 키입력값에 두번째 비트가 0 임을 확인

키확인 절차 - 4

VDD

R

출력R0

R1

R2

R3

C0C1C2C3 D0D1D2D3

1

1

0

1

1111

R1 에 0 을 나머지는 1 출력하고 키입력을 한다 . 키입력을 하면 두번째 비트가 0 임을 확인

키을 읽을 때의 문제점

키의 전자 신호는 보통 채터링이라는 신호 형태를 띤다 .

A키 off

B키 눌림

C불안정

D안정

E키 떨어짐

F불안정

A키 off

• 키가 눌리면 변화 과정에서 C 와 F 와 같은 불안정 상태를 거친다 .• CPU 는 이것의 상태를 수정할 수 있는 프로그램이 필요하다 .- 키를 누르면 2 번 실행할 경우 이 문제 때문 일 수 있다 .

입출력 장치입출력 장치

CPU 의 기본 이론

• LCD

LCD

문자형 LCD 정해진 문자를 쓸수 있다 . (ASCII) 간단한 구조 – CPU 와의 인터페이스가 간단 .

그래픽형 LCD STN-LCD : 흑백으로 적은 사이즈의 LCD TFT-LCD : 휴대장치나 기타

그래픽 처리 때문에 LCD 드라이버가 복잡 그래픽 메모리가 필요 메모리로 부터 고속 전송 필요 임베디드에서는 내부의 DMA 등으로 그래픽

데이터 전송

문자 LCD 모듈 내부 블록도

LCD Controller & Driver IC

CPUCG

RAMCG

ROM

LCD

ControllerPower Supply

DC/DC converter

Memory

DDRAM

Driver

CommonDriver

SegmentDriverCGRAM CGROM

LCD 화면과 1:1 로 대응하는

ASCII 코드

User 가 원하는 FONT 를 만들어서

저장하는 RAM

LCD 화면에Display 될 글자

데이터 (font) 를 저장

Data register

LCD 내부 Register 와 신호 흐름

입출력버퍼

CGRAM

CGROM+5

V

RS

R/W

E

D[7:0]

Vo

GND

Instruction register LCDRS=0

DD RAM

8

RS=1

8

8

8

제어 레지스터DR(Data Register)

DD RAM/CG RAM 에 쓰거나 읽어낸 데이터를 일시적으로 저장

IR(Instruction Register) : Write Only Display Clear, Cursor Shift 등의 명령과

DD RAM 및 CG RAM 의 Address 저장BF(Busy Flag)

RS=0, R/W=1, BF 1 : 내부 설정중 , 다음 명령을 대기 0 : 명령을 받을 수 있음 .

LCD 에 명령을 줄때마다 BF 확인 필요

IR, DR 억세스

RS R/W 기 능

0 0 IR 에 쓰기(Function Set, Display Clear, …)

0 1 Busy Flag 및 Address Counter 읽어들임

1 0 CG RAM 및 DD RAM 에 data 쓰기 (DR DD RAM, CG RAM) 출력 문자 쓰기 (ASCII DDRAM)

1 1 CG RAM 및 DD RAM 에서 data 읽어들임

(DD RAM, CG RAM DR)

문자형 LCD

LCD

1

23

456

789

1011121314

AddressDecoder

R/WA0

D2

D0

D4

D6D7

D3

D5

D1

A[15:0]

MEM_CS

VCC

D2

D0

D4

D6D7

VCC

ER/W

D3

D5

VSS

D1

RS

Vo

CPU

LCD Write Timing

LCD Read Timing

LCD 제어 명령 I

LCD 제어 명령 II

LCD 초기설정 - FUNCTION FUNCTION SETSET

LCD 기능설정 (FUNCTION SET) 명령 Interface 의 길이 , Display Line, Character font

설정

- DL : Interface 길이DL=1 : 8 bit data

lineDL=0 : 4 bit data

line- N : Number of display line- F : Type of character font

LCD 기능설정은 “Busy flag/address read” 명령을 제외한 모든 명령보다 앞에서 실행되어야 한다 .

초기화전원 ON

VDD 가 4.5V 될 때까지 15ms 이상 대기

FUNCTION SET 명령

4.1 ms 이상 대기

100sec 이상 대기

FUNCTION SET 명령

FUNCTION SET 명령

FUNCTION SET 명령DISPLAY OFF 명령CLEAR DISPLAY 명령ENTRY MODE 명령DISPLAY ON 명령

초기설정 완료

0011****

0011****

0011****

00 11 N F * *0000 1 0 0 00000 000 1

00000 1 I/D S0000 1 1 C B

LCD 프로그램#define LCD_DATA 0xXXXX //

RS=1#define LCD_COM 0xXXXX // RS=0

/* Function Set * 0x38 : 0011 1000 * - 8bits I/O, 2 Line, 5x7 Matrix */

void LCD_Init(){ lcd_outp(LCD_COM,0x38); if (LCD_Busy()) lcd_outp(LCD_COM,0x38);

LCD_DspOff(); LCD_Clear(); LCD_DspOn(CURON);}

char LCD_Busy(){ int cnt;

for (cnt = 0;cnt < 1000;cnt++) if (! (lcd_inp(LCD_COM) & 0x80) ) return 0; return 1;}

void LCD_Clear(){ LCD_Busy(); lcd_outp(LCD_COM,0x01); }

void LCD_PrintStr(int p, char *str){ int lp;

if (LCD_GotoPos(p)) return; if (p < SZ_ONE_LINE) lp = p + 0x80; else { lp = p - SZ_ONE_LINE; lp |= 0xC0; } LCD_Busy(); lcd_outp(LCD_COM,lp); while (*str && p < SZ_ALL_LINE) { LCD_Busy(); if (*str < ' ') lcd_outp(LCD_DATA, ' '); else lcd_outp(LCD_DATA, *str);

p++; if (p == SZ_ONE_LINE ) { lp = p - SZ_ONE_LINE; lp |= 0xC0; LCD_Busy(); lcd_outp(LCD_COM,lp); } str++; }}

// 원하는 위치로 이동하는 함수// 2줄 x 40 char 문자형#define SZ_ONE_LINE 20#define SZ_ALL_LINE 40

int LCD_GotoPos(int pos){ if (pos >= SZ_ALL_LINE) return -1; if (pos < SZ_ONE_LINE) pos |= 0x80; else { pos -= SZ_ONE_LINE; pos |= 0xC0; } LCD_Busy(); lcd_outp(LCD_COM, pos); return 0;}

// mode#define DSPON 0x04 // Display On#define CURON 0x02 // Cursor On#define BLINKON 0x01 // Blink On

void LCD_DspOn(BYTE mode){ LCD_Busy(); lcd_outp(LCD_COM,0x08 | DSPON | mode);}

void LCD_DspOff(){ LCD_Busy(); lcd_outp(LCD_COM,0x08);}

인터럽트인터럽트(Interrupt)(Interrupt)

CPU 의 기본 이론

인터럽트

인터럽트는 CPU 가 어느 프로그램 코드를 실행하고 있을 때 , 프로그램을 동작을 멈추고 인터럽트를 요구하는 모듈에 처리를 하는 과정을 말한다 .보통 CPU 외의 Timer, Serial, 포트 등의

상태 변화가 있을 때 CPU 에게 알려 이에 맞는 동작을 하는 프로그램이 실행

예를 들어 포트에 연결된 키가 눌려지면 인터럽트로 CPU 에 알리고 현재 진행중인 프로그램을 멈추고 키 처리 루틴을 실행

처리 방법

CPU 가 어느 부분의 프로그램 코드를 실행하고 있는 지를 인터럽트을 발생하는 부분에서는 모른다 .

임의의 코드를 중지하고 현재 레지스터 값을 대피하고 인터럽트 발생한 부분의 프로그램을 찾는다 . ( 프로그램은 이미 결정되어 있음 )

인터럽트의 발생 부분의 코드를 처리 한다 .처리가 끝나면 RETI( 기계어 코드 ) 에 따라

종료하고 대피한 레지스터를 복귀 한다 .레지스터가 복귀되면 이전의 프로그램이

자동으로 계속 된다 .

인터럽트의 발생부와 코드의 위치

CPU 가 인터럽트에 대응하는 프로그램은 찾은 방법은 주로 2 가지를 사용 한다 .이미 결정된 주소를 점프한다 .

8051, 8080, Z-80CPU 는 현재 실행중인 코드를 종료하고 정해진 주소로

점프 (PC 값 변경 )벡터 테이블을 찾아 주소 값을 읽고 , 이 주소로 점프

한다 .80386, 68000, ARMCPU 는 현재 실행중인 코드를 종료하고 벡터테이블에서

주소값을 읽는다 .읽혀진 주소값으로 점프 (PC 값 변경 )

인터럽트 처리 시 레지스터 대피

보통 스택 (stack) 을 이용하여 레지스터를 저장 한다 .인터럽트 루틴 시작에서 PUSH 명령을

사용하여 저장C 의 경우 interrupt 을 사용한 함수에서 자동

저장레지스터 뱅크를 사용하는 방법

레지스터 뱅크가 있어 레지스터 블록이 여러 개 일 경우 현재 레지스터 뱅크를 다른 뱅크로 변경 => 현재 실행되는 상태는 유지

프로그램프로그램

CPU 의 기본 이론

프로그램과 메모리 사용 (CPU)

기계어 코드 (ROM/RAM)명령이 처리위한 기계어 코드

영역변수 데이터 (RAM)

명령이 실행될 때 데이터가 저장되는 공간

고정 데이터 (ROM/RAM)명령이 실행될 때 변하지 않는

변수 공간

int a;

int main(){ a = 10; a++; printf(“a=%d”,a) return 0;}

메모리와 변수와의 관계

프로그램 코드를 할 때 , 코드와 변수 공간이 필요하다 .

C 와 어셈블리와는 표현 방식이 다르다 .C 에서 int, char, … 로 변수 선언을 하면

메모리의 특정 부분이 할당 된다 . 자동 변수의 경우는 레지스터로 할당되는 경우도 있다 .

어셈블리에서는 EQU 로 특정 주소를 직접 지정하고 사용 한다 .

변수의 종류

변수는 특성이 여러가지가 있다 .초기값이 없는 변수

C 의 전역변수 중에서 초기 설정을 하지 않는 변수int int cntcnt;;

void main()void main()

{{

cnt = 10;cnt = 10;

printf(printf(““cnt = %d\ncnt = %d\n””, cnt);, cnt);

}}

초기값이 있는 변수C 의 전역변수 중 초기 설정을 하는 변수 int int cnt = 10cnt = 10;;

초기 실행 시 ROM 에 있는 10 이 RAM 변수영역으로 복사되어 설정 되고 main 으로 점프 한다 .

변수의 존재 방식

선언된 변수는 변수영역의 메모리 (RAM)에 할당된다 .

할당된 변수는 실행 코드에 의해 값이 변한다 . – 실행 코드는 기계어

CPURAM

ROM

int cnt;

기계어 코드

0A

00

xxxx

MOV

A

74

00

2502

C 코딩

프로그램 메모리 배치 – 실행 시

초기값 변수

초기값없는 변수

Code

HEAP

STACK

rodata

BSS

text

Stack 또는 CPU 레지스터

Data

heap

stack

상수값 데이터

int g_total_No = 100;char defname[] = “홍길동” ;

int g_temp;char *databuff;

void main(){ int cnt; static int sum;

databuff = (char*) malloc(64);

sum = 0; for (cnt = 1; cnt <= 10; cnt ++) sum += cnt; printf(“Sum = %d\n”, sum);}

mainmain 함수 시작함수 시작 전에전에 복사복사

변수 초기 데이터

Session 메모리

RAM

RAMROM

FLASH

RAM

컴파일러 마다 session 구조는 약간씩 다름

프로그램 실행 모델 – 일반 OS

초기값 변수

초기값없는 변수

Code

HEAP

STACK

rodata

BSS

text

Data

heap

stack

상수값 데이터

mainmain 함수 시작함수 시작 전에전에 복사복사

변수 초기 데이터

Session 메모리

RAM

RAM

RAM

Window Window 또는또는 linuxlinux 1. 사용자에 의해 프로그램이

프로그램에 선택되면 하드디스크나 기타 보조 저장 장치로 부터 RAM으로 로드 된다 .

2. ‘ 변수 초기 데이터’를 초기값 변수영역으로 복사하는 등 프로그램 초기 부분이 실행 된다 . ( 개발자가 코딩하는 것이 아니라 링커가 초기 모듈을 결합 )

3. main() 함수가 호출 된다 .

임베디드임베디드1. 부트로더가 플래쉬나 기타

저장장치로 부터 프로그램을 RAM 에 복사 한다 . ( 통상 속도상 RAM 실행 )

2. 초기 프로그램을 실행하여 초기값 변수값을 복사한다 .

3. main() 을 호출 한다 .

프로그램 실행 모델 – MCU/CPU

초기값 변수

초기값없는 변수

Code

HEAP

STACK

rodata

BSS

text

Data

heap

stack

상수값 데이터

mainmain 함수 시작함수 시작 전에전에 복사복사

변수 초기 데이터

Session 메모리

RAM

ROMFLASH

RAM

1.ROM 또는 FLASH 에 프로그램 코드가 존재 한다 .

2.‘ 변수 초기 데이터’를 초기값 변수영역으로 복사하는 등 프로그램 초기 부분이 실행 된다 . ( 경우에 따라 개발자가 코딩하거나 링커가 알아서 라이브러리에서 결합 )

3.main() 함수가 호출 된다 .

프로그램과 CPU 의 실행

C 와 기계어의 관계 그리고 실행

int a;

void main(){ a = 10; if (a == 10) a++;}

A EQU 0023H

MAIN: PUSH A MOV A,10 CMP A,10 JNE EndIF INC AEndIF: POP A RET

컴파일러

if 메커니즘

C 의 상당 부분은 if 가 기본이다 . if, for, while, do~while 은 기본적으로 if 과 점프

명령으로 구성된다 .

if 의 실행 방법 : if (a == 10)1. CMP A,10 A 레지스터의 현재값에서 ALU 을 통해 10 빼고 결과는

플래그만을 설정 한다 . CMP 명령은 A 레지스터는 변화 없다 .

2. JNE EndIF 만약 A 와 10 이 같으면 결과 값이 0 이 되고 캐리는 C=0 이

된다 . JNE 명령은 값이 같지 않으면 다음명령 스킵되도록 점프 한다 .

3. INC A만약 C=0 이면 A 레지스터 값을 1 증가 한다 .

C 의 a++ 가 실행하기 위한 기계어 명령이다 .

a = 10;if (a == 10) a++;

MOV A,10 CMP A,10 JNE EndIF INC AEndIF: