본문 바로가기
관/핫한 컴퓨터구조 공부

컴퓨터 구조론 개정 5판 3장 기본문제 풀이.(기본문제 1~14번까지, 연습문제 1~7번, 12~13번까지).

by 4차원 박스 2020. 10. 11.

3장 은 보수에 대한 내용을 풀이해 보았는데 많이 빈약 합니다.

다른 더 좋은 곳을 구글링 해보시길 추천 드립니다.

빈약한 내용도 도움이 되길 바랍니다!

<기본문제>

 

 

 

3.1

2의 보수 표현이 1의 보수 표현보다 더 널리 사용되고 있는 주요 이유는?

 

: . 표현할 수 있는 수의 개수가 하나 더 많다. 1의 보수는 n개의 비트가 주어졌다면 2n-1-1을 한 값 까지만 표현이 가능하지만 2의 보수는 2n-1승의 표현이 가능하기 때문이다.

 

 

3.2

10진수 -75 에 대한 2의 보수 표현은?

 

: . 10110101. 답이 8비트로 되어있어서 잠시 헷갈렸다. 간단히 752진수로 나타내고 1의 보수를 취한뒤 +1을 하면 답이 나온다.

  

3.3

2의보수 1110100010 진수로 변환하면?

  

: . -24. 주어진 2의보수에 다시 보수를 취하고 1을 더한뒤 2진수를 10진수로 바꾸는 방식을 취하였다.

계산 결과 24이다.

 

 

3.4

특정 비트들을 마스크 시키기 위하여 사용되는 논리 연산은?

  

: .AND연산. 마스크 연산은 값을 클리어하기 위해 사용하며, 두개모두가 1이 아니면 0을 반환하는 AND연산을 사용한다.

 

 

3.5

두 수를 비교하기 위하여 사용되는 논리 연산은?

 

: .XOR연산. 두개가 모두 다를때 1을 반환하는 특성을 가진 XOR연산을 사용하여 비교한다.

 

 

3.6

A 레지스터에 01101010이 저장 되어 있는 상태에서 B 레지스터와의 XOR 연산을

이용하여 상위 5비트를 보수값으로 바꾸려면 B에 들어갈 값은?

 

: .11111000. 선택적 보수연산을 하려면 원하는 위치에 1을 넣고 나머지는 0으로 설정한뒤에 XOR연산을 수행한다.

 

 

3.7

A 레지스터에 2의 보수로 표현된 데이터 10101101이 있을때 산술적 우측 시프트를

두번 수행한 결과는?

 

: .11101011 부호를 나타내는 가장 처음인 1은 그대로 유지한채 다음 2번이 복사되고. 우측 시프트를 두번 반복한 결과를 나타내는것을 찾는다.

 

3.8

A 레지스터에 01011011 이 있을때 좌측 순환 시프트를 한번 수행한 결과는?

 

: .10110110. 좌측 시프트를 하되 최상위 비트가 최하위 비트로 이동한 결과를 찾는다.

 

 

 

3.9

A 레지스터에 01011011 이 있고 C플래그에 1이 있을때 SHRC연산을 한번 수행한 결과는?

 

: .10101101. 1 - 01011011 인 상태에서 C플래그에 있는 값부터 우측 시프트를 수행한 결과를 찾는다.

 

 

3.10

A레지스터에 01011011 이 있고 C플래그에 0이 있을때 RLC연산을 두 번 수행한 결과는?

 

: .01101100. 0-01011011 의 상태에서 순환 우측 시프트를 두 번 수행한 결과를 찾으면 된다.

 

 

 

3.11

다음 2의보수 덧셈들중 오버플로우가 발생하는 것?

 

: .0010+0110. 계산을 하면 3번째 비트에서 올림수, 4번째에서 발생하지 않으므로 XOR연산 결과 1 즉 오버플로우가 발생함을 알 수 있다.

 

 

3.12 다음중 정규화된 표현?

 

: . 0.101100x2^5. 정규화된 표현은 소수 첫째자리가 1으로 표현이 된다.

 

 

3.13

2진수 0.1011*2^5IEEE 754 표준 부동소수점 형식으로 표현할 때 가수의 처음 다섯비트는?

 

: .01100. IEEE 754 표준 부동소수점 형식에서 2진수 0.1011*2^5 1.0110*2^4 이므로 가수의 첫 다섯비트는 01100 이다.

 

 

3.14

2진수 0.1011*2^5IEEE 754 표준 부동소수점 형식으로 표현할 때 지수는 어떤 값?

 

: .10000011. IEEE 754 표준 부동소수점 방식에서 1.0110*2^4 이므로 4승을 나타내는 00000100 에다 12701111111을 더하면 10000011 이 나온다.

 

 

<연습문제>

 

 

 

3.1 다음 수들에대한 8비트 길이의 부호화-크기, 1의 보수 및 2의 보수 표현을 구하라.

 

부호화 크기의 음수를 결정하는 방법은 가장 왼쪽의 수를 1로 하는 방법이다.

기본적으로 양수에서 음수를 표현하는 방식이 기본으로 자리 잡는다.

(보수든 뭐든 신경쓰지 않고 진행해준다.)

