Blog | Tag | Local | Guest | Login | Write |  RSS

1. LSB(least significant bit)

MIPS 워드에서 가장 오른쪽 비트 0 를 의미

 

2. MSB(most significant bit)

MIPS 워드에서 가장 왼쪽 비트 비트 31을 의미

 

*. 음수를 표현하는 방법에는 여러가지가 있는데 부호와 크기 표현법, 1의 보수 표현법, 2의 보수 표현법 등이 있다.

부호와 크기 표현법 : 부호비트를 사용하여 음수를 표현하는 방법인데, 부호비트를 위치나 양의 0, 음의 0로 구분 등의 단점 때문에 현재는 잘 사용되지 않는다.

2의 보수 표현법 : 앞선 0들은 양수를 의미하고 앞선 1들은 음수를 의미하는 표현법이며, 음수는 해당 수의 보수 + 1로써 표현할 수 있다.

예) 1111 1111 1111 1111 1111 1111 1111 1100 two 의 10진수 값은 ?

1 이 앞서있으므로 음수로 판단되며, - 1 한 다음 보수를 구하면 된다. 즉, - 1 하면 마지막 4 비트가 1011 이되고

다시 보수를 구하면 0000 ~ 0000 0100 이되어서 4 가 되고 음수이므로 -4가 정답이다.

 

*. 부호확장(sign extension)

유부호 수와 무부호 수의 산술연산 및 적재시에 레지스터의 남는 곳을 채우기 위해 부호를 반복하여 복사하는 작업.

lb(load byte)는 바이트를 부호있는 수로 간주하고 남은 24비트를 부호확장하여 채운다.

lbu(load byte unsigned)는 부호없는 정수로 간주하여 24비트를 0으로 채운다.

 

reg $t0 에는 1111 1111 1111 1111 1111 1111 1111 1111 two

reg $t1 에는 0000 0000 0000 0000 0000 0000 0000 0001 two

 

1) slt $t0, $s0, $s1 #유부호 비교

2) sltu $t1, $s0, $s1 #무부호 비교

 

$s0 는 유부호 정수는 -1, 무부호 정수는 4,294,967,295 ten

$s1 은 모든 경우에 1 을 의미하므로

1) 의 결과는 -1ten < 1ten 이므로 1을 갖게되고

2) 의 결과는 4,294,967,295ten < 1ten 이 아니므로 0을 갖게된다.

 

4. 인터럽트(interrupt)

프로세서 외부에서 발생하는 예외(어떤 아키텍처에서는 모든 예외를 인터럽트로 표현한다)

internal-exception 에는 overflow, zero-divide 등이 있고 external-exception 에는 keyboard I/O에 의해 발생

 

5. 예외

인터럽트라고도 불린다. 프로그램 수행을 방해하는 계획되지 않은 사건. 오버플로우를 탐지하기 위해 사용한다.

MIPS의 경우는 EPC(exception program counter)라고 불리우는 레지스터를 제공하고 Intel과는 다르게 친절한 오류처리를 해주지 않고 OS가 직접 EPC를 통해서 찾아야만 한다.

 

10. 과학적 표기법(scientific notation)

소수점의 왼쪽에는 한 자릿수만을 갖도록 한 표기법

 

11. 정규화(normalization)

선행하는 0이 없는 표기법

 

12. 부동 소수점(floating point)

이진 소수점의 위치가 고정되어 있지 않은 수로 표현하는 컴퓨터 연산

 

13. 분수부분(fraction)

일반적으로 0과 1사이의 값으로 분수 필드에 위치한다 - 정밀도를 의미

 

14. 지수(exponent)

부동 소수점 숫자 표현의 지수 필드에 들어간 값 - 크기를 의미

 

*. MIPS의 일반정밀도

| [31] sign-1-bit | [30 ~ 23] exponent-8-bits | [22 ~ 0] fraction-23-bits |

 

15. 오버플로우(overflow)

양의 지수가 지수 부분에 표현될 수 없을 만큼 클때

 

16. 언더플로우(underflow)

음의 지수가 지수 부분에 표현될 수 없을 만큼 작을때

 

*. MIPS의 2배정밀도

| [31] sign-1-bit | [30 ~ 20] exponent-11-bits | [19 ~ 0] fraction-32-bits |

 

*. 부동 소수점의 덧셈 (단, 유효자리 4자리, 지수 2자리 저장가능)

: 9.999 ten * 10^1 + 1.610 ten * 10^-1

 

1. 작은 수의 유효자리를 지수가 큰 수의 것과 일치할 때까지 오른쪽으로 자리 이동

0.016 ten * 10^1 (단, 유효자리수가 4자리 이므로 1은 제거)

2. 유효자리를 서로 더한다.

10.015 ten * 10^1

3. 정규화를 위해서 정돈이 필요하다.

10.015 ten * 10^1 = 1.0015 ten * 10^2

4. 유효자리가 4자리 이므로 자리맞춤을 하는데 반올림을 적용한다

1.002 ten * 10^2

5. 단, 연속된 9에 의한 자릿수 변경의 경우 3번의 단계를 다시 거쳐야만 한다.

 

*. 부동 소수점의 곱셈 (유효자리수는 4자리, 지수는 2자리까지 저장 가능)

: 1.110 ten * 10^10 * 9.200 ten * 10^-5

 

1. 지수를 단순히 더하여 지수를 계산한다.

10 + (-5) = 5

2. 유효자리의 곱셈

