Shift microoperation
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.'