16
1 제9장 Instruction Set Architecture 9-1 컴퓨터 아키텍쳐 개념 Machine language : (프로그램 메모리에 저장되는) 이진코드 Assembly language : symbolic, opcode + address 정보 아키텍쳐 명령어 세트 아키텍쳐 organization : DP, 제어장치, 연결버스 하드웨어 : 논리적 회로 명령어 format field - opcode - Address : 메모리 또는 레지스터 주소 - Mode field : 주소영역의 규정 - 그외 : shift 비트수, immediate 값 CPU의 레지스터세트 사용자 접근불가능 레지스터 : PC, IR(instr. Reg) uP실행에 필요한 reg, 파이프라인 reg 프로그램가능레지스터 : instr set에 정의 PSR(processor status reg) : C,N,V,Z 의 상태 비트 F/F SP (stack pointer) : 프로그램 실행시 스택값저장 -PC ( program counter) : 프로그램메모리의 다음실행할 주소저장 -instr decode : 연산종류, 어드레싱모드결정 한국기술교육대학교 전기전자통신공학부 Instr decode Operand 위치 해석 Operand fetch 연산실행 결과저장 Instr fetch 컴퓨터 동작사이클

제9장Instruction Set Architecture€¦ ·  · 2016-10-31•Assembly language : ... infix 연산자표현: (A + B) x C + ( D x E) postfix 연산자표현( RPN, Reverse Polish Notation)

  • Upload
    ngodieu

  • View
    227

  • Download
    2

Embed Size (px)

Citation preview

1

제9장 Instruction Set Architecture 9-1 컴퓨터 아키텍쳐 개념

• Machine language : (프로그램 메모리에 저장되는) 이진코드

• Assembly language : symbolic, opcode + address 정보

• 아키텍쳐

명령어 세트 아키텍쳐

organization : DP, 제어장치, 연결버스

하드웨어 : 논리적 회로

• 명령어 format field

- opcode

- Address : 메모리 또는 레지스터 주소

- Mode field : 주소영역의 규정

- 그외 : shift 비트수, immediate 값

• CPU의 레지스터세트

사용자 접근불가능 레지스터 : PC, IR(instr. Reg) uP실행에 필요한 reg, 파이프라인 reg

프로그램가능레지스터 : instr set에 정의

PSR(processor status reg) : C,N,V,Z 의 상태 비트 F/F

SP (stack pointer) : 프로그램 실행시 스택값저장 -PC ( program counter) :프로그램메모리의 다음실행할 주소저장

-instr decode :연산종류, 어드레싱모드결정

한국기술교육대학교 전기전자통신공학부

Instrdecode

Operand 위치 해석

Operandfetch

연산실행결과저장

Instrfetch

컴퓨터 동작사이클

2

9-2 오퍼랜드 어드레싱- ADD 연산에 대한 오퍼랜드 : 최대 3 operand (addend, augend, result)

- 오퍼랜드의 저장장소 : 레지스터 또는 메모리

- 오퍼랜드 주소 지정방식

암시적 주소(implied address)

명시적 주소(explicit address)

- 명령어에 포함된 주소개수 : 3,2, 1, 0

X = (A + B)(C + D) 연산을 위한 각 주소지정방식

• 3 주소 명령어 : assem 프로그램 코드가 작다, 주소지정비트가 크다

- 메모리사용ADD T1, A, B M[T1] ß M[A] + M[B]

ADD T2, C, D M[T2] ß M[C] + M[D]

MUL X, T1, T2 M[X] ß M[T1] x M[T2]

- 레지스터사용ADD R1, A, B R1 ß M[A] + M[B]

ADD R2, C, D R2 ß M[C] + M[D]

MUL X, R1, R2 M[X] ß R1 x R2

• 2 주소 명령어 : 결과저장 오퍼랜드를 암시적 주소로 사용, 코드길이가 길어진다.MOVE T1, A M[T1] ß M[A]

ADD T1, B M[T1] ß M[T1] + M[B]

MOVE X, C M[X] ß M[C]