10212000 ten 인데 우측 소숫점의 합은 6개 이므로

10.212000 ten 으로 계산되어진다. 즉, 10.212 * 10^5 이 된다.

3. 정규화를 하게되면

1.0212 ten * 10^6

4. 유효자릿수를 맞추면

1.021 ten * 10^6

5. 결과의 부호는 원래 피연산자의 부호에 따라 결정되므로 부호가 같으면 양수, 그렇지 않으면 음수이다.

최종 결과는 +1.021 ten * 10^6 이다.

 

*. 행 우선 순서(row major order)

배열의 배치방식을 의미하며 C 또는 많은 프로그래밍 언어에서 array(row, col)형태의 배열방식을 의미한다.

단, 포트란의 경우는 열 우선방식(column major order)을 사용한다.

 

19. 보호비트(guard bit)

부동 소수점 계산 도중에 필요한 오른쪽 두 개의 추가비트 중 첫번째 비트; 자리맞춤의 정확도를 높이기 위해 필요.

 

20. 자리맞춤비트(round bit)

부동 소수점 계산 도중에 생기는 겨로가가 부동 소수점 형식에 일치하도록 하는 방법; 목표는 형식에 맞는 가장 가까운 수를 찾는 것이다.

 

*. 예제 - 유효 자릿수가 3자리인 경우

보호자리와 자리맞춤 자리를 이용한 결과와 그렇지 않은 결과 비교

2.34 ten * 10^2 + 2.56 ten * 10^0

1) 2.3400 ten + 0.0256 ten = 2.3656 ten 이며 2.37 ten * 10^2 가되어 반올림 효과를 본다.

2) 2.34 ten + 0.02 ten = 2.36 ten 이되며 1)과 가장 오른쪽 자리의 수가 1이 작게된다.

 

21. ulp(unit in the last place)

실제 값과 표현할 수 있는 값의 최하위 유효자리 비트 중에 서로 다른 비트의 수.

부동 소수점의 정확도는 유효자리의 최하위 비트 중 몇 개가 잘못된 값을 갖는지에 따라 결정되며 이 척도가 ulp이다.

 

*. 자릿수 맞춤 - 4가지

1) +∞자리맞춤 : 항상 자리 올림 ( -1.6 := -1.0, -0.4 := 0, 0.4 := 1, 1.6 := 2 )

2) -∞자리맞춤 : 항상 자리 내림 ( -1.6 := -2.0, -0.4 := -1.0, 0.4 := 0, 1.6 := 1 )

3) truncate : 잘라내기 ( -1.6 := -1.0, -0.4 := 0, 0.4 := 0, 1.6 := 1 )

4) round-off ( -1.6 := -2.0, -0.4 := 0, 0.4 := 0, 1.6 := 2 )

 

*. 오류 및 함정

오류 : 부동 소수점의 덧셈은 결합법칙이 성립한다. (따라서, x + ( y + z ) = ( x + y ) + z )

문제는 두 개의 매우 큰 수의 덧셈에 어떤 작은 수를 더할 때에 발생할 수 있으며 아래와 같이

1) x + ( y + z ) = -1.5 ten * 10^38 + ( 1.5 ten * 10^38 + 1.0 )

2) ( x + y ) + z = ( -1.5 ten * 10^38 + 1.5 ten * 10^38 ) + 1.0

1) 번의 경우는 ( 1.5 ten * 10^38 + 1.0 ) 결과가 0 이 되어서 0 이 되지만

2) 번의 경우는 1이 되어서 결합법칙이 성립하지 못하는 예가 된다.

 

오류 : 한 비트 왼쪽 자리이동 명령어가 2를 곱해준 거소가 같은 결과를 갖듯이 오른쪽 자리이동 명령어는 2로 나누어준 것과 같은 결과를 갖는다.

부호비트가 0으로 채워지는 결과를 낳게되어 전혀다른 값을 가질 수 있으며, 단, PowerPC는 특별한 덧셈 명령어(add with carry)와 빠른 자리이동 명령어(shift right algebraic)를 가지고 있어서 지원가능하다.

 

함정 : MIPS 명령어 addiu는 16비트의 수치값(immediate field)을 부호확장하여 사용한다.

MIPS는 수치값을 사용하는 뺄셈 명령어를 사용하지 않으므로 (뺄셈 대신에 음수를 더한다) 음수는 부호확장 되어야만 한다. 따라서 MIPS 아키텍처는 수치값 필드를 부호 확장하여 사용한다.

 

오류 : 이론 수학을 전공하는 사람만이 부동 소수점 연산의 정확성에 신경을 쓴다.

인텔 칩의 버그는 실제 필드에서 사용하는 어플리케이션의 이용자들에 의해 발견되기도 하였다.

 

*. 결론

컴퓨터의 연산은 제한된 표현의 정밀도 때문에 항상 주의를 기울여야하며, 제한된 정밀도보다 더 크거나 작은 수를 계산하는 것은 잘못된 연산 즉, 오버플로우, 언더플로우가 발생할 수 있으므로 유의해야만 한다.

그리고 부동 소수점의 연산은 실제 값을 근사값으로 표현해야만 하는 문제가 항상 존재하며, 실제 값에 가장 근접하다는 것을 보장하기 위해 주의가 필요하다.


- 시험기간이라서 용어가 중요하더군요 내용은 어느분이 잘 정리해서 올려놓은것을 발취했습니다. 외우느라 머리가 아프네요
중간고사 시험기간인데 모두들 시험 만점받으세요^^