본문 바로가기
Major Review (학부)/Computer Architecture

3. 컴퓨터 산술과 논리 연산 (1)

by 삼준 2023. 2. 23.
반응형

- Read Me는 읽어보셨나요? -

2023.02.17 - [HakBu Review (학부)/Computer Architecture] - Read Me

 

ALU의 구성 요소

 

1. 산술연산장치 : 산술 연산 수행

2. 논리연산장치 : 논리 연산 수행

3. 시프트 레지스터 : 비트들을 좌측 혹은 우측으로 이동시키는 기능을 가짐

4. 보수기 : 2의 보수를 취함

5. 상태 레지스터 : 연산 결과의 상태를 나타내는 플래그들을 저장

 

정수의 표현

 

2진수 체계를 사용함. ex) -13.625(10) = -1101.101(2)

컴퓨터가 데이터를 저장,처리하는 과정에서 부호와 소수점을 사용할 수 없기에, 부호 또한 0,1을 사용해야하며, 소수점도 특정 위치에 있는 것으로 가정하여 표현하게 됨.

 

2진수 A를 최상위 비트인 a(n-1)의 좌측에 소수점이 있는 소수로 가정한다면, 이를 10진수로 변환하는 일반식은 다음과 같음.

$$ A = a_{n-1} × 2^{-1} + a_{n-1} × 2^{-1} + \cdots + a_{1} × 2^{-(n-1)} + a_{0} × 2^{-n} $$

즉, 소수점의 바로 우측 비트는 2^(-1), 그 다음 비트는 2^(-2), 등의 자릿수(weight, 가중치)를 가짐.

 

컴퓨터가 음수를 표현하는 방법들은 다음과 같고, 공통적으로 2진수의 맨 좌측 비트를 부호 비트로 사용한다는 특징이 있음. 부호 비트가 0이면 양수, 1이면 음수.

 

1. 부호화-크기 표현

: 표현하는 수가 n비트라면, 맨 좌측 비트가 부호, 나머지 n-1개의 비트들은 수의 크기를 나타냄.

ex) -35(10) = 1 0100011(2)

   두 가지 결점이 있음.

   ①. 덧셈과 뺄셈을 수행하기 위해 부호 비트와 크기 부분을 별도로 처리해야 함. 

   ex) 두 수의 덧셈 과정 : 두 수의 부호를 비교함. → 부호가 같으면 더하고, 다르면 차이를 구함. → 크기 부분의 절댓값이 더 큰 수의 부호를 결과값의 부호로 세트함.

   ②. 0에 대한 표현이 두 가지임. +0과 -0. 데이터가 0인지 검사하는 과정이 더 복잡해지며 표현할 수 있는 수가 1개 줄어듬.

 

2. 보수 표현

부호화-크기 표현의 결점들을 해결하기 위해 개발된 방법.

1의 보수 : 모든 비트를 반전함. ( 1→0, 0→1 )

2의 보수 : 모든 비트를 반전하고 결과값에 1을 더함.

과정은 1이 더 간단하지만, 2의 보수가 표현할 수 있는 수가 한 개 더 많기 때문에(0을 표현하는 수가 한 개 뿐임.) 2의 보수를 사용함. 또한, 2의 보수를 사용한 컴퓨터의 산술 연산이 훨씬 편리함.

 

- 부호-비트 확장

저장되어있을 때의 길이와 연산 과정에서의 길이가 다른 경우가 있음. 짧을 경우에는 늘리는 과정, 즉 확장이 필요함.

부호화-크기 표현은 부호 비트를 새로운 맨 좌측 위치로 이동시키고, 그 외의 위치는 0으로 채워주면 됨.

2의 보수인 경우 확장되는 상위 비트를 부호 비트와 같은 값으로 세트하며, 이를 부호-비트 확장이라고 함.

 

논리 연산

 

기본적인 논리 연산의 종류 : NOT, AND, OR, XOR

 

- NOT

데이터의 모든 비트들이 반전됨.

 

- AND

: 두 개의 데이터에서 같은 위치에 있는 비트들 간에 AND를 수행하는 것. 두 비트 모두 1인 경우에만 결과 데이터의 해당 비트가 1이 됨.

 

- OR

: 두 개의 데이터에서 같은 위치에 있는 비트들 간에 OR를 수행하는 것. 두 비트 중 하나만 1이면 결과 데이터의 해당 비트가 1이 됨.

 

- XOR

: 두 개의 데이터에서 같은 위치에 있는 비트들 간에 exclusive-OR을 수행하는 것. 두 비트가 다른 값을 가지면 결과 데이터의 해당 비트가 1이 됨.

 

앞선 기본적인 논리 연산을 바탕으로 응용된 논리 연산이 있음 : 선택적-세트, 선택적-보수, 마스크, 삽입, 비교

 

- 선택적-세트 (Selective-Set)

: 데이터의 특정 비트들을 1로 세트해주기 위한 동작. 1로 세트하고 싶은 위치의 비트들을 1로 세트한 데이터와 기존의 데이터를 OR연산하면 됨.

ex) 하위 4비트를 1로 세트하고 싶을 때, 10010010 OR 00001111 = 10011111

 

- 선택적-보수 (Selective-Complement)

: 데이터 내 특정 비트들의 값을 보수화 하기 위한 동작. 반전시키고 싶은 위치의 비트들을 1로 세트한 데이터와 기존의 데이터를 XOR연산하면 됨.

ex) 하위 4비트를 보수화하고 싶을 때, 10100101 XOR 00001111 = 10101010

 

- 마스크 (Masking)

: 데이터 내 특정 비트들의 값을 0으로 리셋하기 위한 동작. 리셋하고 싶은 위치의 비트들을 0으로 세트한 데이터와 기존의 데이터를 AND연산하면 됨.

ex) 상위 3비트를 리셋하고 싶을때, 11001101 AND 00011111 = 00001101

 

- 삽입 (Insert)

: 데이터 내 일부 비트들을 새로운 값들로 대체시키기 위한 동작. 마스크 연산과 선택적-세트 연산을 순서대로 수행하는 것과 동일함.

 

- 비교 (Compare)

: 같은 위치의 비트들의 값이 같으면 0, 다르면 1로 세트하는 동작. 두 데이터를 XOR연산하면 됨.

두 레지스터의 모든 비트가 동일하면 모든 비트가 0으로 리셋되고 상태 레지스터에 있는 Z(제로)플래그가 1로 세트됨. 따라서, 두 레지스터의 내용을 비교한 결과는 Z플래그를 검사함으로써 확인이 가능함.

ex) 11001001 XOR 01101001 = 10100000

 

반응형

댓글