일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 파이썬
- git
- @Component
- nestjs auth
- nestjs typeorm
- thymeleaf
- Nodejs
- python
- 카카오 알고리즘
- 카카오 코테
- 프로그래머스
- TypeORM
- 카카오
- AWS
- 시스템호출
- 컴포넌트스캔
- OpenCV
- 해시
- 구조체배열
- 가상면접사례로배우는대규모시스템설계기초
- 알고리즘
- 스프링
- C언어
- @Autowired
- Spring
- 코테
- 코딩테스트
- spring boot
- C++
- nestJS
- Today
- Total
공부 기록장 💻
[컴퓨터구조] 컴퓨터 산술과 논리 연산 본문
컴퓨터 산술과 논리 연산
ALU의 구성 요소
- 산술 연산 장치: +, -, *, % 수행
- 논리 연산 장치 : 논리 연산(AND, OR, XOR, NOT 등) 수행
- 시프트 레지스터(shift register) : 비트들을 좌측, 우측으로 이동시키는 기능을 가진 레지스터 -> 플래그들 출력
- 보수기(complementer) : 2진 데이터를 2진 보수로 변환(음수화)
- 상태 레지스터(status register) : 연산 결과의 상태를 나타내는 플래그(flag)들을 저장하는 레지스터 <- 제어 신호들 입력 받음
정수의 표현
- 2진수 체계
- 부호 없는 정수 표현
- 소수점 아래 표현
음수 표현 방법
- 부호화-크기 표현(signed-magnitude representation)
- 맨 좌측 비트가 부호 비트, 나머지 (n-1)개의 비트들읜 수의 크기를 나타내는 표현 방식
- 양수- 0 , 음수- 1
- 문제점
- 덧셈과 뺄셈을 수행하기 위해 부호 비트와 크기 부분을 별도로 처리해야 함
- 0에 대한 표현이 두개 존재함
- n 비트의 단어로 표현할 수 있는 수들이 2^n개가 아닌 2^(n-1) 개로 감소함
- 맨 좌측 비트가 부호 비트, 나머지 (n-1)개의 비트들읜 수의 크기를 나타내는 표현 방식
- 1의 보수 표현(1's complement representation) - 모든 비트들에 대한 반전
- 2의 보수 표현(2's complement representation)
- 모든 비트들을 반전하고 결과값에 1을 더함
- 1의 보수, 부호화-크기 표현과 달리 '0'을 표현하는 방법이 한 가지 뿐임
- ( -255 ~ 255) 까지 표현 가능한 1의 보수와 달리, -256 ~ 255 의 수 표현 가능
비트 확장(Bit Extension)
비트 확장 : 데이터를 더 많은 비트의 레지스터에 저장하거나 더 긴 데이터와의 연산 수행을 위해
데이터의 길이(비트 수)를 늘리는 방법
ex) 8-비트 부호화-크기 표현 => 16-비트 부호화 크기 표현
+21 = 00010101 (8-비트 부호화-크기 표현)
+21 = 0000000000010101 (16-비트 부호화-크기 표현)
- 21 = 10010101 (8-비트 부호화-크기 표현)
- 21 = 1000000000100101 (16-비트 부호화-크기 표현)
부호-비트 확장(sign-bit extension) : 2의 보수 표현인 경우 -> 확장되는 상위 비트들을 부호 비트와 같은 값으로 설정
논리 연산
논리 연산을 위한 하드웨어 모듈
- 입력 비트들은 든 논리 게이트들을 통과
- 선택 신호들에 의해 멀티플렉서의 네 입력등 중 하나를 출력
N-비트 논리 연산 장치
- AND 연산
- OR 연산
- XOR 연산(대응되는 비트들간에 exclusive-OR 연산 : 같으면 0, 다르면 1)
- NOT 연산 : 비트 반전(invert)
- 선택적-세트(selective-set) 연산 - OR 연산 이용
- 선택적-보수(selective-complement) 연산 - XOR 연산
- 마스크(mask) 연산 - AND 연산(B레지스터의 비트들 중 값이 0인 비트들과 같은 위치에 있는 A 레지스터의 비트들을 모두 0으로 바꾸는(clear) 연산 )
- 삽입(insert) 연산 - 새로운 비트 값들을 특정 위치에 삽입
- 1) 삽입할 비트 위치들에 대해서는 마스크(AND) 연산 수행
- 2) 새로 삽입할 비트들과 OR 연산 수행
- 비교(compare) 연산 - XOR 연산(A와 B 레지스터의 내용 비교 - 대응되는 비트들의 값이 같으면 0, 다르면 1로 설정, 모든 비트들이 같으면 Z플래그를 1로 세트)
시프트(shift) 연산
- 논리적 시프트(logical shift) : 레지스터 내의 데이터 비트들을 왼쪽 혹은 오른쪽으로 한 칸씩 이동
- 좌측 시프트(left shift)
- 모든 비트들을 좌측으로 한 칸씩 이동
- 최하위 비트(A1)로는 0이 들어오고, 최상위 비트(An) 는 버림(drop-out)
- 우측 시프트(right shift)
- 모든 비트들이 우측으로 한 칸씩 이동
- 최상위 비트(An)으로 0이 들어오고, 최하위 비트(A0)은 버림
- 순환 시프트(circular, rotate shift) - 최상위, 최하위 비트를 버리지 않고 반대편 끝에 있는 비트 위치로 이동
- 순환 좌측 시프트(circular left-shift) - 최상위 비트(An)이 최하위 비트 위치인 A0으로 이동
- 순환 우측 시프트(circular right-shift) - 최하위 비트(A0)이 최상위 비트 위치인 An으로 이동
직렬 데이터 전송(serial data transfer)
- 시프트 연산을 데이터 비트 수만큼 연속적으로 수행하여 두 레지스터들 사이에 한 개의 선을 통해 전체 데이터를 이동시키는 동작
산술적 시프트(arithmetic shift)
'# CS Study > Computer Architecture' 카테고리의 다른 글
[컴퓨터구조] 시스템 버스, I/O 및 인터럽트 (0) | 2021.06.06 |
---|---|
[컴퓨터구조] 제어 유니트 (Control Unit) (0) | 2021.06.04 |
[컴퓨터구조] CPU 구조와 기능 - 명령어 파이프라이닝(2, 4단계), 명령어 세트 (0) | 2021.04.20 |
[컴퓨터구조] CPU 구조와 기능 - 기본 구조(ALU, Register, Control Unit) / CPU 레지스터(PC, AC, IR, MAR, MBR) / 명령어 실행(인출 사이클, 실행 사이클, 인터럽트 사이클 ISR, 간접 사이클) (0) | 2021.04.20 |