ADD X, D M[X] ß M[X] + M[D]

MUL X, T1 M[X] ß M[X] x M[T1]

한국기술교육대학교 전기전자통신공학부

3

• 1 주소 명령어 : 암시적 주소 레지스터인 accumulator 사용

LD A ACC ß M[A]

ADD B ACC ß ACC + M[B]

ST X M[X] ß ACC

LD C ACC ß M[C]

ADD D ACC ß ACC + M[D]

MUL X ACC ß ACC X M[X]

ST X M[X] ß ACC

• 제로주소 명령어 :

stack (LIFO, Last In First Out) 사용

TOS(top of stack) ~ 보통 stack pointer(SP)라는 레지스터에 값 저장

PUSH A TOPS ß M[A]

PUSH B TOPS ß M[B]

ADD TOPS ß TOPS + TOS-1

PUSH C TOPS ß M[C]

PUSH D TOPS ß M[D]

ADD TOPS ß TOPS + TOS-1

MUL TOPS ß TOPS + TOS-1

POP X M[X] ß TOS

한국기술교육대학교 전기전자통신공학부

4

• Addressing architecture

- memory-to-memory 구조

- register-to-register 구조 ~ load/store 구조

LD R1, A R1 ß M[A] LD R2, D R2 ß M[D]

LD R2, B R2 ß M[B] ADD R1, R1, R2 R1 <- R1 + R2

ADD R3, R1, R2 R3 <- R1 + R2 MUL R1, R1, R3 R1 <- R1 X R3

LD R1, C R1 ß M[C] ST X, R1 M[X] ß R1

- register-memory 구조

ADD R1, A R1 ß R1 + M[A]

- 단일 누산기 구조 : 1 주소 명령어, 레지스터 파일이 없다, 21번의 메모리 접근으로 비효율적

ADD B ACC ß ACC + M[B]

- 스택 구조 : 제로 명령어, 스택이 메모리에 있기때문에 빈번한 메모리접근 발생

infix 연산자 표현 : (A + B) x C + ( D x E)

postfix 연산자 표현 ( RPN, Reverse Polish Notation) : A B + C x D E x +

~ 변수를 만날 때 스택에 저장 (push), 연산자를 만날 때 2개 변수를 pop하여 연산결과를 다시 스택에 저장

PUSH A

PUSH B

ADD

PUSH C

MUL

PUSH D

PUSH E

MUL

ADD

한국기술교육대학교 전기전자통신공학부

5

9-3 어드레싱 모드- 명령어에 포함되는 영역

opcode : 연산 종류

모드 : 오퍼랜드 지정방식

주소 : 오퍼랜드위치, 메모리 또는 레지스터

• 암시모드(implied mode)

- Binary 명령어가 2개 이하의 주소 포함시 한 주소는 암시적

2 addr ADD T1, B M[T1] ß M[T1] + M[B] -- 결과 주소는 암시적

1 addr ADD B ACC ß ACC + M[B] -- ACC를 암시적 주소로 사용

0 addr ADD TOS ß TOS + TOS –1 -- 스택의 TOS가 암시적 주소

• 즉시 모드(immediate mode)

- 상수 값을 갖는 오퍼랜드를 명령어에 포함

LDA #100H ACC ß #100H

• Register mode /register indirect mode

- 레지스터 모드 :명령어에서 주소영역이 특정, 임의 레지스터를 지정

LDA R1 ACC ß R1

- 레지스터 간접모드 : 주소영역이 레지스터를 지정하고 이 레지스터의 내용은 오퍼랜드의 메모리 주소 표현

LDA (R1) ACC ß M[R1] ß 직접 메모리 주소 지정보다 적은 비트 수 사용

auto increment / auto decrement : 메모리에 배열(array) 형태의 데이터가 저장된 경우,

배열에 대한 메모리 주소를 레지스터가 지정한다.

레지스터의 내용을 자동 1 증가 또는 감소하므로써 메모리 배열에 접근

ADD (R1)+, 3 M[R1] ß M[R1] +3, R1 ß R1 + 1

배열의 모든 원소에 3을 더하는 연산

