컴퓨터구조 강의노트 #8: Chapter 9: 컴퓨터산술 2008. 5. 8. 담당교수 : 조재수 E-mail: jaesoo27@kut.ac.kr 1 컴퓨터시스템구조론 제9장컴퓨터산술 (Computer Arithmetic) 2 1
핵심요점들 컴퓨터산술에있어서두가지주요관심사는수가표현되는방법 (2진수형식 ) 과기본적인산술연산들 ( 더하기, 빼기, 곱하기, 나누기 ) 을위해사용되는알고리즘들이다. 이두가지는정수와부동소수점산술에모두적용된다. 부동소수점수들은어떤수 ( 가수 : significand) 에상수 ( 기수 : base) 의정수멱 ( 지수 : exponent) 을곱한수로표현된다. 부동소수점수는매우크거나매우작은수들을표현하는데사용된다. 대부분의프로세서들은부동소수점표현과부동소수점산술을위해 IEEE 754 표준을구현한다. 3/56 9.1 산술논리연산장치 (ALU) 데이터에대하여실제적으로산술및논리연산을수행하는부분 2 진수를저장하고부울논리연산들을처리하는디지털논리회로로구성 정수 (integer), 실수 (real number), 부동소수점수 (floating point numbers) 처리 산술보조프로세서 (arithmetic co-processor) 의지원을받기도함 4/56 2
ALU (Arithmetic Logic Unit) 의입력과출력 5/56 9.2 정수표현 (Integer Representation) 2진수체계에서는 0과 1, 부호및소수점을이용하여수를표현 [ 예 ] -1101.0101 2 =-13.3125 10 컴퓨터에서는 부호와소수점사용불가능 양수및음수의표현방법 부호 - 크기표현 (signed-magnitude representation) 2 의보수표현 (two s complement representation) 6/56 3
부호 - 크기표현 맨좌측비트를부호 (sign) 비트로사용 0 : 양수 1 : 음수 [ 예 ] +18 = 00010010-18 = 10010010 문제점 산술연산과정에서부호와크기부분을별도로처리해야한다 0에대한표현이두개 (+ 0과 0) 이다 0 검사 (zero test) 불편, 수의표현범위감소 7/56 2 의보수표현 음수표현방법 : 양수표현에서각비트를반전 (0 1, 1 0) 시키고, 1 을더한다 [ 예 ] +3 = 00000011 +2 = 00000010 +1 = 00000001 +0 = 00000000-1 = 11111111-2 = 11111110-3 = 11111101 8/56 4
장점 0 에대한표현이한가지이다 산술연산이용이하다 음수화가편리하다 9/56 [ 연습문제 ] -20 을부호 - 크기표현과 2 의보수표현으로표현해보자 (8bit) 10/56 5
수표현의범위 n- 비트데이터의경우 -2 n-1 N 2 n-1-1 [ 예 ] 8-비트 2의보수 : -128 N +127 2 7 1 = 01111111 = +127-2 7 = 10000000 = -128 [ 예 ] 16- 비트 2 의보수 : -32768 N +32767 2 15-1 = 011111111 11111111 = +32767-2 15 = 100000000 00000000 = - 32768 11/56 컴퓨터에서정수표현하기 부호절대값 (signed-magnitude) g 예 ) 부호절대값으로표현된 45 와 -45 12/56 6
컴퓨터에서정수표현하기 2 의보수 (2's complement) 표현 n 비트로표현할수있는수의범위 부호절대값표현 : -(2 n-1-1) ~ 2 n-1-1 2의보수표현 : -2 n-1 ~ 2 n-1-1 13/56 비트길이가다른경우의변환 ( 비트확장 ) 부호 - 크기표현 부호비트가 0 인양수의경우 : 상위비트들을 0 으로채운다 [ 예 ] +18 = 00010010 (8 비트 ) +18 = 00000000 00010010 (16 비트 ) 부호비트가 1 인음수의경우 : 부호비트만 1 로바꾼다 [ 예 ] -18 = 10010010 (8 비트 ) -18 = 10000000 00010010 (16 비트 ) 14/56 7
비트길이가다른경우의변환 ( 비트확장 ) 2 의보수표현 부호비트가 0 인양수의경우 : 상위비트들을 0 으로채운다 [ 예 ] +18 = 00010010 (8 비트 ) +18 = 00000000 00010010 (16 비트 ) 부호비트가 1인음수의경우 : 상위비트들을 1로채운다 [ 예 ] -18 = 10010010 (8 비트 ) -18 = 11111111 10010010 (16 비트 ) 15/56 9.3 정수산술 - 음수화 부호 - 크기표현 부호비트를반전 2 의보수표현 규칙 1. 정수각비트에대하여부울보수를취한다 (1은 0으로 0은 1로변환 ) 2. 결과값에 1을더한다 [ 예 ] +18 = 00010010 비트단위의보수 = 11101101 + 1 11101110 = -18 ( 최상위비트로부터올림수 (Carry) 가발생하면무시 ) -> 0 에대한 2 의보수는? 16/56 8
9.3 정수산술 - 덧셈 연산의결과가양수이면정상적인 2진수로표현된양수 연산의결과가음수이면 2의보수형태의음수를얻는다. 결과값의최상위비트를넘어가는올림수비트가발생되는경우 -> 무시 결과값이한단어로표현할수있는수의범위를초과하는경우 -> 오버플로우 (overflow) 오버플로우는올림수의유무에상관없이발생 17/56 덧셈 18/56 9
오버플로우 (overflow) 덧셈혹은뺄셈결과값이한단어로표현할수있는수의범위를초과한경우. 검출규칙 : 모두양수이거나모두음수인두수를더한결과값의부호가반대가되면오버플로우. 19/56 9.3 정수산술 - 뺄셈 어떤수 ( 감수 : subtrahend) 를다른수 ( 피감수 : minuend) 에서빼기위해서는감수의보수를취하고, 그것을피감수와더한다. 뺄셈에서도오버플로우규칙은덧셈에서와같다. 20/56 10
뺄셈 : a b = a + (-b) 21/56 2 의보수정수의기하학적표현 22/56 11
덧셈과뺄셈을위한하드웨어블록다이어그램 23/56 곱셈 (Multiplication) 곱셈은덧셈과뺄셈보다더복잡하다. 부호없는정수의곱셈과정승수 (multiplier) 의각숫자 (digit) 에대하여부분적 (partial product) 을계산 : 승수의비트가 0이면부분적도 0, 1이면부분적은피승수 (multiplicand) 와동일최종결과값은부분적을한자리수씩왼쪽으로쉬프트하고, 더하여구한다. 1 2 두 n- 비트 2 진정수를곱한결과값의길이는 2n 비트가된다. 24/56 12
곱셈의예 1011 Multiplicand (11) x 1101 Multiplier (13) 1011 0000 Partial products 1011 1011 10001111 Product (143) 25/56 곱셈기 (multiplier) 의내부블럭도 26/56 13
부호없는 2 진수곱셈과정의흐름도 27/56 실행과정의예 28/56 14
2 의보수의곱셈 방법 1 음수를양수로변환 앞의방법으로곱셈수행 승수와피승수의부호가다르면, 결과값을음수화 방법 2 Booth 알고리즘 (Booth s algorithm) 이용 29/56 나눗셈 (Division) 부호없는정수의나눗셈 Divisor 1011 Partial Remainders 00001101 10010011 1011 001110 1011 Quotient( 몫 ) Dividend 001111 1011 100 Remainder( 나머지 ) 30/56 15
부호없는 2 진나눗셈과정의흐름도 31/56 2 의보수나눗셈 교재참조.. 32/56 16
9.4 부동소수점표현 고정-소수점 (fixed-point) 표현 : 소수점이하의수를포함하는실수 (real number) 의표현가능. [ 예 ] 1001.1010 = 2 4 + 2 0 +2-1 + 2-3 = 9.625 표현범위한계 : 매우큰수및매우작은수표현불가능 부동 - 소수점 (floating-point) 표현 : 과학적표기 (scientific notation) 의지수 (exponent) 를사용하여소수점위치이동가능 표현범위확대 [ 예 ] 10 진수에대한부동 - 소수점표현 976,000,000,000,000 = 9.76 x 10 14 0.0000000000000976 = 9.76 x 10-14 33/56 2 진수의부동소수점표현 ±S x B ±E 단, 부호 (sign) : + 혹은 S : 가수 (significand) 혹은멘티사 (mantissa) B : 기수 (base) E : 지수 (exponent) 34/56 17
2 진부동소수점표현의형식과예 (bias = 127 = 01111111) 그림 : 전형적인 32 비트부동 - 소수점형식 35/56 부동소수점표현방법과예 부호 (sign) 비트 : 0 ( 양수 ), 1 ( 음수 ) 지수 (exponent) : 바이어스된수 (biased number) 지수를바이어스된수로표현하는이유는? -> 바이어스개념이없다면 8비트로표현할수있는지수의범위는 0부터 255까지고, 음의지수는표현할수없다. 지수 + 바이어스 -> 바이어스된지수예 ) 지수 : -1, 바이어스 127 을사용한다면바이어스된지수 = -1+127 = 126 126을 8비트로나타내면 01111110 36/56 18
실제지수값 --------------------------------- 지수비트패턴절대값바이어스-127 바이어스-128 ------------------------------------------------------------------------------ 11111111 255 + 128 +127 11111110 254 + 127 +126 : : : : 10000001 129 + 2 + 1 10000000 128 + 1 0 01111111 127 0-1 01111110 126-1 - 2 : : : : 00000001 1-126 -127 00000000 0-127 -128 ------------------------------------------------------------------------------ 37/56 부동소수점표현방법과예 ( 계속 ) 가수 ( 멘티사 ) : 정규화 (normalized) 표현사용 가수필드의첫번째비트가 1 이되도록지수조정 ± 1.bbbbbb.bbb x 2 ±E [ 예 ] 110 x 2 2 = 0.0110 x 2 6 = 1.10 x 2^4 ( 정규화표현 ) 결과적으로가수필드의첫번째비트가항상 1 이되므로, 저장하지않는다 (hidden bit). 위 [ 예 ] 의수에대한부동소수점표현 (bias=127) : 0 10000011 10000000000000000000000 38/56 19
IEEE 754 표준 부동소수점수의표현을위하여제정된국제표준 ± 1.bbbbb.bbb x 2 ±E 주요사항들 32- 비트 / 64- 비트형식 지수 (exponent) : 8-비트 / 11-비트, 바이어스 = 127 / 1023 가수 (mantissa) : 23 비트 /52 비트, hidden bit (= 1) 표현영역 : 10-38, 10 38 / 10-308, 10 308 39/56 IEEE 754 형식들 IEEE 에관한추가적참고사항들 : 표 8.3, 표 8.4 40/56 20
IEEE 754 표현예 (N = 13.625 ) 13.625 10 = 1101.101 2 = 1.101101 2 3 부호 (S) 비트 = 0 (+) 지수 E = 00000011 + 01111111 = 10000010 ( 바이어스 127을더한다 ) 가수 M = 10110100000000000000000 ( 소수점좌측의 1은제외한다 ) 41/56 컴퓨터에서실수표현하기예제 IEEE 754 표준 정규화 1.101 2^(-1) 지수처리 지수 (-1)+ 바이어스 (127) = 126 결과 0 01111110 10100000000000000000000 42/56 21
컴퓨터에서실수표현하기예제 바이어스 127 로아래의두수를 IEEE754 표준 (32 비트 ) 으로표현해보자. -0.001101 x 2 2 0.01110 x 2 6 43/56 컴퓨터에서실수표현하기예제 아래수를 IEEE 754 표준의 32-비트부동소수점형식으로나타내어라 (Bias 127) 384 44/56 22
부동소수점수의표현범위 (range) 32- 비트수 ( 지수 : excess-127 코드사용 ) 의경우 -(1 2-24 ) x 2 128 ~ - 0.5 x 2-127 사이의음수들 05 0.5 x 2-127 ~ (1 2-24 ) x 2 128 사이의양수들 [ 참고 ] 2 128 3.4 x 10 38 [ 비교 ] 32-비트고정-소수의경우 : 2-127 5.88 x 10-39 2 31 2.1 x 10 9 정확도 (accuracy) 가수의비트수에따른오차 (error) = LSB의가중치 (weight) [ 예 ] 23-비트가수의경우 : 2-23 1.2 x 10-7 45/56 그림 9.19 표현가능한수의범위비교 46/56 23
9.5 부동소수점산술 +, -, x, / 계산과정 (X = X S ⅹB Xe, Y = Y S ⅹB Ye ) 덧셈 : X + Y = (X S ⅹB Xe-Ye + Y S ) ⅹB Ye 뺄셈 : X - Y = (X S ⅹB Xe-Ye -Y S ) ⅹB Ye 단, X e Y e 곱셈 :XⅹY=(X )ⅹB Xe+Ye S ⅹY S 나눗셈 : X/Y = (X S / Y S ) ⅹ B Xe-Ye 47/56 10 진수에대한계산예 : X = 0.3 x 10 2 = 30 Y = 0.2 x 10 3 = 200 X + Y = (0.3 x 10 2-3 + 0.2) x 10 3 = 230 X Y = (0.3 x 10 2-3 -0.2) x 10 3 = (-0.17) x 10 3 = -170 XxY=(03x02)x10 (0.3 x 0.2) x 2+3 =006x10 0.06 5 = 6000 X / Y = (0.3 / 0.2) x 10 2-3 = 1.5 x 10-1 = 0.15 48/56 24
덧셈과뺄셈 1 2 3 4 0인지검사가수의자리수가일치하도록위치조정 (alignment) 가수들의더하기혹은빼기결과값의정규화 (normalization) [ 예 ] 부동소수점덧셈 2지수조정 0.110100 2 3 ===> 0.001101 2 5 + 0.111100 2 5 + 0.111100 2 5 --------------------- --------------------- 4 정규화 1.001001 2 5 => 1.001001 2 5 3 더하기 ( 최종결과 ) 49/56 곱셈과나눗셈 2 진수부동소수점곱셈과정 1 가수들을곱한다. 2 지수들을더한다. 3 결과값을정규화한다. [ 예 ] (0.1011 2 3 ) (0.1001 2 5 ) 1 가수곱하기 : 1011 1001 = 01100011 2 지수더하기 : 3 + 5 = 8 3 정규화 : 0.01100011 2 8 = 1.100011 2 6 ( 결과값 ) 50/56 25
부동소수점곱셈과정 51/56 2 진수부동소수점나눗셈과정 1 가수들을나눈다. 2 피젯수의지수에서젯수의지수를뺀다. 3 결과값을정규화한다. 52/56 26
부동소수점나눗셈과정 53/56 연산결과로발생할수있는문제점들 지수오버플로우 (Exponent overflow) : 양의지수값이최대값초과 + 혹은 - 로세트 지수언더플로우 (Exponent underflow) : 음의지수값이최대값초과 0으로세트 가수언더플로우 (Significand underflow) : alignment 과정에서가수비트를잃는경우 반올림 (rounding) 가수오버플로우 (Significand ifi overflow) : 두가수의덧셈결과로 MSB에서올림수발생 재조정 (realign-ment) 54/56 27
HW #4 연습문제 9.1, 9.11, 9.23, 9.24 Due Date: 다음시간전까지 55/56 질의및응답 Thank You! 수고하셨습니다. 56/56 28