Download ppt - 명령어의 구성

Transcript
Page 1: 명령어의 구성

명령어의 구성

컴퓨터 명령어의 개요컴퓨터 명령어 형식주소지정방식명령어의 종류

Page 2: 명령어의 구성

명령어의 개요

• 컴퓨터의 논리적 구조의 이해– 어셈블리어 매뉴얼을 참조

• 하드웨어에 의해 실행되는 명령어에 대한 자세한 사항을 기록• 명령어의 2 진 코드와 기호화된 이름에 대한 정의를 기록

– 컴퓨터는 다양한 명령어와 명령어 형태를 가짐• 제어장치에서 명령어를 해석하고 실행하기 위한 제어신호를 제공

• 명령어– 컴퓨터가 어느 정보를 가지고 어떤 처리를 하는지를 나타내는

것으로 연산코드와 오퍼랜드로 구성

Page 3: 명령어의 구성

명령어의 구성

• 명령어의 구성– 연산코드와 오퍼랜드로 구성

• OP code : 처리해야 할 연산의 종류• Operand( 피연산자 ) : 처리할 정보나 처리된 정보

• 명령어 형식– 명령어를 구성하는 필드의 수와 배치방식 및 각 필드의 비트 수 – 필드라는 비트그룹으로 나뉨

• 연산코드 필드 : 수행할 연산을 위한 명령어를 나타냄• 오퍼랜드 필드 : 연산코드에서 결정된 명령을 수행할 대상이 되는

데이터 또는 데이터가 저장된 주소를 나타냄

연산코드 (OP code) 오퍼랜드 (Operand)

Page 4: 명령어의 구성

명령어의 기능

• 함수연산 기능– 데이터 처리 명령어가 산술과 논리 연산을 수행

• 전달기능– 데이터 전송 명령어가 레지스터 사이의 정보

전달이나 중앙처리 장치와 주기억 장치 사이의 정보 이동을 수행

• 제어기능– 프로그램 제어 명령어가 명령어의 수행 순서를

제어

Page 5: 명령어의 구성

컴퓨터 명령어 형식

• 명령어 set– 컴퓨터에서 사용할 수 있는 명령어의 집합– 컴퓨터의 구조적 정보를 나타내는 가장 중요한 정보– 컴퓨터 계열 (family) 에 속하는 컴퓨터들은 컴퓨터

자체는 달라도 명령어 set 은 동일하나 계열이 다르면 다른 명령어 set 을 가짐

• 윈도우 계열 Vs 유닉스 계열 Vs 매킨토시 계열

Page 6: 명령어의 구성

기억 장소에 따른 명령어 형식

• 오퍼랜드를 기억시켜 놓는 장소에 따른 명령어 형식의 분류– 누산기를 이용한 명령어 형식– 다중 레지스터를 이용한 명령어 형식– 스택 구조를 이용한 명령어 형식

Page 7: 명령어의 구성

기억 장소에 따른 명령어 형식 - 누산기

• 누산기를 이용한 명령어 형식 (1 주소 명령어 )– 함수 연산 기능의 명령어를 수행할 때 오퍼랜드

중의 하나가 누산기에 기억되도록 하는 컴퓨터 구조– 중앙처리장치 내에 있는 유일한 데이터 레지스터

• 오퍼랜드를 기억시키는 레지스터 ( 누산기 )

– 하나의 기억 장치 주소 필드를 사용• ADD X AC AC + M[X]• 누산기의 내용 + X 번지 내용 누산기에 저장

특수 레지스터(PC, MAR, MBR)

산술 / 논리연산장치(ALU)

누산기(AC)

입력버스

출력버스

Page 8: 명령어의 구성

기억 장소에 따른 명령어 형식 - 다중레지스터

• 다중레지스터를 이용한 명령어 형식 (2-3 주소 )– 중앙처리장치 내에 여러 개의 레지스터

• 세 개의 레지스터가 필요– 예

• ADD R1, R2, R3 R3 R1 + R2• ADD R1, R2 R2 R1 + R2• MOVE R1, R2 R2 R1

레지스터 set산술 / 논리연산장치

(ALU)

입력버스

출력버스

Page 9: 명령어의 구성

기억 장소에 따른 명령어 형식 – 스택구조

• 스택 구조를 이용한 명령어 형식 (0 주소 )– 연산에 필요한 오퍼랜드와 연산의 결과를 스택에

기억시키는 구조– 스택 (Stack : LIFO)

• 가장 마지막에 저장된 데이터를 가장 먼저 얻는 후입선출의 특성을 가지는 데이터 구조

– 명령어 형식은 연산코드만 표시• ADD 주소 필드가 필요 없음• Push X TOS M[X] • POP X M[X] TOS