(R1) 배열의 첫번째 주소지정, 주소 접근후 R1을 다음 연산을 위해 자동 1 증가

한국기술교육대학교 전기전자통신공학부

6

• 직접 어드레싱 (Direct addressing )모드

- 오퍼랜드가 접근될 메모리 주소를 직접 사용

LDA ADRS ACC ß M[ADRS] 2 워드 명령어, PC값은 2 증가

BRA ADRS if ACC=0 PC ß ADRS branch 명령

if ACC=0 PC ß PC+2

• 간접 어드레싱 (Indirect addressing)모드

- 유효주소(effective address)가 저장된 메모리 주소 지정

LDA [ADRS] ACC ß M[M[ADRS]]

• 상대어드레싱 (Relative addressing) 모드

- 특정 레지스터(예 :PC)를 사용하여 이의 내용에

주소 영역값을 더하여 유효 주소 계산

유효주소 = 명령어의 주소부분 + PC의 내용

LDA $ADRS ACC ß M[ADRS + PC]

** 분기할 주소가 현재 실행명령어와 가까이 있는 경우,

전체 메모리 주소 지정보다 적은 비트수로 표현가능

• indexed addressing mode

- 인덱스 레지스터 사용

유효 주소 = index reg의 내용 + 명령어주소부분

LDA ADRS (R1) ACC ß M[ADRS+R1]

이때 (R1) 값은 ADRS 값으로부터 상대적인 위치값

- 전용 index reg 또는 임의의 CPU reg를 index reg로 사용

- base-register mode : index reg 대신 base reg를 사용하여

유효주소= base reg 내용 + 명령어주소부분

이때 명령어 주소값은 base reg 주소로부터의 상대적 위치값

한국기술교육대학교 전기전자통신공학부

7

- 어드레싱 모드 예

한국기술교육대학교 전기전자통신공학부

8

9-4 명령어 세트 구조• RISC(reduced instruction set computer) 구조

(1) 메모리 접근은 load/store 명령어만 가능, 데이터 처리 명령어는 reg-to-reg 모드만 가능

(2) 제한된 어드레싱 모드

(3) 고정길이 명령어 포맷

(4) 명령어는 기본적 연산 수행

- 많은 데이터 처리량과 빠른 처리속도를 목적

- 메모리 접근은 시간이 많이 걸리므로 load/store외 다른 명령어에서는 배제

- 큰 레지스터 파일을 사용하여 데이터 처리

- 단순한 제어장치구조로 하드와이드 방식 사용

- 파이프라인 구조를 기본적 구조로 사용

• CISC (Complex instruction set computer) 구조

(1) 직접 메모리접근이 가능한 명령어가 많다

(2) 다양한 어드레싱 모드

(3) 가변길이의 명령어 포맷

(4) 기본적 연산과 복합연산을 포함하는 명령어 세트

- 프로그램 규모를 줄여 메모리 사용을 줄이는 명령어

- 메모리접근이 용이하므로 레지스터 파일은 비교적 작다.

- 복잡한 명령어에 대한 제어논리회로는 마이크로프로그래밍 방식 사용

uP 제어회로는 내부적으로 RISC의 기본연산 실행과 같이 파이프라인으로 처리

• CPU의 기본 연산 명령어 군 (CISC 및 RISC 모두에 포함)

(1) 데이터 전송 명령어

(2) 데이터 처리 명령어

(3) 프로그램처리명령어

한국기술교육대학교 전기전자통신공학부

9

9-5 데이터 전송 명령- 데이터 이동 : 데이터 내용 불변

- 전송 장소

메모리-레지스터, CPU 레지스터-입출력 레지스터,

레지스터-레지스터, 메모리-메모리 …• 스택 명령어

- 프로시져 호출과 복귀, interrupt 시 상태정보 저장

- 메모리 스택과 레지스터 사이의 데이터 전송 : push/pop

- SP(stack pointer)현재의 스택주소, TOS

스택에 저장된 데이터는 pop 동작으로 제거되는 것이 아니고 SP값만 감소

