리그캣의 개발놀이터

컴퓨터 구조론 2장 연습문제 풀이 본문

프로그래밍 기본/컴퓨터 구조론

컴퓨터 구조론 2장 연습문제 풀이

리그캣 2018. 1. 21. 16:59

CPU의 구조와 기능(문제풀이)


 2.18 문제 2.17에서와 같은 스택 연산에 대하여 다음과 같은 reverse Polish

(혹은 postfix)표기가 사용될 수 있다.

a+b -> ab+

a+(bxc) -> abcx +

(a – b) x c -> ab-cx

역폴란드식 표기법

[ reverse Polish notation ]

수학상의 식을 구성하는 방법으로, 각 연산자는 그 오퍼랜드의 뒤에 놓여지며, 그 앞에 있는 오퍼랜드 또는 중간 결과에 대하여 행해지는 연산을 표시하는 것. 폴란드의 J. Lukasiewicz가 1920년대에 제창한 폴란드 기법(記法)의 변형. 연산자를 오퍼랜드 사이가 아니라 뒤에 놓는다. 괄호가 불필요하고 또 연산자가 연산되는 순서로 늘어서므로 계산기 번역 루틴에 주로 이용된다. 예를 들면, (x+y)×z는 역폴란드식 표기법에서는 xy+z×이고 x+y×z는 xyz×+이다. 이 기법에 기초해서 철물을 설계한 컴퓨터도 있다. A+B*C를 ABC*와 같이 나타내는 것.

출처-[네이버 지식백과] 역폴란드식 표기법 [reverse Polish notation]

아래 식들을 reverse Poslish 표기를 사용하여 변환하라.

(1) A+B-C-D+E=AB+-C-D+E=AB+C-D-E+

(2)(A+B)X(C-D)+E=(AB+)X(CD-)+E=AB+CD-XE+

(3)(AXB)+(CXD)-E=(ABX)+(CDX)-E=ABXCDX+E-

(4)(A-B)X(((C-DXE)/F)/G)XE

=(AB-)X((C-DEX)/F)/G)XE=(AB-)X(CDEX-F/G/)XE=AB-CDEX-F/G/XEX

 

2.21 아래와 같은 주소지정 방식을 사용하는 명령어를 인출하고 실행하기 위해서는 모두 몇번의 기억장치 액세스가 필요한가?

(1) 즉시 주소지정 방식 –즉시주소지정방식을 사용하는 명령어는 연산에서 사용할 데이터를 명령어 코드내에 포함하고 있다. 오퍼랜드 필드의 내용이 연산에 즉시 사용될 수 있는 실제 데이터이다. 따라서 데이터 인출 과정이 별도로 필요하지 않다. 실행시키기 위해 한번의 기억장치 액세스가 필요하다.

(2) 레지스터 주소지정 방식-레지스터 주소지정 방식은 명령어의 오퍼랜드가 가리키는 레지스터에 저장되어있는 데이터를 연산에 사용하는 방식이다.

인출시에 한번, 실행시에 한번 총 두 번의 기억장치 액세스가 필요하다.

(3) 간접 주소지정 방식-간접 주소지정방식은 오퍼랜드가 가리키는 기억장치의 내용을 유효 주소로 사용하여 연산에 필요한 데이터를 인출하는 방식으로서, 인출시 두 번의 기억장치 액세스가 필요하며 실행시 한번의 기억장치 액세스가 필요함으로 총 세 번의 기억장치 액세스가 필요하다.

(4) 인덱스 주소지정 방식-인덱스 주소지정 방식은 인덱스 레지스터의 내용과 명령어 내 오퍼랜드(변위)를 더하여 유효 주소를 결정하는 주소지정 방식이다. 그러므로 인덱스 레지스터의 내용가져올 때 한번의 액세스 후 두 개의 값을 더하는데 한번의 액세스 그리고 명령어를 실행하는데 한번의 액세스가 필요함으로 총 3번의 기억장치 액세스가 필요하다.

