- 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
'Major Review (학부) > Computer Architecture' 카테고리의 다른 글
3. 컴퓨터 산술과 논리 연산 (2) (0) | 2023.02.26 |
---|---|
2. CPU의 구조와 기능 (3) (0) | 2023.02.21 |
2. CPU의 구조와 기능 (2) (0) | 2023.02.20 |
2. CPU의 구조와 기능 (1) (0) | 2023.02.19 |
1. 컴퓨터시스템 개요 (2) (0) | 2023.02.19 |
댓글