ARCHITECTURE

[아키텍처] 컴퓨터 산술과 논리 연산

ch010104 2025. 3. 19. 14:03

1. 고정소수점 vs 부동소수점

컴퓨터에서 숫자를 표현하는 방식은 크게 **고정소수점(Fixed-point)과 부동소수점(Floating-point)**으로 나뉨.

1) 고정소수점(Fixed-point)

  • 소수점의 위치가 고정되어 있음.
  • 표현 방식: 1101., 0010.
  • 장점: 연산이 빠르고 단순함.
  • 단점: 표현 가능한 숫자의 범위가 작음.

2) 부동소수점(Floating-point)

  • 소수점의 위치가 변할 수 있음.
  • 표현 방식: 1101., 001.0 (소수점이 다른 위치 가능)
  • 장점: 훨씬 더 큰 숫자와 작은 숫자를 표현 가능.
  • 단점: 연산이 복잡하고 속도가 느릴 수 있음.
  • 부동소수점 연산은 IEEE 754 표준을 따름.

2. ALU(Arithmetic Logic Unit, 산술 논리 연산 장치) 구성 요소

ALU는 컴퓨터에서 산술 연산과 논리 연산을 수행하는 핵심 요소

1. 연산 장치 → 산술연산장치롸 논리연산장치로 나눌 수 있고, 덧셈, 뺄셈, 논리 연산 수행
2. 레지스터 → 연산할 데이터를 저장하는 임시 저장소
3. 상태 레지스터(Flags) → 연산 결과에 따라 플래그 설정
- c: carryout(자리수 올리기), n : negetive(음수), z: zero(0 임)  v: overflow(범위초과) 등..
4. 제어 유닛(Control Unit) → ALU가 어떤 연산을 수행할지 결정

 

ALU는 CPU 내부에서 제어 유닛과 함께 동작하며 프로그램의 흐름을 결정하는 역할을 함!


3. 정수(Integer) 표현 방식

컴퓨터는 양수/음수를 표현하는 방법에 따라 정수를 저장하는 방식이 다름.

1) 부호-절대값(Sign-Magnitude) 방식

  • MSB(최상위 비트)를 부호 비트로 사용
    • 0 = 양수, 1 = 음수, 나머지 비트는 절대값을 저장
  • 장점: 사람이 이해하기 쉬운 표현 방식
  • 단점: 0이 두 개 존재(0000 0000 = +0, 1000 0000 = -0), 연산이 복잡

📌 8비트 예제

  +5  →  0000 0101
  -5  →  1000 0101

2) 1의 보수(One’s Complement) 방식

  • 음수를 표현할 때 모든 비트를 반전(0→1, 1→0)하여 저장
  • 8비트 기준 -127 ~ 127 까지 가능(-0, +0 이 따로 있어 총 255개의 수 표현 가능)
  • 장점: 덧셈/뺄셈 연산이 비교적 단순함
  • 단점: 0이 두 개 존재(0000 0000 = +0, 1111 1111 = -0), 보정 필요

📌 8비트 예제

  +5  →  0000 0101
  -5  →  1111 1010  (1의 보수)

3) 2의 보수(Two’s Complement) 방식 (현대 컴퓨터 사용)

  • 음수를 표현할 때 1의 보수를 구한 후 +1을 더함
  • 8비트 기준 -128 ~ 127 까지 가능(+0만 가능해서 총 256개의 수 표현 가능)
  • 장점: 0이 하나만 존재하고, 덧셈/뺄셈 연산이 단순해짐
  • 현재 모든 컴퓨터에서 사용하는 방식

📌 8비트 예제

  +5  →  0000 0101
  -5  →  1111 1011  (1의 보수 후 +1)

2의 보수로 표현된 수를 다시 10진수로 바꾸기 위해선 2가지 방법이 있음.

1.

 2의 보수로 표현된 ‘10101110‘을 10진수로 변환

A = -128+(1 ×25 + l×23+l×22 + l× 21)
 = -128+(32 + 8+4+2)
 = -82

 

2.

2의 보수로 표현된 十)IOrIIO’을 먼저 양수로 바꾼 다음에 10진수로 변환

1) 10101110 → 01010010

2) A = -(1×26+1×24+1×21)
	 = -(64+16 + 2) 
	 = -82

 

**정수 표현의 3가지 방법 모두 양수에 대해서는 같은 표현방식을 나타냄**


4. 논리 연산 (Logical Operations)

논리 연산은 비트 단위로 데이터를 조작하는 연산 기법

1) 논리 연산 개요와 종류

연산 설명 예제
NOT 0 → 1, 1 → 0 NOT(0101) = 1010
AND A, B 모두 1일 때만 1 1100 AND 1010 = 1000
OR A, B 중 하나라도 1이면 1 1100 OR 1010 = 1110
XOR A, B가 다를 때만 1 1100 XOR 1010 = 0110

