Don't Look Back In Anger

탑스팟 컴퓨터일반 14. 명령어 본문

IT/탑스팟 컴퓨터일반

탑스팟 컴퓨터일반 14. 명령어

버로나 2022. 2. 18. 14:59

<명령어의 구성>

연산자부 (Op-Code)
번지부 = 자료부 (Operand)

EX) ADD → 연산자부

5, 7 같은 숫자 or 숫자가 기억되어 있는 번지의 주소 → 번지부

(1) 연산자부 (Operation Code, Op-Code)

- 수행해야 할 동작에 맞는 연산자를 표시하며 흔히 Op-Code부라고 함

- 연산자부의 크기(비트 수)는 표현할 수 있는 명령의 종류를 나타내는 것으로, nBit 일 때 최대 2개의 명령어를 사용할 수 있음

- 연산자부에는 주소부의 유효 주소가 결정되는 방법을 지정하기 위한 모드 비트를 추가하기도 함 (0 : 직접, 1 : 간접)

(2) 번지부 = 자료부 (Operand)

- 자료부는 실제 데이터에 대한 정보를 표시하는 부분으로 주소 필드(Address field)라고도 함

- 기억장소의 주소, 레지스터 번호, 사용할 데이터 등을 표시함

- 자료부의 크기는 메모리의 용량과 관계가 있음 (자료부의 크기만큼 번지수를 지정할 수 있으므로)

https://youtu.be/1pRwA1Be4Hw

 

<명령어의 형식>

(1) 0-주소 명령어 형식 → 스택

연산자
Op-Code

- 자료의 주소를 지정하는 Operand부 없이 Op-Code부만으로 구성되어 있음

- 모든 연산은 Stack 메모리의 Stack Pointer가 가리키는 Operand를 이용하여 수행함

- 모든 연산은 스택에 있는 자료를 이용하여 수행하기 때문에 스택머신(Stack Machine)이라고도 함

- 스택에 기억된 데이터만을 이용하여 연산하므로 인스트럭션 수행시간이 짧음

- 피연산자를 나타내지 않기 때문에 인스트럭션의 길이가 짧아서 기억공간의 이용이 효율적임

- 스택을 사용한 컴퓨터에서 수식을 계산하기 위해서는 우선 수식을 Postfix(역polish) 형태로 변경하여야 함

- 연산자와 피연산자를 스택에 넣었다 꺼내어 연산한 후 결과를 다시 스택에 넣으면서 연산하기 때문에 원래의 자료가 남지 않음

EX) X = 4 + 5

0주소 명령어는 스택을 사용하기 때문에 후위식으로 변환해야 한다.

X45+=

push X → push 4 → push 5 → ADD → pop X

5 9 X = 9

4 4 X

X X X

* 스택의 응용분야

- 0주소 명령어 형식의 자료 저장소

- 부 프로그램 호출 시 복귀주소

- 인터럽트가 발생시의 복귀주소

- 재귀(Recursion) 프로그램의 순서 제어

- 컴파일러를 이용한 언어 번역 시

- 후위 표기법(Postfix Notation)으로 표현된 산술식을 연산할 때

https://youtu.be/0lPlSgrEloc

(2) 1-주소 명령어 형식 → 누산기

연산자
Op-Code
자료1 주소
Operand1

 

- 오퍼랜드를 한 개만 포함하는 명령어로서, 오퍼랜드는 주소를 저장함

- 모든 데이터 처리가 누산기(AC : Accumulator)에 의해 이루어지는 형식

EX) LOAD X; AC ← M[X]

X번지의 데이터를 누산기에 저장해라

(3) 2-주소 명령어 형식

연산자
Op-Code
자료1 주소
Operand1 / 결과 주소
자료2 주소
Operand2

- Operand부가 두 개로 구성되는, 가장 일반적으로 사용되는 명령어 형식

- 여러 개의 범용 레지스터(GPR)를 가진 컴퓨터에서 사용됨

장점
단점
- 3주소 명령에 비해 명령어의 길이가 짧음
- 계산 결과가 기억장치에 기억되고 중앙처리장치에도 남아 있어서 계산 결과를 시험할 필요가 있을 때 시간이 절약됨
- 연산의 결과는 주로 Operand 1에 저장되므로 Operand 1에 있던 원래의 자료가 파괴됨

EX) Y = (A + B) * (C + D)

A = 10, B = 20, C = 30, D = 40 이라고 가정

MOV R1 A; R1← M[A] R1 = 10

ADD R1 B; R1 ← R1 + M[B] R1 = 30

MOV R2 C; R2 ← M[C] R2 = 30

ADD R2 D; R2 ← R2 + M[D] R2 = 70

MUL R1 R2; R1 ← R1 * R2 R1 = 2100

MOV Y R1; M[Y] ← R1 Y = 2100

https://youtu.be/pEvxO3U2gFM

 

(4) 3-주소 명령어 형식