Arithmetic operation & logic operation 5강
ALC & 정수(integer) 표현 방법(representation method), 논리(logic)와 시프트연산(shift operation).
Study date: 01/04/2024
Goals: ALC의 구성요소(component)를 설명할 수 있다. 정수(integer)의 표현방법을 설명할 수 있다. 논리 연산(logic operation)을 설명할 수 있다. 논리쉬프트연산(logical shift operation)을 설명할 수 있다.
CPU의 구성요소: 제어장치(control unit), ALU(arithmetic logic unit), 레지스터(register)
ALU(Arithmetic Logic Unit): 컴퓨터 중앙처리장치(CPU)의 핵심 부분 중 하나
ALU 구성 요소: 산술 연산장치, 논리 연산장치, 시프트 레지스터, 보수기, 상태 레지스터
1) 산술 연산장치(arithmetic operation): 산술 연산들 (+, -, *, /)수행
2) 논리 연산장치(logic operation): 기본적인 논리 연산들(AND, OR, XOR, NOT 등)과 응용 논리연산(선택적-세트/보수연산, 마스크, 삽입, 비교 등)을 수행
3) 시프트 레지스터(shift register): 논리쉬프트연산의 기능을 하드웨어로 구성함. 비트들을 좌우/우측(left/right)으로 이동시키는 기능을 가지는 레지스터
4) 보수기(complementer): 2진 데이터를 2의 보수로 변환(음수화)
5) 상태 레지스터(status register): 연산 결과의 상태를 나타내는 플래그(flag)들을 저장하는 레지스터
정수표현방법(integer representation): 부호화-크기 표현, 1의 보수 표현, 2의 보수 표현
1) 부호화-크기 표현(signed-magnitude representation): 가장 간단한 형태의 부호 표현 방식. 가장 왼쪽 비트(최상위 비트)는 부호를 나타내며, 0은 양수를, 1은 음수를 나타낸다. 나머지 비트들은 해당 숫자의 크기를 나타낸다.
2) 1의 보수 표현법(One's Complement): 음수를 나타내기 위해 해당 수의 모든 비트를 반전시킴. 이후에는 부호가 있는 숫자로 간주한다. 이 방식은 0과 -0을 나타내기 위해 두 가지 표현을 사용하는 단점이 있다.
3) 2의 보수 표현법(Two's Complement): 가장 널리 사용되는 방식. 양수와 음수 모두를 표현할 수 있다. 뺄셈 연산을 덧셈 연산으로 변환하여 처리할 수 있다. 양의 숫자는 그대로 표현되고, 음의 숫자는 해당 숫자의 모든 비트를 반전한 후 1을 더하여 얻을 수 있다.
ALU의 정수표현방법과 관련된 또다른 기능:
1) 비트확장 (bit extension): ALU는 주어진 입력 데이터의 비트 수에 따라 연산을 수행한다. ALU가 8비트 연산을 지원한다면, 8비트 이하의 데이터는 별도의 변환 없이 그대로 처리할 수 있지만, 더 넓은 범위의 데이터를 처리해야 한다면 비트 확장을 통해 해당 데이터를 8비트로 확장하여 연산을 수행한다.
2)부호 비트 확장(sign-bit extension): 부호 있는 정수를 다룰 때 필요. 입력된 정수의 부호를 유지하면서 비트 수를 늘리는 역할을 한다. 주로 연산이나 데이터 전송 시에 발생하는데, CPU 내부에서 연산을 수행할 때 또는 메모리 간 데이터 전송 시에 자동으로 이루어진다.
논리연산(logical operation)
입력 비트들은 모든 논리 게이트들을 통화한다.
선택 신호들의 의하여 멀티플렉서의 네 입력들 중의 하나를 출력
AI와 논리연산은 밀접한 관계가 있다.
논리연산의 종류:
AND: 두 비트가 모두 1일 때 1을 반환하고, 그 외의 경우에는 0을 반환한다. 두 입력 비트가 모두 참(1)일 때만 결과가 참(1)이 된다.
OR: 두 비트 중 하나 이상이 1일 때 1을 반환하고, 두 입력이 모두 0인 경우에만 0을 반환한다. 즉, 입력 중 하나 이상이 참(1)이면 결과가 참(1)이 된다.
XOR 배타적 논리합 (exclusive-OR)연산: 두 비트가 서로 다른 경우에 1을 반환하고, 두 입력이 모두 같은 경우에는 0을 반환한다.
NOT: 입력된 비트를 반전시킨다. 0은 1로, 1은 0으로 변환된다.
조건부로 특정 동작을 수행하는 논리연산 = 응용 논리 연산:
- 선택적-세트 연산(Conditional-Set Operations): 특정 조건이 충족될 때만 특정 비트를 설정하거나 변경하는 연산. 예를 들어, 특정 조건이 참일 때만 특정 비트를 "1"로 설정하는 것이다. 이러한 연산은 일반적으로 상태 플래그를 설정하거나 특정 동작을 트리거하는 데 사용된다. OR 연산을 사용한다.
선택적-보수 연산(Conditional-Complement Operations): B 레지스터의 비트들 중에서 1로 세트 된 비트들에 대응되는 A레지스터의 비트들을 보수로 변환한다. 이러한 연산은 보통 제어 흐름이나 데이터 변환과 관련된 작업에서 사용된다. XOR연산을 사용한다.
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 (연산 후)
마스크(mask)연산: 일반적으로 데이터의 특정 부분을 선택하거나 필터링하는 데 사용된다. 예를 들어, 데이터의 특정 비트들만 유지하고 나머지 비트들을 제거하는 경우에 마스크가 사용될 수 있다. 또한, 특정 조건에 따라 특정 비트를 설정하거나 비트를 반전시키는 데에도 마스크가 사용될 수 있다.
삽입(insert)연산: 데이터 구조에 새로운 항목을 특정 위치에 추가하는 것이다. 주어진 위치에 새로운 항목을 넣거나(마스크AND 연산 수행) 리스트나 배열의 끝에 새로운 요소를 추가(OR연산 수행)하는 데 사용된다. 데이터 구조를 확장하거나 변경하는 데 사용된다.
비교(compare)연산: 비교 연산은 두 개의 항목을 비교하여 그 관계를 판별하는 것이다. 데이터의 정렬이나 검색에 사용된다.
논리적 쉬프트연산(logical shift operation)
시프트 연산은 데이터의 비트를 왼쪽이나 오른쪽으로 이동시키는 연산을 의미한다.
왼쪽으로 시프트 연산을 하면 데이터의 비트는 왼쪽으로 이동하고, 오른쪽으로 시프트 연산을 하면 데이터의 비트는 오른쪽으로 이동한다.
시프트 연산은 주로 데이터의 이동이나 증가/감소를 위해 사용되며, 논리 연산이나 산술 연산과 함께 사용되어 다양한 용도로 활동된다.
시프트 레지스터(shift register)
순환 시프트(circular shift = rotate): 시프트 레지스터의 한 종류. 최상위 혹은 최하위에 있는 비트를 버리지 않고 반대편 끝에 있는 비트 위치로 이동. 순환 좌측-시프트(circular shift-left), 순환 우측-시프트(circular shift-right)으로 구성
직렬 데이터 전송(serial data transfer): 쉬프트 레지스터의 기능을 이용한다. 시프트 연산을 데이터 수만큼 연속적으로 수행함으로써 두 레지스터들 사이에 한 개의 선을 통하여 전체 데이터를 이동하는 동작이다. 데이터를 한 비트씩 직렬로 전송하는 프로세스이다.
산술적 시프트(arithmetic shift)연산: 수(number)를 나타내는 데이터에 대한 시프트이다. 쉬프트과정에서 부호 비트는 그대로 유지시키고, 수의 크기를 나타내는 비트들만 쉬프트시키는 것.
추가설명(further explanation)
보수(complement)란? 숫자의 표현 방식 중 하나. 주로 컴퓨터에서 음수(negative number)를 표현할 때 사용.
상태 레지스터(status register)하고 CPU 레지스터(register) 같나요? CPU의 구성요소의 레지스터는 주로 Control unit과 관련이 있다. 명령어 실행을 제어하고 다음에 수행할 동작을 결정한다. ALU에서 상태 레지스터는 연산의 상태를 추적하고 다음 연산을 올바르게 반응하도록 도와준다. 두개는 서로 다른 개념이지만 비슷한 기능을 가지고 있다.
정수(integer)란? 수학에서 사용되는 용어로, 소수점 이하가 없는 양의 정수(positive number), 음의 정수(negative number), 그리고 0을 모두 포함하는 숫자를 말한다.
컴퓨터 구조에서 마스크(mask)란?: 마스크 연산은 데이터의 일부분을 감추거나 강조하기 위해 사용되는 특별한 패턴이다. 마스크를 사용하여 우리가 원하는 데이터를 걸러내거나 수정할 수 있다. 이를 통해 데이터의 특정 부분에만 집중하거나 해당 부분을 수정할 수 있다.