산술 / 논리연산장치

스택

0

1

2

3

4

5

스택포인터

Page 10: 명령어의 구성

오퍼랜드 수에 따른 명령어 형식 -3 주소

• 3- 주소 명령어 (three-address instruction) 형식– 오퍼랜드의 수가 3 개인 명령어 형식– 주소필드는 처리장치 레지스터 혹은 기억장치 레지스터

• ADD A, B, R1 R1 M[A] + M[B]

– 장점• 산술식을 프로그램하는 데 있어서 프로그램의 길이가 짧아짐

– 단점• 3 주소 명령어를 2 진 코드화 했을 때 세 개의 오퍼랜드를

나타내기 위한 비트 수가 다른 주소 명령어 형식보다 많이 필요

연산코드 오퍼랜드 1 오퍼랜드 2 오퍼랜드 3

Page 11: 명령어의 구성

오퍼랜드 수에 따른 명령어 형식 -2 주소

• 2- 주소 명령어 형식– 오퍼랜드의 수가 2 개인 명령어 형식– 상업용 컴퓨터에서 가장 많이 사용– 주소필드는 처리장치 레지스터 혹은 기억장치 레지스터

• MOVE A, R1 R1 M[A]• ADD B, R1 R1 R1 + M[B]

– 장점• 3 주소 명령어에 비해 명령어의 길이가 짧아짐

– 단점• 같은 내용을 수행하기 위한 명령어의 수가 증가

– 3 주소 (1 개의 명령어 ) Vs 2 주소 (2 개의 명령어 )

ADD A, B, R1

Page 12: 명령어의 구성

오퍼랜드 수에 따른 명령어 형식 -1 주소

• 1- 주소 명령어 형식– 오퍼랜드의 수가 1 개인 명령어 형식– 오퍼랜드를 가져오거나 연산결과를 저장하기 위한

임시적인 장소로 누산기를 사용• LOAD A AC M[A]• ADD B AC AC+M[B]• STORE X M[X] AC

– 장점• 3 주소 명령어에 비해 명령어의 길이가 짧아짐

– 단점• 같은 내용을 수행하기 위한 명령어의 수가 증가

– 3 주소 (1 개의 명령어 ) Vs 1 주소 (3 개의 명령어 )

ADD A, B, X

R1

Page 13: 명령어의 구성

오퍼랜드 수에 따른 명령어 형식 -0 주소

• 0- 주소 명령어 형식– 기억장치 스택을 사용하며 주소 필드는 사용하지 않음

• TOS : 스택의 최상위• TOS-1 : 최상위의 바로 아래 항목

– 산술 연산의 수행• TOS-1 의 오퍼랜드를 가져와 연산을 수행한 후에 결과를 TOS 에

저장• 레지스터와 기억장치 주소를 사용하지 않음• PUSH A TOS M[A]• PUSH B TOS M[B]• ADD TOS TOS+TOS-1

• POP X M[X] TOS– 명령어의 길이가 짧아 기억공간을 적게 차지하나 많은

양의 정보가 스택과 주기억장치를 이동하므로 비효율적

ADD A, B, X

Page 14: 명령어의 구성

오퍼랜드 수에 따른 장단점

• 오퍼랜드 수가 많아질수록– 명령어가 복잡

• 레지스터의 수가 많아져 연산속도가 빨라짐• 프로그램이 짧아져 프로그램당 명령어 수가 감소

• 오퍼랜드 수가 적어질수록– 명령어가 간단

• 실행속도 증가• 프로그램 길이 증가

Page 15: 명령어의 구성

주소 지정 방식

• 주소지정방식– 프로그램 수행시 오퍼랜드의 지정 방법을 결정– 오퍼랜드를 실제 참조하기 전에 명령어의 오퍼랜드를

변경하거나 해석하는 규칙을 지정하는 형식 • 유효 주소

– 규칙의 적용에 의해 만들어진 오퍼랜드 주소– 주로 주소 필드의 값이 바로 오퍼랜드의 주소가 됨– 계산해야 할 때도 있음

• 별도의 연산필드를 가진 명령어 형식

연산코드 주소 혹은 오퍼랜드방식

– 연산코드 : 수행할 연산의 종류를 지정– 연산방식 : 연산에 필요한 오퍼랜드의 주소를 알아내는데 사용– 주소 필드 : 존재하면 기억 장치나 레지스터의 주소를 지정

Page 16: 명령어의 구성

의미 주소 지정 (implied mode)

• 주소필드를 필요로 하지 않는 방식– 연산코드에 지정된 묵시적 의미의 오퍼랜드를 지정

