Computer Science/컴퓨터 구조

컴퓨터의 논리연산

Luinesse 2024. 1. 8. 13:33
반응형

논리 연산

컴퓨터 내의 논리적 데이터는 단어 내의 각 비트 단위로 의미를 가지고, 연산 또한 비트 단위로 처리됩니다.

ex) A = 0, B = 1 과 같이 비트 단위로 주어지고 OR, AND, XOR, NOT의 연산 수행

 

이를 위해서 H/W Module은 4X1 멀티 플렉서에 OR, AND, XOR, NOT 수행결과를 선택 신호에 의해 선택하여 출력하는 방식으로 구성됩니다.

 

기본적인 논리연산

먼저 AND 연산입니다.

AND 연산은 두 비트를 비교해 모두 1인 경우 결과 데이터의 비트는 1로 세트되고, 둘 중 하나라도 0이라면, 0이 세트됩니다. 이 결과 데이터 비트는 논리 데이터이므로, TRUE, FALSE의 논리적 의미를 가집니다.

 

다음으로 OR 연산입니다.

OR 연산은 두 비트를 비교해 모두 0인 경우 결과 데이터의 비트는 0으로 세트되고, 둘 중 하나라도 1이라면, 1이 세트됩니다.

 

세번째로 XOR 연산입니다.

XOR 연산은 두 비트를 비교해 두 비트값이 다르다면 결과 데이터의 비트를 1로 세트하고, 두 비트값이 같다면 0이 세트됩니다. ex) (A = 0, B = 1 result : 1), (A = 0, B = 0, result = 0)

 

마지막으로 NOT 연산입니다.

NOT 연산은 데이터 단어의 모든 비트들을 반전시킵니다. ex) A = 0, result = 1

 

응용 논리 연산

위의 기본적인 논리연산 외에도 필요에 따라 적절히 사용한 응용 논리 연산이 있습니다.

 

먼저 선택적 세트 연산입니다.

해당 연산은 데이터에서 특정 부분을 1로 세트하기 위한 연산입니다.

ex)

A 10010010

B 00001111

을 OR 연산하여 A 데이터 비트의 우측 4비트를 1로 세트합니다.

 

다음으로 선택적 보수 연산입니다.

해당 연산은 데이터에서 특정 부분을 반전(보수)시키기 위한 연산입니다.

ex)

A 10010101

B 00001111

을 XOR 연산하여 A 데이터 비트의 우측 4비트를 반전시킵니다.

 

다음으로 마스크 연산입니다.

마스크 연산은 데이터 비트의 특정 부분을 0으로 세트하기 위한 연산입니다.

ex)

A 11010101

B 00001111

을 AND 연산하여 A 데이터 비트의 좌측 4비트를 0으로 세트합니다.

 

마지막으로 삽입 연산입니다.

삽입 연산은 데이터 비트에서 일부 비트를 새로운 값으로 대체하기 위한 연산으로, 두 단계로 이루어집니다.

먼저, 마스크 연산을 통해 바꾸고자 하는 비트를 0으로 세트합니다.

그리고, 0으로 세트된 부분에 OR 연산을 수행합니다. (선택적 세트 연산)

ex)

A 10010101

B 00001111

를 AND 연산하여 만든결과

A 00000101 을 OR 연산합니다.

B 11100000

그 결과 11100101 을 만들어냅니다.

 

시프트 연산

시프트 연산에는 크게 4가지가 있습니다.

  • 논리적 시프트
  • 순환 시프트
  • 산술적 시프트
  • C 플래그를 포함한 시프트

먼저 논리적 시프트입니다.

논리적 시프트는 레지스터 내의 데이터 비트들을 왼쪽 혹은 오른쪽으로 한 칸씩 이동하는 연산을 말합니다.

이 경우, 밀게 되면서 기존의 최상위 비트 혹은 최하위 비트는 버려지게 됩니다. (후술할 산술적 시프트에서는 부호 비트때문에 조금 다르게 연산)

 

다음으로 순환 시프트입니다.

순환 시프트는 논리적 시프트에서 최상위 비트 혹은 최하위 비트를 반대편 끝의 위치한 비트로 들어가게합니다. 논리적 시프트에서는 0을 반대편 끝에 넣게 수행했다면, 순환 시프트에서는 최상위 비트 혹은 최하위 비트가 들어갑니다.

 

논리적 시프트와 순환 시프트를 활용하여 직렬 데이터 전송이 가능합니다.

ex) 4bit 레지스터 A에 순환 시프트를 클록당 1회, 4bit 레지스터 B에 논리적 시프트를 클록당 1회를 수행하여 총 4회 했을 때,  A 레지스터와 B 레지스터 간 연결된 선을 통하여 한번에 한비트씩 받는 작업을 수행할 수 있습니다. 

 

세번째로 산술적 시프트입니다.

산술적 시프트는 데이터 값이 부호를 가진 정수인 경우, 부호 비트를 고려하여 수행하는 시프트입니다. 해당 연산에서는 부호 비트는 불변으로 고정됩니다.

 

마지막으로 C 플래그를 포함한 시프트 연산입니다.

이 경우, 시프트 연산에 올림수(Carry) 플래그가 포함됩니다. 이때, 최상위 비트, 최하위 비트가 넘쳤을 때 Carry 플래그에 값을 저장하게 하여 회전하게끔 구현 가능합니다. (Rotate Left with Carry, Rotate Right with Carry)

RLC, RRC는 방향마 다르고 동작은 같습니다.

반응형