CS/컴퓨터 구조론

컴퓨터 구조론 3장 [컴퓨터 산술과 논리 연산2]

devrabbit22 2025. 3. 24. 14:38

논리연산

ALU가 수행하는 기본적인 연산으로는 산술 연산과 논리 연산이 있다. 컴퓨터가 처리하는 데이터의 형태들 중에서 수(number)를 나타내는 데이터는 단어(word) 단위로 취급된다. 만약 데이터 단어의 길이가 16비트라면, 모든 산술적 연산은 16-비트 단위로 수행된다. 반면에 논리적 데이터(logicaldata에서는 단어 내의 각 비트 단위로 의미를 가지며, 연산도 비트 단위로 처리된다.

두 개의 비트 A와 B에 대하여 처리될 수 있는 기본적인 논리 연산

비트 단위의 논리 연산들을 위한 하드웨어 모듈

논리 연산을 위한 하드웨어 모듈

입력 비트들은 일단 모든 게이트들을 통과하여 각 논리 연산의 출력을 발생한다. 그리고 두 개의 선택 신호들에 의해 선택된 연산의 출력만 4X1 멀티플렉서의 출력으로 나가게 된다.

n-비트 데이터들에 대하여 위와 같은 논리 연산들을 수행하는 장치는 같은 모듈을 n개 이용하여 구성할 수 있다.

ex) 4-비트 데이터를 위한 논리 연산장치

4-비트 논리 연산장치

각 논리 모듈로는 두 단어에서 같은 위치에 있는 비트들이 입력되며, 연산 선택 신호인 S1과 S2는 모든 모듈에 공통으로 인가된다. 논리 연산에서는 대응되는 비트들 간에 독립적으로 연산이 수행되므로 모듈간의 데이터 전송 통로는 필요하지 않다.

실제 CPU에서는 논리 연산들 외에도 다양한 연산들이 제공되기 떄문에 모듈은 더욱 확작된다. 

단어의 길이가 32비트인 CPU에 포함되는 ALU에는 그러한 모듈들 32개가 배열된다. 

논리연산들은 레지스터에 저장된 데이터 단어의 전체가 아닌 일부 비트들에 대해서만 수행할 수 도 있으며, 일부 비트들의 값을 변경하는데도 유용하게 사용될 수 있다.

 

대표적인 몇 가지 논리 연산들이 수행되는 과정

AND 연산

  • 두 개의 데이터에서 같은 위치에 있는 비트들 간에 AND 연산을 수행하는 것이다. 즉, 두 비트들이 모두 1인 경우에는 결과 데이터의 해당 비트가 1이 되고, 어느 하나라도 0이면 그 비트는 0이된다.
  • 이 연산에서 처리되는 데이터들은 논리 데이터(logical data)이다.

각 비트의 두 개의 레지스터들(A 및 B)에 저장되어 있는 8비트-데이터들 간에 AND 연산

A  = 1 0 1 1 0 1 0 1
B  = 0 0 1 1 1 0 1 1
------------------------
         0 0 1 1 0 0 0 1 (연산 결과)

OR 연산

  • 두 개의 데이터에서 같은 위치에 있는 비트들 간에 OR 연산을 수행하는 것이다.
  • 비트들 중의 어느 하나만 1이먄면 결과 데이터의 해당 비트가 1이 되고, 두 비트들 이 모두 0이면 0이된다.\

각 비트의 두 개의 레지스터들(A 및 B)에 저장되어 있는 8비트-데이터들 간에 OR연산

A = 1 0 0 1 0 1 0 1
B = 0 0 1 1 1 0 1 1
-----------------------
      1 0 1 1 1 1 1 1  (연산결과)

XOR 연산

  • 두 개의 데이터에서 같은 위치에 있는 비트들 간에 exclusive-OR 연산을 수행하는 것이다.
  • 두 비트들이 서로 다른 값을 가지면 결과 데이터의 해당 비트가 1이 되고, 같은 값을 가지면 그 비트는 0이 된다. 

각 비트의 두 개의 레지스터들(A 및 B)에 저장되어 있는 8비트-데이터들 간에 XOR연산

A = 1 0 0 1 0 1 0 1
B = 0 0 1 1 1 0 1 1
------------------------
       1 0 1 0 1 1 1 0 (연산 결과) 

NOT 연산

  • 데이터 단어의 모든 비트들이 반전(invert)된다. 즉, 비트의 값이 1이면 0으로, 0이면 1로 바뀐다.

A 레지스터에 저장되어 있는 데이터에 한하여 NOT 연산을 수행하는 예시

A = 1 0 0 1 0 1 0 1 (연산전)
-------------------------------
       0 1 1 0 1 0 1 0 (연산 결과)

선택적-세트 연산(selective-complement)

  • 데이터의 일부 비트들을 1로 세트해주는 논리적 연산
  • 데이터의 특정 비트들을 1로 세트해주기 위한 동작으로서, 데이터가 저장된 A레지스터와 세트될 비트들의 위치를 지정해주는 B 레지스터 간에 OR 연산을 수행하면 된다.
  • 이 연산이 수행되면, B레지스터의 비트들 중에서 값이 1인 비트들과 같은 위치에 있는 A 레지스터의 비트들이 1로 세트된다. 그러나 B레지스터에서 값이 0인 비트들의 위치에 대응되는 A레지스터의 비트들은 변화가 없다.

