산술논리연산장치(ALU : Arithmetic and Logical Unit)
CPU 내부의 핵심 구성요소로서, 산술 연산과 논리 연산을 수행하는 하드웨어 모듈
컴퓨터의 가장 근본이 되는 기능 : 수치에 대한 산술적 계산과 논리 데이터에 대한 연산
산술적 계산
일반적으로 정수(integer)와 부동 소수점 수 (floating-point number)라는 두 가지 형태의 수들에 대하여 수행되며, 논리 연산은 0과 1의 배열로 표현되는 2진 데이터(binary data)에 대하여 이루어진다.
ALU의 구성 요소
CPU의 내부 구성 요소들 중 하나인 ALU는 수치 및 논리 데이터에 대하여 실제적으로 연산을 수행하느 하드웨어 모듈이다.
컴퓨터 시스템의 다른 요소들인 제어 유니트, 레지스터, 기억장치 및 I/O장치는 사실상 ALU에 의해 처리될 데이터를 가져오거나 그 결과를 저장하고 출력시키는 역할
APU의 내부 요소 및 각 요소들의 주요기능
- 산술연산장치 : 산술 연산들(+, -, *, /)을 수행한다.
- 논리연산장치 : 논리 연산들(AND, OR, XOR, NOT 연산 등)을 수행한다.
- 시프트 레지스터(shift register) : 비트들을 좌측 혹은 우측으로 이동시키는 기능을 가진 레지스터이다.
- 보수기(complementer) : 데이터에 대하여 2의 보수를 취한다.(음수화 한다.)
- 상태 레지스터(status register) : 연산 결과의 상태를 나타내는 플래그(flag)들을 저장하는 레지스터이다.
이 요소들에 의해 처리될 데이터들은 레지스터 혹은 기억장치로부터 ALU로 입력되고, 그 결과는 일반적으로 레지스터들 중의 하나에 저장된다. ALU는 연산의 결과에 따라 상태 레지스터 내의 해당 플래그들을 세트하는데, 이 플래그들은 조건 분기 명령어 혹은 산술 명령어들에 의해 사용된다. 입력 데이터에 대하여 연산을 수행할 내부 요소의 선택과 ALU 내외로의 데이터 이동을 제어하는 신호들은 제어 유니트로부터 제공된다.

정수의 표현
2진수 체계(binary number system)에서는 어떤 수를 0과 1, 부호 및 소수점으로 표현한다.
ex) 10진수 -13.625는 2진수로 -1101.101로 표현된다. 그러나 컴퓨터가 데이터를 저장하거나 처리하는 과정에서 부호와 소수점을 사용할 수 없으며, 0과 1만 사용할 수 있다. 따라서 양수 혹은 음수를 나타내는 부호도 0이나 1을 사용하여 표시해야 하며, 소수점도 필요에 따라 특정 위치에 있는 것으로 가정하여 수를 표현하게 된다.
만약, 부호 없는 정수, 즉 양소만 사용한다면 표현 방법은 간단하다.
ex) 부호 없는 정수 표현의 예시
- 00111001 =57
- 00000000 = 0
- 00000001 = 1
- 10000000 = 128
- 11111111 = 255
n-비트 2진수를 부호 없는 정수 A로 변환하는 방법

2진 소수점(binary point : 이하 소수점이라 함)
2진수 표현에서의 소수점으로서, 자릿수가 1보다 더 큰 수와 더 작은 수의 경계점
자릿수(weight)
수 표현에 사용된 2진 비트들의 위치에 따른 10진 값으로서, 가중치라고도 함.
소수점의 바로 우측 비트는 2^-1, 그 다음 비트는 2^-2, ... 등의 자릿수(weight : 가중치)를 가진다.
만약 2진수 A를 최상위 비트인 an-1의 좌측에 소수점이 있는 소수(fraction)의 10진수 변환방법

컴퓨터는 양수뿐만 아니라 음수도 처리하기 때문에 음수를 표현하는 방법이 필요하다. 그 방법에는 여러 가지가 있는데, 모든 방법들에서 공통적인 것은 2진수의 맨 좌측 비트(leftmost bit)가 부호비트(sign bit)로 사용된다.
부호비트(sign bit)
수가 양수인지 혹은 음수인지를 나타내는 비트로서 2진수의 맨 좌측 비트가 사용되며, 0은 양수, 1은 음수를 나타낸다.
만약 부호비트가 0이면 그 수는 양수이고, 1이면 음수이다. 부호 비트를 사용하는 2진수 표현으로는 3가지 방법들이 있다.
- 부호화-크기 표현(signed-magnitude representation)
- 1의 보수 표현(1's complement representation)
- 2의 보수 표현(2's complement representation)
부호화-크기 표현
음수 표현 방법들 중에서 가장 간단한 것은 부호화-크기 표현이다. 이 표현 방식에서는 수를 표현하는 단어의 비트 수가 n이라면, 맨 좌측 비트가 부호비트이고, 나머지(n-1)개의 비트들의 수의 크기(magnitude)를 나타낸다. 여기서 수의 크기 부분은 부호 없는 정수에 대한 2진수 표현과 같은 방법으로 변환된다.
8-비트 정수에 대한 부호화-크기 표현의 예시

부호화-크기로 표현된 2진수를 10진수로 변환하는 방법

부호화-크기 표현의 결점
- 덧셈과 뺄셈을 수행하기 위해서는 부호 비트와 크기 부분을 별도로 처리해야 한다.
- ex) 두 수의 덧셈과정
- 두 수의 부호를 비교한다.
- 부호가 같을 경우에는 크기 부분들을 더하고, 다른 경우에는 크기 부분의 차이를 구한다.
- 크기 부분의 절댓값이 더 큰 수의 부호를 결과값의 부호로 세트한다.
- 이 표현 방법의 두 번째 결점은 0에 대한 표현이 두 가지라는 점이다.
- 0 0000000 = +0
- 1 0000000 = -0
이러한 경우에는 데이터가 '0'인지 검사하는 과정이 더 복잡해지며, n-비트 2진수로 표현할 수 있는 수들이 2^n개가 아니라 (2^n-1)개로 줄어든다.
보수 표현(complement representation)
음수를 2진수로 표현하는 방법으로서, 1의 보수 및 2의 보수 표현이 있다.
부호화-크기 표현들의 결점들을 해결하기 위해 보수 표현이 개발되었다. 어떤 양수에 대하여 1의 보수와 2의 보수로 표현한 결과는 동일하다. 그러나 양수를 음수로 바꾸는 음수화(negation) 방법에 있어서는 다음과 같은 차이가 있다.
- 1의 보수 표현 : 모든 비트들을 반전한다(0 -> 1, 1 -> 0)
- 2의 보수 표현 : 모든 비트들을 반전하고, 결과값에 1을 더한다.
이 표현들의 음수화 방법의 예시

변환하는 과정은 1의 보수가 더 간단하지만, 일반적으로 컴퓨터들에서 2의 보수가 더 많이 사용되고 있다. 그 이유는 2의 보수 경우에 같은 길이의 비트들로 표현할 수 있는 수의 개수가 하나 더 많기 때문이다.
1의 보수의 표현 개수가 하나 더 적은 이유는 부호화-크기 표현과 마찬가지로 '0'에 대한 표현이 두가지이기 때문이다.
ex) 8비트를 이용하여 1의 보수와 2의 보수로 표현할 수 있는 수들