push SP ß SP-1 pop R1 ß M[SP]

M[SP] ß R1 SP ß SP+1

- 스택 증가가 주소값이 증가하는 형태의 스택 구성방식 :

push SP ß SP+1 pop R1 ß M[SP]

M[SP] ß R1 SP ß SP-1

- SP가 TOS의 다음 위치 지정 형태(스택 주소 증가방식)

push M[SP] ß R1 pop SP ß SP-1

SP ß SP+1 R1 ß M[SP]

• 입출력 명령어: CPU 레지스터와 입출력장치의 전송

- 독립I/O (independent I/O)시스템 : isolated I/O configuration

메모리와 입출력 포트의 주소가 분리, 특정 I/O 포트를 지정하기 위한 명령어지원

- 메모리-매핑 I/O (memory mapped I/O)시스템

메모리 주소의 일부를 I/O포트 주소로 할당

독립적 I/O 명령어가 없고 load/store 명령사용, 명령어가 단순

한국기술교육대학교 전기전자통신공학부

10

9-6 데이터 처리 명령어- 산술, 논리와 비트처리, 자리이동

• 산술 명령어 : add, sub, mult, div,….

- 부호화된 정수, unsigned 정수 구분

- 2진수, 10진수, 부동소수점

- 연산에 대한 레지스터의 비트 수

à double precision은 기본 레지스터의 2배수

• 논리연산, 비트처리 명령어

- 오퍼랜드의 각 비트에 대한 독립적인 논리연산

- A=1010 1101 B=1111 0000

A AND B = 1010 0000 A OR B = 1111 1101 A XOR B = 0101 1101, 이때 B의 역할은

mask, bit clear bit set bit complement

• 자리이동 명령어

A SHR 2 = 0010 1011 A SHL 3 = 0110 1000 ß 논리자리이동 빈자리를 0으로 채움

A SHRA 2 = 1110 1011 A SHLA 3 = 0110 1000 ß 산술자리이동, 왼쪽 빈자리는 sign extension 형태

A ROR 1 = 1101 0110

A ROLC 3 = 1 0110 1010 Carry=0으로 가정

- 자리이동 명령어 포맷 :

OP REG TYPE RL COUNT

OP : opcode

REG : operand

TYPE : 2 비트, 자리이동 형태

RL : 1비트 left/right 방향

COUNT : k비트, 0~2k-1의

자리이동수

한국기술교육대학교 전기전자통신공학부

11

9-7 부동소수점 (Floating point) 계산

- 가수(fraction)와 지수(exponent)로 표현

10진수 +.6132789 +04 è F x 10E = +.6132789 x 10+4 F및 E만 저장

2진수1001.11 è 01001110 000100 è F x 2E = +(0.1001110)2 x 2+4

부호 가수 지수 정규화

- 정규화(normalized) : 정밀도증가 ex) 0.0035 0.350

48비트 레지스터에 저장된 수 가정할 때, 1비트 부호 사용

정수의 범위 +-(247 – 1) à +- 1014

부동소수 범위 +-(1-2-35) x 2+2047 à +- 10615 [12비트 지수, 35비트 가수]

가수 비트를 크게 하면 정확도 증가, 지수 비트를 크게 하면 수의 범위 증가

• 산술연산

- 두수의 덧셈 및 뺄셈 : 지수를 같게 하기 위해 radix point 위치 정렬 필요

.5372400 x 102 .5372400 x 102

+ .1580000 x 10-1 + .0001580 x 102

.5373980 x 102 ß 결과의 가수는 다시 자리이동으로 정규화한다.

- 두수의 곱셈과 나눗셈 : radix point 정렬 불필요

곱셈 : 두 가수는 곱하고 지수끼리 더한 후 정규화

나눗셈 : 두 가수는 나누고 지수끼리 뺀 후 정규화

- 바이어스된 지수

가수 : 부호-크기방식 표현

지수 : 초과수를 더하여 biased 지수 표현, 지수부호제거

예: 초과bias=99 경우, e=E+99 E:실제지수

