3장. 생능_컴퓨터구조론_연습문제

728x90

3.1 양수에 대해서는 표현이 모두 동일하므로 음수에 대한 표현 (2)(4)에 대해서만                                                                   8비트 부호화-크기 1의 보수 2의 보수 표현울 각각 구하고자 한다.

 (1) 19 = 00010011

 (2) -19 10010011 11101100 11101101

 (3) 124 = 01111100

 (4) -124 11111100 10000011 10000100

 

3.2 각 결과값을 16비트 길이 표현으로 확장하게 되면 2진수와 2의 보수에 대한 비트확장 표현이 다르므로 구분하여 구하고자 한다. 1의 보수에 대한 비트확장은 따로 구하지 않았다.

-2진수의 경우 부호비트를 가장 좌측으로 옮긴 뒤에 상위 비트를 0으로 채운다.

-2의 보수의 경우 음수는 상위비트에 1, 양수는 상위비크에 0으로 채운다.

 

 (1) 19 (2진수) = 00000000 00010011

 (2) -19  (2진수) = 10000000 00010011 (2의 보수) = 11111111 11101101

 (3) 124 (2진수) = 00000000 01111100

 (4) -124  (2진수) = 10000000 01111100 (2의 보수) = 11111111 10000100

 

3.3

2의 보수 11101101 에 대한 10진수를

 (예제 3-5) 방법으로 구하게 되면

A = -128 + (1 * 2^6 + 1 * 2^5 + 1* 2^3 + 1*2^2 + 1* 2^0)

= -128 + 109

= - 19 이다.

 (예제 3-6) 방법으로 구하게 되면

우선 양수로 반전시킨 값울 구한 뒤, 그 값에 대한 10진수를 계산하여 부호를 붙인다.

11101101을 양수로 바꾸게 되면 00010011이다.

00010011에 대한 10진수를 구하게 되면

A = - ( 1 * 2^4 + 1* 2^1 _+ 1* 2^0)

= -(16 + 2 + 1)

= - 19 이다.

  두 결과 값이 일치한다.

 

3.4 논리 연산회로에 연산기능 추가하여 설계한 그림은 다음 사진과 같다

이때 S3 선택신호를 추가로 입력받아서 not의 사용 여부를 결정해야 한다,

 

3.5 A= 10101101 B = 11000011에 대한 논리 연산 수행 결과는 다음과 같다.

(1) AND연산 답: 1000 0001

이 연산은 두 비트 모두 1인 경우에만 1을 출력하므로 답이 10000001이 된다,

(2) OR연산 답: 1110 1111

이 연산은 하나라도 1이 있으면 1을 출력하므로 답이 11101111이 된다.

(3) XOR연산 답: 0110 1110

이 연산은 두 비트가 상호 배타적인 값을 가질 때에만 1을 출력하므로 01101110이 된다

 

3.6

AND연산은 마스크 연산과 OR연산은 선택적-세트 연산과, XOR연산은 선택적-보수 연산과 각각 동일한 결과를 산출하는 연산 관계에 있다.

3.7

A레지스터에 저장된 11010010의 우측 5비트에 대해서 01110을 삽입하고자 할 때는 삽입연산을 수행해야 한다, 삽입위치에 대해 마스크 연산 수행 후 삽입위치에 원하는 삽입값 넣고 OR연산을 수행하면 된다.

A = 110 10010

B = 111 00000 ‘마스크 연산 수행하여 삽입 원하는 위치 비트 0으로 리셋

---------------

A= 110 00000

B= 000 01110 ‘OR연산을 수행하여 원하는 삽입값을 넣는다.’

-------------

최종 A= 110 01110 이 된다.

 

3.8 2의 보수 1101 0010에 대한 시프트 연산 수행 결과는 다음과 같다.

(1) 논리적 우측 시프트 : 0110 1001

(2) 논리적 좌측 시프트 : 1010 0100

(3) 순환 우측 시프트 : 0110 1001

(4) 순환 좌측 시프트 : 1010 0101

(5) 산술적 우측 시프트: 1110 1001

(6) 산술적 좌측 시프트 : 1010 0100

 

3.9 2의 보수 1011 0011 에 대한 시프트 연산 수행 결과는 다음과 같다.

(1) 논리적 우측 시프트 : 0101 1001

(2) 순환 좌측 시프트 : 1011 0010

(3) 산술적 우측 시프트 : 1101 1001

(4) 산술적 좌측 시프트: 1011 0010

 

3.10 A= 10110011 이 저장되어 있고, C플래그는 0으로 세트되어 있다.

(1) SHRC 연산 수행 후, A = 0101 1001 이 된다.

(2) 위 결과에 대한 SHLC 연산을 2번 연속 수행하게 되면 A= 0110 0100 이 된다,

 

3.11 A = 1011 0011 이 저장되어있고, C 플래그에는 1이 세트되어 있다,

(1) RCL 연산 수행 결과 A = 0110 0111 이 된다.

(2) 위 결과에 대하여 RRC 연산을 2번 연속 수행하게 되면 A = 1101 1001 이 된다.

 

3.12 오버플로우(V) 검출 방법: 최상위 올림 수 두 개 값 비교 후 배타값(반대값)이면 V 발생

 

(1) V발생, C6 = 1, C5 = 0 으로 서로 반대값을 갖는다. V가 발생한다.

오버플로우 발생하지 않았다면 111110 값이 나왔을 것이다.