• 스택에서 ADD 와 같은 명령어는 스택의 TOS 항목과 그 아래 항목을 더하여 스택의 TOS 저장하는 명령어로서 오퍼랜드가 스택의 TOS 에 있다는 것을 묵시적으로 가정

• MUL X AC AC X M[X]– X 가 곱해지는 대상과 저장되는 위치가 모두 AC 인 것으로

묵시적 지정이 됨

• 장점– 오퍼랜드가 생략되므로 명령어의 길이가 짧아짐

• 단점– 명령어의 종류가 제한됨

Page 17: 명령어의 구성

즉치 주소 지정 (immediate mode)

• 오퍼랜드를 명령어 자체 내에 지정 – 오퍼랜드에 저장된 내용이 명령어에서 사용될 실제 데이터– 레지스터나 변수의 값을 초기화하는데 유용

• LDI 100, R1 R1 100– 레지스터 R1 에 데이터 100 을 초기화

• 장점– 오퍼랜드가 데이터이므로 기억장치 접근이 필요 없음

• 단점– 데이터의 크기가 오퍼랜드의 비트 수에 의해 제한

Page 18: 명령어의 구성

직접 주소 지정 (direct-addressing mode)

• 명령어의 주소필드에 직접 오퍼랜드의 주소를 저장시키는 방식 – 오퍼랜드에 저장된 내용이 가리키는 주소로 가야 실제

데이터• AC M[ADRS]• ADRS 의 값이 가지는 주소로 가서 실제 데이터를 가져다 AC

에 저장• 장점

– 기억장치를 한번만 접근• 단점

– 오퍼랜드의 길이에 의해 접근할 수 있는 기억장치의 주소공간에 한계가 있음

Page 19: 명령어의 구성

간접 주소 지정 (indirect-addressing mode)

• 명령어의 주소필드에 유효 주소가 저장되어 있는 기억장치의 주소를 기억 – 오퍼랜드가 가리키는 주소로 가서 다시 그 값이 가리키는 주소로

가야 실제 데이터• AC M[M[ADRS]] M[ADRS]• ADRS 의 값이 가지는 주소에서 다시 그 값을 주소로 하는 실제

데이터를 가져다 AC 에 저장• 장점

– 기억장치의 주소 공간이 CPU 가 한번에 접근할 수 있는 단어의 길이에 의해 결정

• 단점– 두 번의 기억장치 접근이 필요– 주소지정 방식을 나타내는 방식필드 (mode) 가 필요

• 직접 =0, 간접 =1

Page 20: 명령어의 구성

레지스터와 레지스터 간접주소지정 (register mode)

• 레지스터 방식– 오퍼랜드에 실제 오퍼랜드가 저장된 레지스터가 저장– 오퍼랜드에는 레지스터 번호가 저장 유효주소 = 레지스터번호 – 장점 : 오퍼랜드의 비트가 적고 레지스터를 접근하므로 고속– 단점 : 오퍼랜드가 중앙처리장치의 레지스터로 제한

• 레지스터 간접주소지정 방식– 레지스터가 실제 오퍼랜드가 저장된 기억장치의 주소 값을 갖고 있는

방식 • 오퍼랜드 자체가 아니라 오퍼랜드가 저장된 주소를 가짐• 유효 주소 = 지정된 레지스터에 있는 주소

– 자동 증가나 자동 감소 방식에 주로 사용– 장점 : 주소필드의 비트 수가 직접 주소를 지정하는 것보다 적다

Page 21: 명령어의 구성

상대 주소 지정

• 유효주소를 계산하기 위해 처리장치 내에 있는 특정 레지스터의 내용에 명령어 주소필드 값을 더하는 방식– 명령어가 지정하는 오퍼랜드가 다음 실행 명령어

위치에서 상대적으로 얼마만큼 위치에 있다는 의미– 분기형 명령어에서 주로 사용

• PC (program counter)– 상대 주소를 계산하기 위해 사용되는 레지스터– 다음에 실행될 명령어가 있는 곳의 주소를 가짐

• 유효주소의 계산 – 유효주소 = 명령어 주소부분의 내용 + PC 의 내용

• 명령어 주소 부분 : 부호 (+/-) 가 있는 수

Page 22: 명령어의 구성

인덱스된 주소 지정 (indexed mode)

• 인덱스된 주소지정– 인덱스 레지스터의 내용을 명령어 주소 부분에 더해서

유효주소 구함• 특정한 CPU 레지스터나 레지스터 set 중의 하나• 인덱스 레지스터는 명령어의 주소 영역에 대한 상대적인 위치

