일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 프라미스
- react-cookie
- image restoration
- 인페인팅
- Hits
- cs231n
- feynman's restaurant
- computer vision
- 협업필터링
- tcp
- 파인만의 식당문제
- 파이썬
- 인공지능
- 커널제거
- 딥러닝
- 키분배 알고리즘
- Readme image
- Git
- 머신러닝
- 비동기 프로그래밍
- 자바스크립트 비동기
- 컴퓨터 보안 키분배
- recommender
- 커널생성
- 러스트
- 페이지랭크
- pagerank
- brew 권한
- 메세지인증코드
- rust
- Today
- Total
Worth spreading
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.'
'Computer science > Computer System Architecture(컴퓨터구조)' 카테고리의 다른 글
Application of Logical microoperation (0) | 2017.04.01 |
---|