A 레지스터의 하위 네 비트들을 모두 1로 세트하고, 상위 네 비트들은 원래의 값을 그대로 유지시키는 연산의 예 이다.

A = 1 0 0 1 0 0 1 0 (연산 전)
B = 0 0 0 0 1 1 1 1
--------------------------
A = 1 0 0 1 1 1 1 1 (연산 결과)

선택적-보수 연산(selective-complement)

  • 데이터의 일부 비트들을 보수화 시키는 논리적 연산
  • 데이터 내 특정 비트들의 값을 보수화(1->0, 0->1) 하기 위한 동작으로서, 데이터가 저장된 A 레지스터와 반전시킬 비트들의 위치를 지정해주는 B레지스터 간의 XOR 연산을 수행하면 된다.
  • 이 연산이 수행되면, B레지스터의 비트들 중에서 값이 1인 비트들과 같은 위치에 있는 A레지스터의 비트들은 반대되는 값으로 바뀌게 된다. 그러나 B 레지스터에서 값이 0인 비트들의 위치에 대응되는 A레지스터의 비트들은 변화가 없다.

A 레지스터의 하위 네 비트들을 모두 반전시키고, 상위 네 비트들은 원래의 값을 그대로 유지시키는 선택적-보수 연산의 예를 보여준다.

A  = 1 0 0 1 0 1 0 1 (연산 전)
B  = 0 0 0 0 1 1 1 1
--------------------------
A = 1 0 0 1 1 0 1 0 (연산 결과)

마스크(masking) 연산

  • 데이터의 일부 비트들을 0으로 리셋시키기 위한 논리적 연산
  • 데이터 내 특정 비트들으리 값을 0으로 리셋시키기 위한 동작으로서, 데이터가 저장된 A레지스터와 리셋 될 비트들의 위치를 지정해 주는 b레지스터 간에 AND 연산을 수행하면 된다.
  • 이 연산이 수행되면, B레지스터의 비트들 중에서 값이 0인 비트들과 같은 위치에 있는 a레지스터의 비트들은 0으로 리셋된다. 그러나 B레지스터에서 값이 1인 비트들의 위치에 대응되는 A레지스터의 비트들은 변화가 없다. 

A레지스터의 상위 세 비트의 값을 모두 -으로 리셋시키고, 하위 다섯 비트들은 원래의 값을 그대로 유지시키는 마스크 연산이 수행되는 예

A = 11010101 (연산전)
B = 00001111
----------------------------
A = 00000101 (연산결과)

삽입(insert) 연산

  • 데이터의 일부 비트들을 새로운 값들로 대체시키기 위한 논리적 연산
  • 데이터 내의 일부 비트들을 새로운 값들로 대체시키기 위한 동작으로서, 두 단계로 이루어진다.
  • 첫 번째 단계에서는 삽입하고자 하는 비트들에 대하여 마스크 연산을 수행하여, 그들을 모두 0으로 리셋시킨다.
  • 두 번째 단계에서는 새로이 삽입할 비트들과 그 결과 데이터 간에 OR 연산을 수행한다.

8-비트 데이터의 좌측 네 비트에 새로운 비트들(1110)을 삽입하는 예시

A = 10010101
B = 00001111  마스크(AND연산) 
-------------------
A = 0 0 0 0 0 1 0 1 첫 단계 결과
B = 11100000  삽입(OR연산) 
-------------------
A = 11100101   최종(삽입)결과

비교(compare) 연산

  • 이 연산은 A와 B 레지스터의 내용을 비교하고, 만약 두 레지스터에서 대응되는 비트들의 값이 같으면, A레지스터의 해당 비트를 0으로 세트한다. 그러나 만약 서로 다르다면, A레지스터의 해당 위치의 비트를 1로 세트한다.
  • 비교 연산은 두 레지스터들 간에 XOR 연산을 수행함으로써 구현할 수 있다.

A = 11010101
B = 1 001 01 10
-------------------
A = 01000011 (연산결과)

만약 두 레지스터의 모든 비트들이 동일하다면 A레지스터의 모든 비트들이 0으로 리셋되는데, 그런 경우에는 이 연산이 종료됨과 동시에 상태 레지스터에 있는 Z(zero) 플래그가 1로 세트된다. 따라서 두 레지스터의 내용을 비교한 결과는 z플래그를 검사함으로써 확인할 수 있다.


Reference

컴퓨터 구조론 개정 5판

https://yz-zone.tistory.com/72

 

[ 컴퓨터구조 ] 3.3 논리 연산

▣ 하드웨어의 구성 ▪ 입력 비트들은 모든 논리 게이트들을 통과 ▪ 선택 신호들에 의하여 멀티플렉서의 네 입력들 중의 하나를 출력 ▣ N-비트 데이터들을 위한 논리 연산장치 ▪ 기본 논리 모

yz-zone.tistory.com