E=-99 à e = 0 E=+99 à e=198

0 ~ 198의 양의 지수로 표현 ß 지수계산시 부호고려 불필요

한국기술교육대학교 전기전자통신공학부

12

• 표준오퍼랜드 포맷

- single precision: 32비트, FS

double precision : 64 비트, FL(floating-point long)

ADDF : floating ADD 명령어

- IEEE standard 1배 정확도 부동소수점 표현

s : 부호 1비트

f : 가수 23비트 1.f1f2…f23 형식 실제 24비트값 1.111…11 ~ 1.000…00

significand,유효자리값, 항상 정규화됨

e: 지수 8비트, 127 초과 바이어스값

유효지수범위 : -126 ~ + 127

정규화된 수 표현 : (-1)se-127 x (1.f)

최대수 à s=0, e=254 f=1.11..111 (1+1-2-23)

+2127 x (2-2-23)

최소양 및 음의수 à e=1 f=1.00..000 = +- 2-126

특수수 표현

e=255, f=0 +- infinity

e=255, f=0 NaN (Not a Number), 유효하지 않은 연산

e=0, f=0 +0 -0

e=0, f=0 denormalized, 정규화된 수 보다 작은 수

23비트

f field significand 십진수

100…00

010…00

000…00

1.100…00

1.010…00

1.000..00

1.50

1.25

1.00등비수열합

한국기술교육대학교 전기전자통신공학부

13

9-8 프로그램 제어 명령어- 프로그램 명령어는 메모리에 연속 저장되고 한 번지씩 읽어 실행

- 메모리의 주소는 PC로부터, 메모리가 읽힐 때마다 자동 1 증가

- 프로그램의 실행 순서(주소)를 바꾸는 명령어 : 분기(branch) 와 점프(jump) 명령어

분기 명령어 : 상대 어드레싱

점프 명령어 : 직접, 간접 어드레싱

조건 명령어 : 조건이 만족될 때 분기/점프, 유효주소를 PC에 로드

아닐 때는 PC의 연속된 다음 주소 실행

skip 명령어 실행 예 :

skip on C

jump addr1

ADD R1

ß 조건분기 명령어보다 비효율적, 2개 명령어 실행

비교 명령어 : 두 오퍼랜드의 뺄셈에 의하여 비교,

이때 레지스터, 상태비트의 변화로 조건분기를 발생

test 명령어 : 두 오퍼랜드의 ANDing 결과로

레지스터, 상태비트 변화로 조건분기발생

- 조건명령어 : PSR 비트값을 조건으로 하여 유효주소값 변경

BZ, BNZ : ALU 연산결과가 0인지 PSR의 Z 비트로 검사

BC, BNC : ALU에서의 캐리, 자리이동레지스터의 캐리

BN, BNN : 부호비트, ALU의 최상단 왼쪽비트

BV, BNV : 부호화된 수의 산술연산의 자리수 넘침(overflow)

A-B : 부호없는 두 수의 뺄셈

A-B ß 연산기

상태비트 C ( 캐리 또는 borrow ), Z변화

조건이 만족하면 다음 명령어 skip (PC 증가), 아니면 무조건 분기

한국기술교육대학교 전기전자통신공학부

14

• 부호없는 수의 조건분기 명령어

A-B와 같은 연산을 실행하여

ALU 값과 PSR의 C, Z 비트 사용

BLE ( A <= B ) : C=1 or Z=1 à C+Z=1

BH (A > B) : BLE의 complement, à C+Z=0

• 부호화된 수의 조건분기 명령어

A-B와 같은 연산을 실행하여

ALU 값과 PSR의 N, V, Z 비트 사용

A >= B :

N=0 V=0 뺄셈의 부호 +, not overflow, A >= B

N=1 V=1 부호반전, 양의값 결과, A>=B

à N xor V = 0

A > B : 결과는 양수이고 not zero

à (N xor V) + Z = 0

A < B : A >= B 의 complement

A <= B : A>B의 complement

• 프로시주어 호출과 복귀명령어