2.23 프로그램 카운터의 내용을 X1이라 하고, 기억장치 X1번지에 저장된 명령어의 주소 부분을 X2라고 하자. 그 명령어를 실행하는 데 필요한 데이터는 기억장치 X3번지에 저장되어 있으며, 인덱스 레지스터의 내용은 X4이다. 명령어가 아래와 같은 주소 지정 방식을 사용하는 경우에 유효 주소(EA)에 대한 관계식을 변수들을 이용하여 쓰라.

EA=X3,A=X2,(A)=(X2), IX=X4, PC=X1이된다.

(1) 직접 주소지정 방식 EA=A 즉 X3=X2

(2) 간접 주소지정 방식 EA=(A) 즉 X3=(X2)

(3) 상대 주소지정 방식 EA=A+PC 즉 X3=X2+X1

(4) 인덱스 주소지정 방식 EA=A+(IX) 즉 X3=X2+(X4)

 

2.25 그림 2-30과 같은 상대 주소지정 방식을 사용하는 분기 명령어가 453번지에 저장되어있다. 이 컴퓨터에서 명령어의 길이는 32비트이며, 기억장치 주소는 단어(32비트) 단위로 지정된다. 분기 명령어의 주소 부분에 ‘36’이 저장되어 있다면, 이 명령어의 실행이 종료된 후에 PC의 내용은 어떤 값으로 바뀌게 되는가?

먼저 명령어가 인출되면서 PC의 값이 453+1 즉 454가된다

상대 주소지정 방식은 EA=A+PC가됨으로 454+36이된다 즉 PC의 값은

490이된다.

 

2.26 상대 주소지정 방식을 사용하는 분기 명령어가 250번지에 저장되어 있다. 명령어의 길이는 16비트이며, 그 중에서 6비트 연산코드이다. 그리고 기억장치의 주소는 바이트 단위로 지정된다고 할 때, 아래의 물음에 답하여라.

(1) 분기 명령어가 실행된 다음에 284번지로 분기되도록 하기 위하여 분기 명령어의 주소 필드에 넣어야 할 내용을 2의 보수로 표현하라.

분기명령어가 실행되면 252 252+2+X=284가 돼야한다. 즉 X=30이 되는데

32을 먼저 2진수로 표현하면 011101이 된다. 명령어의 길이는 16비트인데 바이트단위로 지정되기 때문에 인출시 PC의값은 2가 증가되기 때문이다. 오퍼랜드는 10비트임으로 1000011101 맨앞은 부호연산자이다.

(2) 232번지로 분기되도록 하는 경우에 분기 명령어의 주소 필드에 넣어야할 내용을 2의 보수로 표현하라.

232번지로 분기되도록 하기 위해서는 (250+2)+X=232가 되어야 한다. 즉 X=-20이 된다 20는 10100이고 10비트로 표시하면 1000010100(맨앞비트는 부호)에서 2의보수

로나타내면 1111101011+0000000001=1111101100이된다.

2.27 기억장치 200번지부터 50개의 요소들로 이루어진 데이터 배열이 저장되어있다. 인덱스 주소지정 방식을 사용하는 명령어를 이용하여 12번째 데이터 요소를 인출하려는 경우에, 명령어의 오퍼랜드 필드 및 인덱스 레지스터에 저장되어야 할 값은 각각 무엇인가?

명령어의 오퍼랜드 필드는 인덱스의 데이터 배열이 시작되는 주소 200번지를 가르켜야 되고 200번지는 데이터 배열의 첫 번째 데이터 요소를 가르킴으로 +11해야 12번째 데이터 요소를 인출할 수 있다. 즉 인덱스 레지스터에 저장되어야 할 값은 11이 되어야하고 명령어 오퍼랜드 필드의 저장되어야 할 값은 200이 된다.

Comments