기본적으로 양수 표현은2의 보수에서는 2진법과 동일한 방식이되 1의 보수는 반전을 해준다.

 

(1) 19

 

: 00010011, 00010011, 00010011

 

(2) -19

 

: 10010011, 11101100, 11101101

 

(3) 124

 

: 01111100, 01111100, 01111100

 

(4) -124

 

: 11111100, 10000011, 10000110

 

 

3.2 문제3.1의 각 결과값을 16비트 길이 표현으로 확장하라

 

8비트에서 16비트로 늘었으니 부호화크기는 같은 방식으로 8개더 늘리고

1의보수,2의보수는 양수면 0으로 음수면 1으로 쫙 채운다.

 

(1) 19

 

: 0000000000010011, 0000000000010011, 0000000000010011

 

(2) -19

 

: 1000000000010011, 1111111111101100, 1111111111101101

 

(3) 124

 

: 0000000001111100, 0000000001111100, 0000000001111100

 

(4) -124

 

: 0000000001111100, 1111111110000011, 1111111110000110

 

 

3.3 2의 보수로 표현된 2진수 11101101에 대한 10진수를 예제 3-5,3-6의 방법으로 각각 구하고

 

값이 일치하는지 비교하라.

 

: 예제 3-5 의 방법대로 하면 -2^7+(2^6+2^5+2^3+2^2+2^0) 을 계산하면 -19이다

 

예제 3-6 의 방식으로 하면 00010011이 얻어지고 여기서 2진법을 10진법으로 바꾸는 방식으로

 

계산하면 -(2^4+2^1+2^0) = -19 이다.

 

 

결론적으로 두 가지 방식의 결과 값이 일치한다.

 

 

 

3.4 그림3-2의 논리 연산회로에 NAND,NOR,exclusive-NOR 연산기능을 추가하여 설계하고 제어신호들도 정의하기.

 

3.5 A레지스터에 10101101, B레지스터에 11000011이 각각 저장된 상태에서 다음 논리연산을 수행한 결과구하기

 

(1) AND 연산 : 10000001. 두 개 모두 1일 때 1을 반환하므로

(2) OR 연산 : 11101111. 둘중 하나 1을 반환하면 1을 반환한다, 00일 경우만 0을 반환하므로

(3) XOR 연산 : 01101110. 두 개의 형태가 모두 다를 때 1을 반환하므로

 

3.6 아래 좌측과 우측 연산들 간에 동일한 결과를 산출하는 연산끼리 연결하기

AND 연산 : 마스크. B레지스터의 0인 비트들과 같은 위치에있는 A의 비트를 0으로 클리어하는 방법으로 AND연산을 이용한다.

OR 연산 : 선택적-세트. B레지스터의 비트중 1로 세트된 비트와 같은 위치에있는 A의 비트를 1로 세트하기 위해 OR연산을 이용한다.

XOR 연산 : 선택적-보수. B레지스터의 비트중 1로 세트된 비트와 같은 위치에있는 A의 비트를 보수로 변환하기 위해 XOR연산을 이용한다.

 

3.7 A레지스터에 저장되어있는 데이터 11010010의 우측 다섯비트에 01110을 삽입하는 방법

설명하라.

 

: 삽입연산을 진행한다. 먼저 마스크연산을 통해 원하는 위치의 비트를 0을 초기화를 시킨후 OR연산을 통해 새로 삽입할 비트를 담는다.

1차적으로 B레지스터에 11100000를 마스크 연산으로 계산한다.

마스크로 나온 결과는 11000000 이다.

여기에 OR연산으로 B레지스터에 00001110을 넣으면

최종적으로 11001110의 결과가 등장한다.

 

3.12 2의 보수로 표현된 아래 수들에 대한 덧셈을 수행, 오버플로우가 발생하였는지 검사.

(1) 100100+111010 : 011110의 값이 나오며, C6에서 1,C5에서 0 즉 오버플로우가 발생하였다.

(2) 11001100+10111010 : 100000110의 값이 나오며, C8,C7에서 둘다 올림수가 발생하므로, 오버플로우는 없다.

 

3.13 10진수 56,-56,89.-89에 대한 8비트 길이의 2의 보수표현을 구하고

아래 뺄셈들을 덧셈을 이용하여 수행하고, 오버플로우가 발생했는지 검사하라.

 

2의보수 표현

56=00111000

-56=11001000

89=01011001

-89=10100111

(1) 89-56 : 01011001 + 11001000 이다. 덧셈결과 00100001 이고 C8,C7에서 둘다 올림수가 발생하여 오버플로우가 발생하지 않는다.

(2) (-56)-89 : 11001000 + 10100111 이다. 덧셈결과 01101111 이고, C8에서만 올림수가 발생하여 오버플로우가 일어났다.

(3) 56-(-89) : 00111000 + 01011001 이다. 덧셈결과 10010001이고 C7에서만 올림수가 발생하여 오버플로우가 일어났다.

(4) 56-89 : 00111000 +10100111 이다. 덧셈결과 11011111 이고 C8,C7 둘다 올림수가 발생하지 않아 오버플로우가 발생하지 않는다.

댓글