값을 가짐– 배열을 인덱싱할 때 주로 사용– 유 효 주 소 = 명 령 어 주 소 부 분 의 내 용 +

인덱스레지스터의 내용• 베이스 - 레지스터 모드

– 인덱스된 주소지정방식의 변형• 인덱스 레지스터 대신 베이스 - 레지스터를 사용• 베이스 레지스터는 베이스 주소를 가짐

Page 23: 명령어의 구성

주소지정 방식의 요약

주소지정 기호표기 레지스터 전송 주소 AC

즉치 LDA #NBR AC NBR 251 500

직접 LDA ADRS AC M[ADRS] 500 800

간접 LDA [ADRS] AC M[M[ADRS]] 800 300

상대 LDA $ADRS AC M[ADRS+PC] 752 600

인덱스 LDA ADRS(R1) AC M[ADRS+R1] 900 200

레지스터 LDA R1 AC R1 - 400

레지스터간접 LDA (R1) AC M[R1] 400 700

ADRS, NBR=500

다음 명령어

700

800

600

300

200

OP-code mode

기억장치

250251252

400

500

752

800

900

PC = 250

R1 = 400

AC

연산코드 : AC 에 적재하라

Page 24: 명령어의 구성

과 제

ADRS, NBR=200

다음 명령어

500

800

600

300

200

OP-code mode

기억장치

100101102

200

302

500

800

900

PC = 100

R1 = 200

AC

연산코드 : AC 에 적재하라

주소지정 주소 AC

즉치

직접

간접

상대

인덱스

레지스터레지스터간접

Page 25: 명령어의 구성

명령어의 종류

• 기본적인 명령어 집합– 데이터 전송명령어 – 데이터 처리명령어 – 프로그램 제어명령어

Page 26: 명령어의 구성

데이터 전송 명령어

• 2 진 정보의 내용을 변화시키지 않고 한 장소에서 다른 장소로 데이터를 전송하는 것– 레지스터간 , 레지스터와 기억장치간 , 기억장치간– 입출력 명령어가 포함

• 대표적인 명령어전송 명령어 니모닉 기 능Load LD 기억장치에서 레지스터로 전송Store ST 레지스터에서 기억장치로 전송Move MOVE 레지스터에서 다른 레지스터로 전송Exchange XCH 두 레지스터간 또는 레지스터와 기억장치간 데이터 교환Push PUSH 레지스터에서 스택으로 데이터 전송

Pop POP 스택에서 레지스터로 전송

Input IN 입력장치에서 레지스터로 전송Output OUT 레지스터에서 출력장치로 전송

Page 27: 명령어의 구성

데이터 처리 명령어

• 데이터에 대한 연산을 실행하고 컴퓨터에 계산 능력을 제공– 산술 명령어

• 사칙연산에 대한 산술 명령어를 제공• 1 증가 , 1 감소 , 2 의 보수 등의 연산을 포함

– 논리와 비트 처리 명령어• 레지스터나 기억장치에 저장된 단어에 대해 2 진 연산을 수행• 오퍼랜드 각 비트를 독립적으로 간주하며 각 비트를 부울식의 한

변수로 처리• Clear, Set, Complement, AND, OR, …

– 쉬프트 명령어• 오퍼랜드의 비트를 왼쪽이나 오른쪽으로 이동• 논리적 쉬프트 : 남는 비트는 0 으로 채움• 산술적 쉬프트 : 부호 비트는 고정 , 왼쪽은 부호로 오른쪽은 0

으로• 회전형 쉬프트 : 버려지는 비트는 반대쪽으로 순환

Page 28: 명령어의 구성

프로그램 제어 명령어

• 프로그램 명령어는 기억 장치에 연속적으로 저장됨– 제어장치에 의해 연속적으로 읽어 하나씩 처리

• 명령어를 가져올 때마다 PC 가 자동으로 1 씩 증가되어 다음 명령어의 주소를 갖게 됨

• 프로그램 제어 명령어의 수행– PC 의 값과 제어 흐름이 바뀜– 이전 계산 결과에 따라 흐름을 제어하거나 다른 프로그램 세그먼트로 분기할

수 있는 능력을 제공하기 때문에 가능

제어 명령어 니모닉 기 능Branch BR 조건 혹은 무조건적으로 유효 주소로 분기Jump JMP 조건 혹은 무조건적으로 유효 주소로 분기Skip SKP 조건이 만족되면 다음 명령어를 수행하지 않고 넘어감Call CALL 서브루틴 호출Return RET 서브루틴 실행 후 복귀Compare CMP 두 오퍼랜드의 뺄셈을 통해 상태 레지스터의 값을 변환Test TEST 논리 AND 연산만 구현


Recommended