본문 바로가기

CS/컴퓨터구조(Mano)

[컴퓨터구조] ch.4 레지스터 전송과 마이크로 연산 (4) 시프트 마이크로 연산

Mano의 컴퓨터시스템구조 제3판, 프로텍 미디어, 김종상 옮김 도서를 정리, 요약하는 글입니다.

 

1. 시프트 마이크로 연산

- 데이터 직렬 전송을 위해서 사용되며, 산술이나 논리 및 연산 및 다른 데이터 처리 동작과 연계하여 사용될 수도 있다.

- 레지스터의 내용은 왼쪽 및 오른쪽으로 시프트될 수 있으며, 비트들이 시프트될 때 첫 번째 플립플롭은 직렬 입력을 통하여 새로운 이진 정보를 받아들일 수 있다. 

- 직렬 입력을 통하여 입력되는 정보에 따라 시프트의 종류가 나뉘어지며 논리, 순환, 산술 등의 세 가지 종류가 있다.

 

2. 시프트 마이크로 연산 종류

사진 출처 : https://upscfever.com/upsc-fever/en/gatecse/en-gatecse-chp153.html

 

(1) 논리 시프트 (shl, shr)

- 직렬 입력으로 0이 전송되는 것.

- 왼쪽 시프트는 shl, 오른쪽 시프트는 shr

   ex) R1 ← shl R1 : R1을 한 비트 왼쪽으로 시프트

   ex) R2 ← shl R2 : R2를 한 비트 오른쪽으로 시프트

- 시프트 되어 나간 비트는 버린다.

 

(2) 순환 시프트 (cil, cir)

- 시프트 레지스터의 직렬 출력을 직렬 입력에 연결함으로써 원래 저장되어 있던 정보의 손실 없이 비트들을 순환시키는 연산

- 왼쪽 시프트는 cil, 오른쪽 시프트는 cir

 

(3) 산술 시프트(ashl, ashr)

- 부호가 있는 이진수를 시프트이다. 왼쪽 산술 시프트는 이진수에 2를 곱한 것이고, 오른쪽 산술 시프트는 이진수에 2를 나눈 것과 같다. 따라서 산술 시프트는 논리 시프트와 다르게 비트를 단순히 이동시키는 것이 아니라 부호를 유지해야 하는 경우는 부호 비트를 빼고 시프트한다.

 

사진 출처 : https://upscfever.com/upsc-fever/en/gatecse/en-gatecse-chp153.html

 

사진 출처 : 위키백과

- 위 그림은 오른쪽 산술 시프트이다. 오른쪽 산술 시프트에서 이진수의 맨 왼쪽 비트(Rn-1)는 부호 비트이므로 시프트되지 않는다. 즉 부호는 변함이 없다. 최상위 비트(MSB)인 Rn-2에서 R0까지 오른쪽으로 시프트되고 기존의 R0 비트값은 버린다. 오른쪽 산술 시프트는 이진수에 2를 나눈 것과 같으므로 부호 비트를 유지하면서 나머지 비트만 시프트하여 부호를 보존한다.

 

 

 

사진출처 : 위키백과


- 반대로 왼쪽 산술 시프트에서는 R0에 0을 삽입하고, 나머지 상위 비트들을 왼쪽으로 시프트한다. 이는 왼쪽 논리 시프트와 똑같다. 이렇게 시프트하면 원래의 Rn-1 값은 Rn-2값으로 치환된다. 둘이 서로 다른 값이였다면 부호가 반전되고 이것은 원래 레지스터의 값에 2를 곱하면 오버플로가 일어났음을 의미한다. 왼쪽 산술 시프트는 모든 비트를 시프트하여 값을 이진수에 2를 곱하며, 부호 비트의 변화를 감지하여 오버플로우를 확인한다.
Vs = Rn-1 Rn-2 하여 Vs = 1일 때, 부호 반전이 일어났으므로 오버플로임을 알게 되고 Vs 값은 오버플로 플립플롭으로 전송된다. 

 

 

3. 하드웨어 구현

사진 출처 : https://upscfever.com/upsc-fever/en/gatecse/en-gatecse-chp153.html

 

- 시프트 장치를 구현하기 위해서 데이터를 레지스터에 로딩하기 위해서 클럭 펄스와 시프트 연산을 수행하기 위한 클럭펄스가 필요하다. 그런데 레지스터가 많으면 조합 회로를 가지고 구현하는 것이 낫다. 조합회로로 구현하면 하나의 클럭펄스만으로 가능하다. 하나의 클럭 펄스에 시프트 될 레지스터의 내용을 조합 회로 시프터에 연결된 공통 버스에 선택하여 올릴 수 있다.

- 위 그림으로 S = 0일 경우, 모든 MUX의 0이 선택되므로 H0는 IR, H1은 A0, H2은 A1, H3은 A2가 출력되므로 그림의 아래쪽 방향으로 시프트가 된다. 반대로 S = 1일 경우, 모든 MUX의 1이 선택되므로 H0는 A1, H1는 A2, H2는 A3, H3는 IL이 출력되므로 그림에서 위쪽 방향으로 시프트된다.