2) 비트 조작을 위한 논리 연산 기법

  • 선택적 - 세트 연산 (OR 연산): 특정 비트를 1로 설정 (예: 1010 OR 0001 → 1011)
    - 예: 첫번째 비트를 1로 설정하고 싶어!!(0001)
    - 설정하려는 특정비트의 위치에 1을 배치

  • 선택적 - 보수 연산 (XOR 연산): 특정 비트 보수로 만듬(반전) (예: 1010 XOR 0001 → 1011)
    - 예: 첫번째 비트를 반전하고 싶어!!(0001)
    - 설정하려는 특정비트의 위치에 1을 배치

  • 마스크 연산 (AND 연산): 특정 비트를 0으로 설정 (예: 1010 AND 1110 → 1010)
    - 예: 첫번째 비트를 0으로 설정하고 싶어!!(1110)
    - 설정하려는 특정비트의 위치에 0을 배치

  • 삽입 연산 (AND 후 OR 연산): 특정 데이터(Data) 삽입 (예: 1010 AND 1100 →1000, 1000 OR 0011(Data) → 결과: 1011)
    - 첫번째와 두번째 비트를 Data와 같게 설정하고 싶어!!(1100)
    - 설정하려는 특정비트의 위치에 0을 배치

  • 비교 연산 (XOR 연산): 서로 다른 비트만 1로 표시 (예: 1010 XOR 1001 → 0011)
    - 두 비트 A(1010), B(1001) 이 첫번째와 두번째 비트가 다르기 때문에 0011
    - 두 비트 A, B를 비교해서 다른 곳만 1로 표시하고 싶어!!!

3) 논리연산 장치

1. MUX(논리 연산을 위한 하드웨어 모듈)

 

연산 선택 신호인 S1, S2의 값에 따라서 각각 다르게, AND 연산, OR 연산, XOR 연산, NOT 연산을 수행함.

 

2. 4-비트 논리 연산장치

각 논리 모듈로는 두 단어에서 같은 위치에 있는 비트들이 입력됨.

연산 선택 신호인 S1, S2에 따라 모든 모듈들에 공통으로 전달

논리 연산에서는 대응되는 비트들 간에 독립적으로 연산이 수행되므로, 모듈간에 데이터 전송이 불필요


5. 시프트 연산 (Shift Operations)

시프트 연산은 비트를 왼쪽 또는 오른쪽으로 이동시키는 연산.

4-비트 시프트 레지스터의 내부 구성도

R = 1, L = 0 일 경우, 우측 시프트 연산이 수행됨.

R = 0, L = 1 일 경우, 좌측 시프트 연산이 수행됨.

연산 종류 설명 예제 비트 채움 C 플래그 영향
논리적 시프트 좌(LSH / Logical Shift Left) 비트를 왼쪽으로 이동 0010 << 1 → 0100 오른쪽 빈 자리: 0 밀려난 최상위 비트가 C에 저장
논리적 시프트 우(RSH / Logical Shift Right) 비트를 오른쪽으로 이동 0100 >> 1 → 0010 왼쪽 빈 자리: 0 밀려난 최하위 비트가 C에 저장
산술적 시프트 좌(ASL / Arithmetic Shift Left) 논리적 시프트 좌와 동일 (곱하기 2와 동일) 0011(3) → 0110(6) 오른쪽: 0 C = 밀려난 비트
산술적 시프트 우(ASR / Arithmetic Shift Right) 오른쪽으로 이동하면서 부호비트 유지 1100(-4) → 1110(-2) 왼쪽: 부호비트 복사 C = 밀려난 최하위 비트
순환 시프트 좌(ROL / Rotate Left) 밀려난 최상위 비트를 최하위로 이동 1001 → 0011 없음 C = 밀려난 비트
순환 시프트 우(ROR / Rotate Right) 밀려난 최하위 비트를 최상위로 이동 1001 → 1100 없음 C = 밀려난 비트
순환 시프트 + 캐리 (RCL/RCR) 순환 시 캐리(C) 플래그까지 포함하여 이동 C=1, RCL 1001 → 0011 (C=1) 없음 C 플래그와 상호작용

 

왼쪽 시프트(LSH) → 곱하기 2 연산과 동일
오른쪽 시프트(RSH) → 나누기 2 연산과 동일

C 플래그(Carry Flag)란?

  • 시프트나 산술 연산 시 "밀려난 비트"를 저장하는 용도
  • 올림수
  • 이후의 연산에서 올림/내림/순환 처리에 사용
  • 특히 RCL, RCR처럼 캐리까지 포함하는 순환 시프트에서는 핵심 역할