(2) C8 = 1, C7 = 1 로 서로 같은 값을 갖는다. V가 발생하지 않았다.

결과는 1000 0110 이 나온다,

 

3.13

*뺄셈은 감수를 보수화시켜서 덧셈 연산으로 수행 가능하다.

우선 각 수들을 모두 2의 보수 표현으로 구해보면

+56 = 0011 1000 -56= 1100 1000

+89 = 0101 1001 -89 = 1010 0111 이 된다.

(1) : 0010 0001 오버플로우 발생하지 않는다. (C8 = 1. C7 =1)

89 - 56 = 89 + (-56)

0101 1001 + 1100 1000 = 0010 0001

(2) : V발생 (C7 = 0 C8=1), 0110 1110

(-56) + (-89)

= 1100 1000 + 1010 0110 = 0110 1110 (, V발생함)

(3) : V발생 ( C7 =1, C8=0) 1001 0001

56 + 89 = 0011 1000 + 0101 1001 = 1001 0001 (, V발생함)

(4) : 1101 1111 V발생하지 않음(C7=C8 = 0)

56 + (-89) = 0011 1000 + 1010 0111 = 1101 1111

 

3.14 C,S,Z,V 순으로 상태 레지스터를 세트하고자 한다

(1) : C,S,Z,V = ( 1.0.0.0)

R1 + 1100 0110 = 0011 1000

(2) : C,S,Z,V = ( 0.1.0.1)

R1 + 0001 1110 =1001 0000

(3) : C,S,Z,V = ( 0.0.1.0)

R1 1000 1101 AND연산 결과 : 0000 0000 Z=1

(4) : C,S,Z,V = (0.0.1.0)

R1R1에 대해 XOR연산 결과: 0000 0000 Z=1

 

3.15

부호 없는 2진수들 간의 곱셈 수행 과정을 그림으로 작성한 결과는 아래 사진과 같다.

(1001 X 0111) = 9 X 7 = 63 이다.

위 사진의 수행 과정을 거친 후 A, Q 레지스터에 저장된 결과값은 0011 1111이 된다.

0011 1111 = 63 2진수이므로 옳게 연산을 수행했음을 알 수 있다.

 

3.16 2의 보수로 표현된 5비트 데이터 간의 곱( 10101 X 01101)Booth 알고리즘으로 수행되는 과정을 작성하면 다음 사진과 같다. 사이클은 Q(승수)의 비트 수인 5회 반복하면 된다

답은 11011 10001 = -1432의 보수 형태로 나오게 된다.

 

3.17 부호없는 2진수 곱셈기를 Booth 곱셈기로 변경하여 그리게 되면 다음 사진과 같다.

3.18

바이어스가 127인 지수 상태를 실제 지수값을 구하기 위해서는

주어진 지수값에서 127을 해야 한다. 뺄셈에서 감수는 보수화 시킨 뒤 덧셈 하므로

-127 = 1000 0001 로 보수화 된다. 이를 주어진 E지수와 연산하면 된다.

(1) : 127

1111 1110 + 1000 0001 = 0111 1111 이는 10진수로 127이다

(2) : 0

0111 1111 + 1000 0001 = 0000 0000 이는 10진수로 0이다

(3) : 54

1011 0101 + 1000 0001 = 0011 0110 이는 10진수로 54이다

(4) : -82

0010 1101 + 1000 0001 = 1010 1110 이는 2의 보수, 음수 표현이므로 반전시켜 +1을 하게 되면 0101 0010 이 나온다 부호-붙여준 뒤 10진수로 표현하면 82이다

 

3.19

(1) : 1 10000001 0100000000000000000000

-1.6252진수로 나타내면 (-) 1.101 형태가 된다. 이를 정규화 시키면 0.1101 X 2^1 이다.

E(지수)는 바이어스 128을 사용하여 0000 0001 + 1000 0000 = 1000 0001 이 된다.

M(가수)는 첫 비트 1 제외하고 01을 포함하여 23비트로 구성된 가수 필드에 저장될 것이다.

S(부호)는 음수이므로 1이 세트된다.

이를 32비트 부동소수점 형식으로 나타내게 되면 다음과 같다.

1 10000001 0100000000000000000000

(2) 위의 형식에서 지수필드가 9비트로, 바이어스가 25664비트 부동소수점 형식으로 다시 나타내게 되면,

1 100000001 0100000000000000000000000000000000000000000000000000000

 

3.20

(1) : 0 10000001 0100000000000000000000

5 = 1.01 X 2^2

S = 0 E = E 1 + 128 = 1000 0001

(2) :0 10000110 111110001000000000000000

253.25 = 1.111110001 X 2^7

(3) : 1 01111111 10100000000000000000000

-1.625 = - (1.101X 2^0)

(4) : 1 01111010000000000000000000000000

-(1.0 X 2^5)

 

3.21

(1) : S =0 E = 130 M = 101

N = (-1)^0*2^131-127(1.625) = 26

(2) : S = 1 E = 124 M = -11-1

(3) ?

(4) : S = 0 E = 255 M = 011

(5) : S = 0 E = 0 M = 011

 

3.22

: 부동소수점 표현으로 0을 나타낼 수 없는 이우는 부동 소수점 표현에서 가수 필드의 첫 비트가 1이 되어야만 하는 것과 관련있다. IEEE 754 표준 32비트 부동소수점 형식에서 0에 대한 비트 패턴은                                                                                                                   0 01111111 000000000000000000000000000000 로 표현된다.

 

728x90