2의 보수 포횬을 이용하여 n-비트 2진수로 표현할 수 있는 양수의 범위는 0부터(2^n-1 - 1)까지이고, 음수는 -1부터 -2^n-1까지이다.
ex) 8-비트 2진수로 표현할 수 있는 10진수의 범위는 아래와 같아진다.
1의 보수 : -(2^7 - 1) ~ (2^7 - 1) = -127 ~ 127
2의 보수 : -2^7 ~ (2^7 - 1) = -128 ~ 127
2의 보수로 표현된 2진수에서 부호 비트 an-1 = 0인 양수를 10진수로 변환하는 방법 식

부호 비트(an-1 = 1)인 음수를 10진수로 변환하는 일반식

2의 보수 표현이 사람들에게는 익숙하지 못하지만, 컴퓨터에게는 가장 중요한 산술 연산인 덧셈과 뺄셈을 더 편리하게 처리할 수 있게 해준다.
그 이유 때문에 거의 모든 컴퓨터에서 2의 보수 표현이 사용되고 있다.
부호-비트 확장(sign-bit extension)
2의 보수를 더 긴 단어로 확장할 때 부호 비트를 상위 비트로 복제하는 동작
컴퓨터에서 어떤 수가 기억장치에 저장되어 있을 때의 길이와 CPU 연산 과정에서 길이가 서로 다른 경우가 있다.
ex) 기억장치에 8-비트 길이로 저장되어 있는 데이터를 읽어와서 16-비트 레지스터에 저장하는 경우에는, 읽어온 8-비트 데이터를 16비트 단어로 확장해야 한다. 부호화-크기 표현에서는 단순히 부호 비트를 새로운 맨 좌측으로 이동시키고, 그 외의 위치들은 0으로 채우면 된다.


반면에, 2의 보수인 경우에는 확장되는 상위 비트들을 부호 비트와 같은 값으로 세트해야 된다. 즉, 양수의 경우에는 모든 상위 비트들을 0으로 세트하고, 음수의 경우에는 1로 세트한다. 이것을 부호-비트 확장이라고 부른다.

모든 정수 표현들은 고정 소수점 수(fixed-point number)라고 불리는데, 그 이유는 2진 소수점이 맨 우측 비트의 우측에 고정되어 있기 때문이다. 그리고 2진 소수점의 위치를 묵시적으로 조정한다면, 2진 소수(binary fraction)도 같은 방법으로 표현할 수 있다.
ex) n-비트 2진수에서 소수점이 부호 비트의 우측에 위치한다고 가정한다면, 그 다음 비트들은 각각 2^-1, 2^-2, ..., 2^(n-1)의 자릿수를 가지게 된다.
Reference
컴퓨터 구조론 개정 5판
https://yz-zone.tistory.com/71
[ 컴퓨터구조 ] 3.1-2 컴퓨터 산술과 논리 연산
▣ 컴퓨터의 가장 근본이 되는 기능 ▪ 수치에 대한 산술적 계산 ▪ 논리 데이터에 대한 연산 ▣ 산술적 계산 ▪정수와 부동소수점 수라는 두 가지 형태의 수들에 대하여 수행 ▣ 논리 연산 ▪0
yz-zone.tistory.com
'CS > 컴퓨터 구조론' 카테고리의 다른 글
| 컴퓨터 구조론 3장 [컴퓨터 산술과 논리 연산3] (1) | 2025.03.24 |
|---|---|
| 컴퓨터 구조론 3장 [컴퓨터 산술과 논리 연산2] (0) | 2025.03.24 |
| 컴퓨터 구조론 2장 [CPU의 구조와 기능 - 명령어 세트3] (0) | 2025.03.23 |
| 컴퓨터 구조론 2장 [CPU의 구조와 기능 - 명령어 세트2] (0) | 2025.03.22 |
| 컴퓨터 구조론 2장 [CPU의 구조와 기능 - 명령어 세트] (0) | 2025.03.20 |