overflow 에 대한 번역인데 이해가 안되네요
글쓴이: 천재태지서주영 / 작성시간: 수, 2003/10/22 - 3:53오후
'성공과 실패를 결정하는 1%의 CPU 구조와 원리' 라는 책에 있는 구절입니다.
전공 번역서가 그런게 많긴하지만... 이 책 참 재밌네요.
알 수 없는 한글과 어이없는 맞춤법, 띄어쓰기를 비롯하여
두 단어를 바꿔치우는 필살기와 해독불가능한 국어 문장 반격에
글자 빼먹기, 있으면 안되는 자리에 전혀 필요 없는 글자 넣기 신공 등으로 독자를 마법의 세계로 인도하고 있습니다. ㅡ_ㅡ;;;
아무튼 제가 궁금한 것은 오버플로우를 설명한 아래 부분에서 밑줄 치고 굵게 표시한 부분입니다.
Quote:
2의 보수를 사용하는 이진수의 덧셈이나 뺄셈에서 최상위 비트 다음의 비트로부터의 자리 올림(carry)을 Cs, 최상위 비트로부터의 자리올임을 Cp라 할 때 Cs=0, Cp=1 이거나 Cs=1, Cp=0 일 때.
이 상태는 주어진 자릿수의 이진수로는 표시할 수 없는 큰 양수 또는 작은 음수이다.
예를들어 위 연산은 십진수로 양수 6과 5를 더하는 것이다.
2의 보수에서는 최상위 비트가 부호를 나타내므로 4비트로는 -8에서 +7가지의 수를 나타낼 수 있는데 두수를 더하면 십진수로 양수11이 되므로 4비트는 나타낼 수 없다.
따라서 위의 연산은 오버플로우가 발생하는 경우이며, 자리올림을 보면 오버플로우가 발생했음을 알 수 있다.
이 부분입니다. 그냥 오버플로우라면 Carry in 과 Carry out 을 비교하는게 제가 아는 방법이지만 저건 뭔가 다른것 같아서 열심히 디벼보고 분석해봤지만 도무지 이해를 할 수 없군요.
누가 설명 좀 해주시면 감사하겠습니다.
Forums:
음...
cpu의 상태레지스터가 있는데, 이것중에 자리올림을 나타내는 어떤 비트 이름을 Cs,Cp라 각각명할때..
cpu가 산술계산을 해서 Cs와 Cp를 이러이러하게 변경시켰고,
연산후 Cs와Cp비트를 참조해서 출력값이 양수인지 음수인지 결정한다는내용을 영어 원문대로만 번역한것이 아닐까요??
- 위글이 더복잡 하네요.. :roll:
--
Linux강국 KOREA
http://ydongyol.tistory.com/
추가하자면
인텔에서 받은 책 뒤져봤습니다..
1번책 3-14페이지에 status flags에대해 나왔군요...
최상위 비트 다음의 비트로부터의 자리 올림(carry)을 Cs ==> CF (carry flag)
최상위 비트로부터의 자리올임을 Cp ==> OF (over flag)
영어가 짧아서 확실하지는 않습니다만..비슷한 내용같습니다..
--
Linux강국 KOREA
http://ydongyol.tistory.com/
ydongyol 님 답변 감사합니다,저는 처음에 '최상위 비트'
ydongyol 님 답변 감사합니다,
저는 처음에 '최상위 비트' 를 MSB 로 간주했고 '최상위 비트 다음의 비트' 를 MSB 옆의 비트로 간주하고 분석을 했었는데,
그렇다면 Cs 와 Cp 라는건 데이터에 있는 비트와는 관계가 없이 따로 status flags 로 설정된 비트를 말하는건가요?
그럼 번역자가 번역을 한게 아니라 소설을 쓴건데 ㅡ_ㅡ;
이 책 참 난감하네요.
status flags 에 대한건 따로 찾아보아겠군요.
답변 감사합니다~
천재태지서주영
제가 보기에는 상태 비트를 말하는게 아닌데요...오버 플로우라는게 말
제가 보기에는 상태 비트를 말하는게 아닌데요...
오버 플로우라는게 말그대로 표현할 수 있는 숫자 범위를 넘어서는 값을 말하는 것이구요 2의 보수 연산에서 최상위 비트는 부호 비트가 되니까요...
부호 비트에서 자리 올림이 있어나거나 혹은 부호비트가 0인 상태(즉, 양수)에서 그 밑에 비트에서 자리올림이 일어난다는 건 양수의 최고값을 넘어서는 상태를 의미하는 것이므로 오버 플로우가 일어나는 것이다...라고 말하는 것이네요...
즉, sizeof(int) == 2바이트라고 했을때, 0111 1111 1111 1111 이 양수 최고 값일텐데 (인용문에서 처럼 최상위 비트는 0, 그 옆 비트는 1)이태 최상위 비트 바로 옆 비트에서 자리올림이 일어나면 1000 0000 0000 0000 이 되고 이 값은 음수 최대값인 -32768이 되죠...(오버플로우가 된거죠)
또 1000 0000 0000 0000에서 최상위 비트가 자리올림이 된다면 0000 0000 0000 0000이 되는 건데...이것도 오버플로우에 의한 잘못된 연산인 겁니다...필자는 이걸 말하고자 한게 아닌지...
------------------------
http://agbird.egloos.com
음... 뭔가 실마리가.
음.. Agbird 님의 답변에 의거해서 다시 생각해보았습니다.
4bit 의 연산을 생각하면, 각 비트를
[MSB] A1 A2 A3 A4 [LSB] (A1 은 부호비트)
라고 하면, A2 에서 A1 으로 자리올림되는 수를 Cs, A1 에서 그 위로 자리올림되는 수를 Cp 라고 책에 있는 말대로 가정을 했습니다.
그리고 생각을 해보니 뭔가 맞아떨어지는것 같더라구요.
어제도 해봤는데 머리가 안돌아갔는지... ㅡ_ㅡ;
어차피 양수+음수 혹은 음수+양수의 경우에는 오버플로우가 발생하지 않으니 제외하고, 더하는 두 수가 양수의 경우는 Cs=1, Cp=0 일 때 오버플로우가 일어나고 둘 다 음수의 경우는 Cs=0, Cp=1 일 때 오버플로우가 일어나는군요.
양수의 경우는
일 때 Cs=1, Cp=0 이고 오버플로우가 발생했습니다.
음수의 경우는
일 때 Cs=0, Cp=1 이고 오버플로우가 발생했습니다.
제가 체크해본 결과 양수의 경우 Cs=1, Cp=0 인 경우 오버플로우가 아닌경우는 없었고 음수의 경우 Cs=0, Cp=1 인 경우 오버플로우가 아닌경우는 없었습니다.
그리고 오버플로우가 아닌 정상적인 상황에서는 Cs=0, Cp=0 이거나 Cs=1, Cp=1 이었습니다.
예를 들면
Cs=0, Cp=0 혹은 Cs=1, Cp=1 이었고 오버플로우가 발생하지 않았습니다.
물론 여기서도 어차피 양수+음수 혹은 음수+양수는 오버플로우가 발생하지 않기 때문에 고려하지 않았습니다.
결론을 말하자면 ,
가 되겠네요. 그냥 간단히 부호비트의 변화로도 알 수 있지만 저런 방법도 실제로 회로가 돌아가는 면에서보면 좋은 방법이라는 생각이 드는군요.
결국 이것 가지고 이틀을 그냥 보냈네요 ^^;;
천재태지서주영
좀 더 생각해보니 제가 결론으로 썼던 [quote][MSB] A1
좀 더 생각해보니 제가 결론으로 썼던
부분이 바로 부호비트의 변화를 체크하는 방법중 하나네요 ^^;
즉, 기본적으로 오버플로우는 부호비트의 변화로 알 수 있고 그 변화를 알 수 있는 방법의 하나가 위의 방법이다. 군요.
끝
천재태지서주영
Re: overflow 에 대한 번역인데 이해가 안되네요
별로 심각하게 생각할필요가 없을것 같은데요..
저말은 결국.. 큰수에 큰수를 더하면. 오버플로우고..... 큰음수에 큰음수를 더하면 오버플로우다 그뜻으로 보면될꺼 같은데요..
먼소리를 저렇게 어렵게 해놨는지 그사람의 생각하는방식이 저는의문스럽네요..
일부러 책읽는사람 골탕먹게하기위한작전인가.. 아니면 괜히 어렵게 보이기위함인가..
궂이 어렵게 최상위비트에 1이 더해지는경우를 양수의 합으로부터 오는경우와
음수의 합으로부터 오는경우 두가지로 말하면서.. 그경우를 기호로 표시하고
그기호의 값이 01 혹은 10 일경우다 라고하는 즉, 둘중한가지경우다란 뜻이되네요..
부가적으로 11 일경우나 00 일경우는 양수에 음수를 더하는경우이거나 음수에 양수를 더하는경우가 되므로.. 정상이된다는뜻도 되겠죠..
----------------------------------------------------------------------------
[quote]먼소리를 저렇게 어렵게 해놨는지 그사람의 생각하는방식이 저는
제 생각에는 이렇게 표현한 이유는 이 책이 CPU에 관한 책이기 때문에 컴퓨터 아키텍쳐적인 관점에서 표현하려한 것이라 생각합니다.
단순히 수 최대값을 초과하거나 음수 최소값을 넘어서는 것이 오버플로우다' 라고 하는 것은 컴퓨터 아키텍쳐를 고려하지 않은 정의이죠...
이런 정의를 보았을 때 이것을 구현하고자 한다면 결국 '최상위 비트를 cs, 그 옆비트를 cp라고 할때 cs = 0, cp = 1, 에서 cp가 자리올림할때, 혹은 cs = 1일때 cs가 자리올림을 할때 오버플로우를 발생시키게 한다' 라는 사고방식을 이끌어 낼 수 밖에 없는 것입니다...
------------------------
http://agbird.egloos.com
댓글 달기