마이크로 연산이란 레지스터에 저장된 데이터에 대해 수행되는 기본적인 연산이다.
크게는 네가지로 나눌 수 있다.
1) 레지스터 전송 마이크로 연산
2) 산술 마이크로 연산
3) 논리 마이크로 연산
4) 시프트 마이크로 연산
1),2) 는 이전 포스팅을 참고하면 된다.
https://programming-hee.tistory.com/5

[컴퓨터구조] 산술 마이크로 연산
3) 논리 마이크로 연산
논리 마이크로 연산은 레지스터에 저장된 비트열에 대한 이진 연산으로 각 비트를 독립된 이진 변수로 간주하고 연산을 수행한다.
간단히 말하면 레지스터에 들어있는 값을 산술적으로 보지 않고, 비트연산을 수행한다는 뜻이다.
비트 연산은 대표적으로 AND, OR, XOR, complement가 있다.
그렇다면 산술 마이크로 연산과 다르게 논리 마이크로 연산은 어디에 사용되게 되는 것일까?
레지스터 안에 들어있는 값들로 논리 연산을 수행할 수 있지만,
제어함수에서 보통 많이 사용된다.
제어함수란 레지스터 전송을 수행할 때, 일종의 조건 같은 것이다.
예를들자면
P+Q : R1 <- R2
위와 같은 레지스터 전송은 P+Q라는 조건이 만족되면 수행된다.
이때 P+Q는 우리가 평소에 생각하는 덧셈의 산술이 아니라, 논리 연산 OR을 뜻하게 된다.
이처럼 제어함수 자리에서 논리 마이크로 연산이 많이 사용된다.
논리 마이크로 연산은 다음과 같이 많은 연산들(총 16개)이 존재하지만,
하드웨어적으로 구현할 때는 오직 AND, OR, XOR, complement만 사용한다.

참고 - 논리 마이크로 연산 (16가지)
따라서 4가지 논리 연산만 구현한 회로는 다음과 같다.

논리 회로의 한 단
위 그림은 1비트 A, B를 논리 연산하는 회로를 표현한 것이다.
너무 간단하기 때문에 위 그림으로도 충분한 설명이 될것이다.
4) 시프트 마이크로 연산
시프트 마이크로 연산은 데이터의 직렬 전송을 위해 사용되며, 산술이나 논리 연산 및 다른 데이터 처리 동작과 연계하여 사용될 수 있다.
시프트의 종류 또한 3가지가 존재한다
- 논리 시프트 logical shift
- 순환 시프트 circular shift / rotate shift
- 산술 시프트 arithmetic shift
먼저 논리 시프트란
직렬 입력으로 0이 전송되는 것으로, 기호로는 shl, shr로 표현한다.
당연히 shl = shift left, shr = shift right 이겠다.


순환 시프트는 시프트 레지스터의 직렬 출력을 직렬 입력에 연결함으로써 원래 저장되어 있던 정보의 손실 없이 비트들을 순환시키는 연산을 말한다.
말이 어렵지만 그림으로 이해하는 것이 빠르다.

산술 시프트는 부호가 있는 이진수를 시프트 하는것이다.
참고로 shift right 1bit는 2로 나눈 효과가, shift left 1bit는 2를 곱한 효과가 있다.
이에 대한 자세한 내용은 비트 연산에 대해서 찾아보길 바란다.
따라서 산술 시프트는 숫자 자체가 중요하므로 부호를 살려둘 필요가 있다.
따라서 가장 왼쪽에 있는 부호 비트는 시프트 되지 않도록 한다.

위는 산술 shift right를 나타낸 것이다.
부호 비트는 변하지 않고 그 아래 비트들만 shift되는 것을 확인할 수 있다.
하지만 shift left를 수행하게 되면 부호 비트(Rn-1)는 그 전 비트(Rn-2)로 치환된다.
(산술 시프트면 부호를 살려줘야 하므로 그 전 비트 Rn-2는 그냥 버려야 하는거 아닌가?! .. 사실 나도 이건 왜 이렇게 되는지 잘 모르겠당..ㅎ)
따라서 만약 치환된 비트와 치환되기 전 비트가 다르다면 부호 비트가 반전이 되므로 원래 레지스터의 값에 2를 곱하여 오버플로가 나타났음을 의미하게 된다.
이를 통해서 왼쪽 산술 연산에 의해 오버플로를 탐지할 수 있다.
시프트 장치의 하드웨어 구현은 다음과 같다,

위의 그림과 표를 참고하여 입력값을 잘 따라가면 이해할 수 있을 것이다.
하지만 구체적인 과정을 그림으로 보자면 다음과 같다.

(좌) shift right / (우) shift left
왼쪽 그림은 shift right 과정을 , 오른쪽 그림은 shift left 과정을 표현하였다.
'Computer Science > 컴퓨터 구조' 카테고리의 다른 글
[컴퓨터 구조] 산술 논리 시프트 장치 (ALU) (0) | 2021.06.25 |
---|---|
[컴퓨터 구조] 산술 마이크로 연산 (0) | 2021.06.25 |
[컴퓨터구조] 버스와 메모리 전송(multiplexer, 3 state buffer) (0) | 2021.06.25 |
[컴퓨터 구조] 레지스터 전송 (0) | 2021.06.25 |
[컴퓨터구조] 부동소수점(10진수 2진수) (0) | 2021.06.25 |