오늘은 ALU가 수행하는 기본적인 연산 중 하나인 논리연산에 대해서 알아보겠습니다.
1. 논리연산
1) 논리연산 개요
컴퓨터가 처리하는 데이터의 형태들 중에서 수를 나타내는 데이터는 단어 단위로 취급됩니다. 만약 데이터가 16비트라면 모든 산술적 연산은 16비트 단위로 수행됩니다.
논리적데이터에서는 단어 내의 각 비트 단위로 의미를 가지며, 연산도 비트 단위로 처리됩니다.
n-비트 데이터들에 대하여 논리연산을 수행하는 장치는 모듈을 n개 이용하여 구성할 수 있습니다.
각 논리 모듈로는 두 단어에서 같은 위치에 있는 비트들이 입력되며, 어떤 연산을 수행할지 선택하는 S1과 S2는 모든 모듈들에 공통으로 인가됩니다. 논리연산에서는 대응되는 비트들 간에 독립적으로 연산이 수행되므로, 모듈간의 데이터 전송 통로는 필요하지 않습니다.
이러한 논리 연산들은 레지스터에 저장된 데이터의 일부 비트들에 대해서만 수행될 수도 있으며, 일부 비트들의 값을 변경하는데도 사용될 수 있습니다.
2. 기본적인 논리 연산
먼저 가장 기본적인 NOT, AND, OR, XOR의 연산에 대해 알아보겠습니다.
표로보면 다음과 같습니다.
연산에서 처리되는 데이터는 논리 데이터로서 비트가 1이면 true, 0이면 false를 나타냅니다.
1) AND 연산
두 개의 데이터에서 같은 위치에 있는 비트들 간에 AND 연산을 수행하는 것 입니다.
즉, 두 비트들이 모두 1인 경우에는 결과 데이터의 해당 비트가 1이되고, 어느 하나라도 0이되면 그 비트는 0이됩니다.
# A = 10110101, B = 00111011 일 때, AND 연산
A = 10110101
B = 00111011
-------------
00110001
2) OR 연산
두 개의 데이터에서 같은 위치에 있는 데이터들 간에 OR 연산을 수행합니다.
즉, 두 비트들 중의 어느 하나만 1(true)이면 결과 데이터의 해당 비트는 1이고, 모두 0이면 비트는 0이 됩니다.
# A = 10110101, B = 00111011 일 때, OR 연산
A = 10110101
B = 00111011
-------------
10111111
3) XOR 연산
두 개의 데이터에서 같은 위치에 있는 비트들 간에 exclusive-OR연산을 수행합니다.
두 비트들이 서로 다른 값을 가지면 결과 데이터의 값은 1이 되고, 같은 값을 가지면 0이 됩니다.
# A = 10110101, B = 00111011 일 때, XOR 연산
A = 10110101
B = 00111011
-------------
10101110
4) NOT 연산
단어의 모든 비트들을 반전(invert)하는 연산입니다.
비트의 값이 1이면 0, 0이면 1로 바뀝니다.
# A = 10110101 NOT 연산
A = 10110101
-------------
A = 01001010
3. 데이터를 변경하는 응용된 논리연산
특정 비트들이 적절히 세트된 다른데이터와 연산을 수행함으로써 원래의 데이터를 필요에 따라 변경할 수 있는 응용된 논리 연산들에 대해 알아보겠습니다.
1) 선택적-세트 연산
데이터의 특정 비트들을 1로 세트해주기 위한 동작입니다.
데이터가 저장된 A레지스터와 세트될 비트들의 위치를 지정해주는 B레지스터 간에 OR 연산을 수행합니다.
예시를 보겠습니다.
# A레지스터에 10010010이 저장되어 있을때 하위 네 비트를 1로 세트
A = 10010010
B = 00001111
----------------
A = 10011111
1로 세트할 비트를 B에서 지정하고 OR 연산을 수행함으로써 원하는 자리만 1로 세트된것을 확인할 수 있습니다.
2) 선택적-보수 연산
데이터 내 특정 비트들의 값을 보수화(1->0, 0->1) 하기 위한 연산입니다.
데이터가 저장된 A 레지스터와 반전시킬 비트들의 위치를 지정해주는 B 레지스터 간에 XOR 연산을 수행합니다.
# A레지스터에 10010010이 저장되어 있을때 하위 네 비트의 값을 반전
A = 10010101
B = 00001111
----------------
A = 10011010
XOR 연산은 두 값이 서로 다를때만 1(true)를 반환하기 때문에 반전하고자 하는 비트를 1로 세트 후 연산을 진행하면 0 -> 1, 1-> 0으로 반전할 수 있습니다.
3) 마스크 연산
데이터 내 특정 비트들의 값을 0으로 리셋시키기 위한 동작입니다. AND 연산을 수행합니다.
# A레지스터에 11110101이 저장되어 있을때 상위 세 비트를 0으로
A = 11110101
B = 00011111
----------------
A = 00010101
두 비트 모두 1이여야 1을 반환하는 AND 연산의 특징을 이용해서 기존의 값은 1과 연산하여 그대로 유지하고, 바꾸고자 하는값을 0과 연산시켜 0을 세트시킵니다.
4) 삽입 연산
데이터 내의 일부 비트들을 새로운 값으로 대체시키기 위한 동작으로서, 두 단계로 이루어집니다.
1. 삽입하고자 하는 비트들에 대하여 마스크 연산 수행
2. 그 결과 데이터와 새로이 삽입할 비트들 간에 OR 연산 수행
# 레지스터에 10010101이 저장되어 있을때 상위 네 비트를 1110으로 대체
# 1. 마스크 연산 수행
A = 10010101
B = 00001111
------------
A = 00000101
# 2. OR 연산 수행
A = 00000101
B = 11100000
-------------
A = 11100101
5) 비교 연산
A와 B 레지스터의 내용을 비교하고 비트의 값이 같으면 A 레지스터의 해당 비트를 0으로 세트, 다르면 1로 세트하는 동작으로
XOR연산을 통해 수행합니다.
# A = 11010101, B = 10010110 일때, 같은 위치의 비트가 같은 값을 가지면 A를 0으로 리셋
A = 11010101
B = 10010110
-------------
A = 01000011
만약 두 값이 동일하다면 A레지스터의 모든 비트들이 0으로 리셋되고, 연산이 종료하면서 상태 레지스터의 Z플래그가 1로 세트됩니다.
'CS > 컴퓨터 구조' 카테고리의 다른 글
[컴퓨터 구조] 정수의 산술 연산 (2) | 2025.04.16 |
---|---|
[컴퓨터 구조] 시프트 연산 (0) | 2025.04.15 |
[컴퓨터 구조] 산술논리연산장치(ALU)의 구성요소와 정수의 표현 (0) | 2025.04.09 |
[컴퓨터 구조] 상용 프로세서들의 명령어 형식 (2) | 2025.04.08 |
[컴퓨터 구조] 명령어 세트 (0) | 2025.04.05 |