서브루틴을 실행(CALL) 하기 위해 시작하는 위치로 분기한 후 서브루틴실행이 끝나면 주 프로그램으로 복귀(RET)

CALL addr1 다음 명령어의 주소를 임시장소에 저장 : return 주소

LD R1 addr1을 PC에 로드

return 주소 저장장소 : 메모리의 고정된 위치, 프로세서 레지스터, 메모리 스택

스택사용시 : 연속된 call 주소를 스택에 저장, 프로그래머가 복귀 주소 관리 불필요

call SP ß SP-1 return PC ß M[SP] (LD R1 주소 )

M[SP] ß PC (LD R1 주소) SP ß SP + 1

PC ß 유효주소 (addr1)

한국기술교육대학교 전기전자통신공학부

15

9-9 프로그램 가로채기(Interrupt)- 정상적인 프로그램의 진행순서에서 벗어나 외부 또는 내부에서 발생한 요구에 따른 서비스프로그램 실행

내부/외부에서 예측할 수 없는 시점에서 발생

서비스 프로그램의 주소는 하드웨어 처리로 결정

interrupt 발생시, PC외 상태 레지스터 값도 저장

- 가로채기 발생시 해당 서비스 프로그램 실행 전에 현재 실행되는 프로그램의 실행을 완료후, 복귀주소,

PSR 등을 저장한 후 서비스 프로그램을 실행하고 복귀시는 저장된 레지스터 값을 복원

- 컴퓨터의 2가지 동작모드 : PSR 또는 특정 비트로 결정

시스템모드 : 운영체제의 프로그램 실행시, 시스템모드 특권 명령어, 사용자는 접근불가

사용자 모드 : 사용자프로그램 실행상태, 시스템특권명령어 실행불가

- 가로채기 발생시 현재값 저장 하드웨어 형태

PC 값만 저장하는 기능 하드웨어- 가로채기서비스프로그램에서 필요레지스터 내용 저장기능을 포함해야함

가로채기 발생시 필요 레지스터내용을 자동적으로 저장

alternate 레지스터 세트를 가진 형태 : 모드 세트로 두 레지스터 세트를 교대로 사용

- 가로채기 처리 하드웨어 형태

프로세서 레지스터 내용을 메모리 스택에 저장하고 서비스프로그램의 첫번째 명령어 하드웨어주소를 PC에 로드

서비스프로그램의 시작주소를 하나의 메모리 위치에 할당

가로채기 각 소스에 대하여 별도의 독립적인 주소 할당

가로채기 소스 하드웨어 자체에서 서비스 루틴의 주소 제공

서비스 루틴으로 분기하기 위한 주소를 선택하게 하드웨어 처리과정을 거치는 경우

- 가로채기 발생시 대부분, 현재 실행중인 명령어가 완료되기까지 가로채기에 응답하지 않는다.

한국기술교육대학교 전기전자통신공학부

16

- 가로채기 형태 : 외부 가로채기, 내부 가로채기, 소프트웨어 가로채기

external interrupt : 하드웨어, 입출력장치, 타이밍장치, 파워 공급 등 외부요인에 의한 발생

Internal interrupt : 하드웨어, 명령어나 데이터의 잘못된 사용 등으로 trap발생이라고 함

산술overflow, 0으로 나눌 때, 잘못된 연산코드 실행, 메모리 스택 overflow,

protection violation(메모리 접근 금지영역을 접근하려고 할 때)

software interrupt : 사용자가 명령어를 실행하여 interrupt를 의도적으로 발생

입출력전송이 필요한 경우 시스템모드로 변환시켜 전송을 시스템모드가 실행하게 하는 sw intr 발생

- 외부 가로채기 하드웨어 형태

여러 개의 intr 소스 사용가능

EI (intr enable) 세트 레지스터 – ENI, DSI 명령어로 세트/리세트

- 가로채기 마이크로 명령어 실행단계

SP ß SP – 1

M[SP] ß PC

M[SP] ß SP – 1

M[SP] ß PSR

EI ß 0

INTACK ß 1

PC ß IVAD

한국기술교육대학교 전기전자통신공학부