본문 바로가기

CS Knowledge/Computer Structure

Computer Structure - CPU(2)

'최신 컴퓨터 구조' 임석구, 홍경호를 참고하였습니다.

 

 

4. 컴퓨터 명령어

5. 주소 지정 방식

 

 

컴퓨터 명령어

- 연산코드, 오퍼랜드, 피연산자의 위치, 연산결과의 저장 위치 등 여러가지 정보로 구성

 

 

1. 명령어 형식

 

예시 : Z=(B+C)xA 구현

 

1) 0-주소

PUSH B

PUSH C

ADD

PUSH A

MUL

POP Z

 

2) 1-주소 (누산기 관련)

LOAD B

ADD C

MUL A

STOR Z

 

3) 2-주소

MOV R1 B

ADD R1 C

MUL R1 A

MOV Z R1

 

4) 3-주소

ADD R1, B, C

MUL Z, A, R1

 

 

 

2. 명령어 형식 설계 기준

 

1. 명령어 길이 

2. 명령어 형식의 공간

3. 주소필드의 비트 수

 

 

3. 확장 opcode

- 연산 코드의 비트 수와 주소비트의 수의 비율로 명령어 수와 메모리 크기를 조절 가능하다. 

 

예시1) 8비트 연산 코드와 24개의 주소비트를 가지는 32비트 명령어

-> 명령어 256개, 2의24승 메모리

 

예시2) 명령어 길이 16비트, 오퍼랜드 4비트 시스템을 대상으로 명령어 설계를 하려고 할 때, 

3-주소 명령어는 14개, 2-주소 명령어는 30개, 1-주소 명령어는 31개, 0-주소 명령어는 16개가 필요하다면 어떻게 설계를 할것인가?

 

설계)

3-주소 : 0000 ~ 1101

2-주소 : 1110 0000 ~ 1111 1101

1-주소 : 1111 1110 0000 ~ 1111 1111 1110

0-주소 : 1111 1111 1111 0000 ~ 1111 1111 1111 1111

 

 

4. 명령어 종류 (ISA)

 

 1. 데이터 이동 명령

2. 2항 연산

3. 단항 연산

(더 있지만 생략)

 

 

1. 데이터 이동 명령 (LOAD, STORE, MOVE)

- 원본과 동일한 새로운 객체를 다른 장소에 복사본으로 생성

- 데이터를 복사하는 이유

-> 변수에 값 할당을 하기 위해서 (A=B, B의 값을 주소 A에 복사) 

-> 메모리와 레지스터간 데이터를 이동하여 데이터의 효율적인 액세스 및 사용을 하기 위해서

 

 

2. 2항연산

- 오퍼랜드 2개를 합쳐서 생성

사용 예시

1) AND -> 워드에 특정비트를 추출하는 용도

8비트 문자 총 4개, 32비트 워드에서 3번째 문자만 남기고 나머지는 제거한다면?

-> 세번째문자에만 11111111로 AND 나머지는 0으로 AND하고 오른쪽 8비트 시프트하여 결과를 만든다.

2) OR -> 원하는 위치에 값 교체

위와 같은 상황에서 마지막 8비트 A를 C로 교체한다면?

-> 마지막 비트만 0으로 설정된 B와 A를 AND 처리하고 교체하려는 C와 OR처리

 

 

3. 단항연산

- 오퍼랜드 1개, 결과도 1개

- 시프트(비트를 왼쪽, 오른쪽으로 이동), 회전(시프트와 같지만 한쪽 끝을 반대로 옮겨 손실이 없는 구조)

 

특징

- 오른쪽 시프트시 음수인 경우, 첫번째 비트 계속 1처리

- 시프트는 특정 산수 연산의 속도를 높이는 데 사용된다.

- 회전연산으 모든 비트 테스트를 할 경우 사용된다.

 

 

 

주소 지정 방식

 

1. 즉시 주소 지정

- 명령어안에 오퍼랜드(주소)를 설정

- 명령어 호출시 오퍼랜드도 자동으로 인출

ex) MOVE R1 4

장점 : 오퍼랜드 인출을 위한 메모리 참조가 필요가 없다.

단점 : 상수만 가능

 

 

2. 직접 주소 지정

- 주기억 장치의 주소를 통해 오퍼랜드 설정

ex) LOAD 0x8C30

 

 

3. 레지스터 주소 지정

- 직접 주소 지정과 같지만 그 위치가 레지스터

ex) opcode R12 R7

 

 

4. 레지스터 간접 주소 지정

- 포인터를 통해 레지스터의 데이터 주소가 주기억장치의 데이터를 가리키게 만들어 간접적으로 메모리 참조하게 만드는 방식

ex) opcode R1 (R7) -> R7은 레지스터에 있지만 이는 실제 메모리의 주소와 포인터로 연결되어 있음

 

 

메모리에 저장된 1차원 배열 A의 요소 100개를 더하는 예제 (각 요소는 4바이트의 크기를 갖는다)

 

 

5. 변위 주소 지정

- 특정 레지스터에 저장된 주소에 변위를 더해 메모리 위치 지정

- 결과는 주 메모리의 인덱스, PC등 다양한 위치 + 변위

ex) opcode R1 변위

-> if 레지스터 주소 R1=0, 변위=400 일 때, 메모리 주소는 400이 됨.

 

 

5-1) 인덱스 주소 지정