KOCW에 공개된 영남대 최규상 교수님 컴퓨터구조 강의를 수강 후 정리한 내용입니다.
3.2 Addition and Subtraction
Integer Addition and Subtraction
1. Integer Addition
- Overflow: 어떤 값이 범위를 벗어나는 경우 발생
- positive와 negative를 더할 경우 overflow는 절대 발생하지 않음
- 두 개의 positive를 더하거나 두 개의 negative를 더하는 경우 overflow가 발생 가능
- 두 개의 positive를 더한 결과 sign bit이 1인 경우(음수인 경우) overflow 발생
- 두 개의 negative를 더한 결과 sign bit이 0인 경우(양수인 경우) overflow 발생
2. Integer Subtraction
- 두 개의 positive와 두 개의 negative의 subtraction에서는 overflow가 발생하지 않음
- negative에서 positive를 빼는 경우 sign bit이 0이 되면 overflow 발생
- positive에서 negative를 빼는 경우 sign bit이 1이 되면 overflow 발생
3. Dealing with Overflow
- C언어의 경우 overflow를 무시
- MIPS의 addu, addui, subu 명령어의 경우 overflow 무시
- Ada, Fortran의 경우 exception을 발생
- MIPS의 add, addi, sub 명령어의 경우 overflow가 발생하면 예외 처리
- 예외 처리 방법은 4장에서 다룸
3.3 Multiplication
MIPS Multiplication
- MIPS의 곱하기 연산 결과는 64bit으로 저장되므로 32bit 레지스터 2개가 필요
- HI: MS 32bit
- LO: LS 32bit
- mult는 64bit의 결과를 mul은 32bit의 결과를 만듦
3.4 Division
MIPS Division
3.5 Floating Point
- S: sign bit. 0이면 양수, 1이면 음수
- 1+Fraction: significand(X 앞의 숫자). float에서는 정수 부분이 항상 1이므로 소수점 아래 숫자만 저장하면 됨. 이 때 소수점 아래 숫자를 fraction이라고 부름
- significand 범위: 1 이상 2 미만
- Bias: Single일 경우 127, Double일 경우 1203
- Exponent를 저장할 때는 실제 exponent 값에 bias를 더한 값을 저장하기 때문에 값을 구할 때는 bias 값을 빼준 후 계산
2. Floating-Point
1. Relative Precision
- Single: 6자리의 10진수 표현 가능
- Double: 16자리의 10진수 표현 가능
2. Infinities and NaNs
- Infinities: Exponent = 111...1, Fraction = 000...0일 경우
- NaNs: Exponent = 111...1, Fracion이 000...0이 아닌 경우
3. Floating-Point Addition
- Integer보다 연산이 복잡해 하나의 clock cycle로 연산을 수행하기에는 오래 걸림. 이럴 경우 다른 모든 명령어의 수행이 늦어지기 때문에 일반적으로 여러 cycle를 사용
- 이 단점을 보완하기 위해 pipline(병렬)로 처리. 하나의 명령어는 여러 cycle에서 실행되지만 throughput을 높여 여러 개의 명령어가 동시에 실행되기 때문에 단위 시간당 float-point adder를 할 수 있는 명령어의 개수는 증가
4. Floating-Point Arithmetic Hardware
- Addition, subtraction, multiplication, division, reciprocal, squareroot를 지원
- FP와 Integer의 변환도 지원해줌
- 연산들은 여러 사이클을 통해 수행되며 파이프라인을 사용해 성능을 향상시킬 수 있음
6주차 끝!!!
게시물에 사용된 사진은 강의 내용을 캡쳐한 것입니다.