15

Click here to load reader

20110212 taocp 1.4.3

Embed Size (px)

DESCRIPTION

taocp 1.4.3

Citation preview

Page 1: 20110212 taocp 1.4.3

TAOCP – 1.4.3 해석루틴

아꿈사

김성안<[email protected]>

Page 2: 20110212 taocp 1.4.3

해석 루틴

해석 루틴(=해석기) :

- 다른 프로그램의 명령들을 수행하는 컴퓨터 프

로그램

- 다른 프로그램은 유사 기계어로 작성

유사기계어 :

- 어떠한 명령을 표현하는 한 가지 방식

- 보통 연산 코드, 주소 등으로 구성

Page 3: 20110212 taocp 1.4.3

해석 루틴

ex) .NET framework, Java Virtual

Machine도 일종의 해석기

Page 4: 20110212 taocp 1.4.3

Wikipedia. http://en.wikipedia.org/wiki/File:CLR_diag.svg

해석 루틴

Page 5: 20110212 taocp 1.4.3

해석기가 응용되는 까닭

간결하고 효율적인 방식으로 표현 : - 유사 기계어는 복잡한 의사 결정 및 행동 절차

를 간결하고 효율적인 방식으로 표현

훌륭한 의사 소통 수단 : - 다중 패스 공정에서 패스들 사이의 훌륭한 의

사 소통 수단

기계에 독립적 : - 컴퓨터가 바뀐다고 해도 해석기만 다시 작성하

면 됨

Page 6: 20110212 taocp 1.4.3

MIX 시뮬레이터

시뮬레이터(=에뮬레이터) :

- 해석 루틴에 제공된 언어가 다른 컴퓨터의 기

계어인 경우일 때의 해석기

MIX로 작성된 MIX 시뮬레이터

Page 7: 20110212 taocp 1.4.3

프로세서 명령어 특성

ALU 연산 : - 사칙 연산, 비트 논리 연산

메모리 로드(load) : - 피연산자에 기록된 메모리 주소를 구해

- 그 내용을 읽어 지정된 레지스터 값에 읽음

메모리 스토어(store) : - 메모리 로드와 반대로 주어진 레지스터의 내용을

- 지정된 메모리 주소에 씀

분기문 : - 주어진 조건을 계산해(조건 분기일 때)

- 다음에 수행될 PC를 얻음

김민장. 프로그래머가 몰랐던 멀티코어 CPU 이야기. 서울: 한빛 미디어, 2010.

Page 8: 20110212 taocp 1.4.3

프로세서 명령어 처리 단계

1. 명령어 인출(Instruction Fetch, IF)

2. 명령어 해독(Instruction Decoding, ID)

3. 피연산자 인출(Operands Fetch, OF)

4. 명령어 실행(Instruction Execuction, EX)

5. 결과 저장(Operand Store, OS)

김민장. 프로그래머가 몰랐던 멀티코어 CPU 이야기. 서울: 한빛 미디어, 2010.

Page 9: 20110212 taocp 1.4.3

프로세서 명령어 처리 단계

while (has_instruction())

{

fetch();

decode();

operands_fetch();

execution();

operand_store();

}

김민장. 프로그래머가 몰랐던 멀티코어 CPU 이야기. 서울: 한빛 미디어, 2010.

Page 10: 20110212 taocp 1.4.3

MIX 시뮬레이터

Page 11: 20110212 taocp 1.4.3

* MIX SIMULATOR

ORIG 3500

BEGIN STZ TIME(0:2)

STZ OVTOG

STZ COMPI

ENT6 0 장소 0에서 첫 번째 명령을 가져온다.

CYCLE LDA CLOCK : 제어 루틴의 시작

TIME INCA 0

STA CLOCK

LDA 0,6 : 명령어 인출(Instruction Fetch, IF)

STA INST : 명령어 해독(Instruction Decoding, ID)

INC6 1

LDX INST(1:2) 주소의 절대값을 얻는다.

SLAX 5

STA M

LD2 INST(3:3) 색인 필드를 조사한다.

J2Z 1F

DEC2 6

J2P INDEXERROR

LDA SIGN6,2 색인 레지스터의 부호를 얻는다.

LDX I6REG,2 색인 레지스터의 크기를 얻는다.

SLAX 5

ADD M

CMPA ZERO(1:3)

JNE ADDERROR

STA M

1H LD3 INST(4:4) rI3 <- F필드

LD5 M

LD4 INST(5:5) r4 <- C필드

DEC4 63

J4P OPEERROR

LDA OPTABLE,4(4:4)

STA TIME(0:2)

LD2 OPTABLE,4(0:2)

JNOV 0,2 : 명령어 실행(Instruction Execuction, EX)

JMP 0,2

Page 12: 20110212 taocp 1.4.3

* INDIVIDUAL OPERATORS

MUL JMP GETV V를 얻는다.

CMPX SIGNA

ENTX 1

JE *+2

ENNX 1

STX SIGNA

STX SIGNX

MUL AREG

JMP STOREAX

GETV STJ 9F

JMP FCHECK

JMP MEMORY rA <- 메모리 크기, rX <- 부호

1H J1Z 2F

ENTX 1

SLA -1,1

SRA -1,1

2H LD2N R

SRA 5,2

9H JMP *

STOREAX STA AREG : 결과 저장(Operand Store, OS 또는 Write Back, WB)

STX XREG

OVCHECK JNOV CYCLE

ENTX 1

STX OVTOG

JMP CYCLE

Page 13: 20110212 taocp 1.4.3
Page 14: 20110212 taocp 1.4.3
Page 15: 20110212 taocp 1.4.3