Worth spreading

Shift microoperation 본문

Computer science/Computer System Architecture(컴퓨터구조)

Shift microoperation

annual 2017. 4. 1. 21:39

Shift microoperation


 시프트 마이크로 연산은 데이터의 직렬 전송을 위하여 사용되며, 산술이나 논리 연산 및 다른 데이터 처리 동작과 연계하여 사용될 수도 있다.


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


연산은 세 가지로 나뉘는데 직렬 입력을 통하여 입력되는 정보에 따라 나뉜다.


1. logical shift 

 논리 시프트는 왼쪽 오른쪽 시프트 연산이 수행된 후 비워진 공간에 0이 삽입되는 시프트 연산이다.

 예를 들어 R = 11001110 이라고 가정했을 때 왼쪽 논리 시프트 연산이 1번 수행되면 R = 10011100이 된다.


2. circular shift(or rotate shift)

 순환 시프트는 시프트 연산의 직렬 출력이 직렬 입력에 직접 연결시켜서 원래 저장되어 있던 정보의 손실 없이 비트들을 순환시키는 연산이다.

 예를 들어 R = 11001110 이라고 가정했을 때 왼쪽 순환 시프트 연산이 1번 수행되면 R = 10011101이 된다.


3. arithmetic shift

 산술 시프트는 부호가 있는 이진수를 시프트하는 것이다. 따라서 왼쪽 산술시프트는 이진수에 2를 곱한 것이고, 오른쪽 산술 시프트는 2로 나눈 것과 같다.

또, 산술 시프트에서 이진수의 맨 왼쪽 비트인 부호 비트는 시프트되지 않으므로 변화가 없다.


 그런데 여기서 주의해야 할 점이 있다. 오른쪽 산술 시프트 연산이 수행될 경우 부호 비트에는 아무런 영향을 주지 않지만 왼쪽 산술 시프트 연산은 부호비트 오른쪽 비트의 값이 기존의 부호비트 값을 덮어쓴다. 따라서 기존의 두 값이 다르다면 2를 곱한 값이 아닌 다른 값이 나오게 된다.


 예를 들어 R = 11001110 이라고 가정했을 때 왼쪽 시프트 연산을 한번 수행하면 R = 10011100으로 예상대로 2를 곱한 값이 출력되게 된다.

하지만 여기서 한번 더 왼쪽 시프트 연산을 수행하게 되면 R = 00111000이 되고 이렇게 되면 8비트로 표현할 수 있는 수의 범위를 넘어가서 오버플로가 일어나게 된다.



An extract from 'Computer System Architecture, Mano, 3rd ed.'

Comments