2017 Mid-term Examination (100)
Basic Computer Design
Date: 2017-10-18
1. CPU 내부에 존재하는 Register 중에서 Program Counter(PC)와 Instruction Register(IR)
가 하는 역할을 쓰시오. (20)
- PC: 전체 Instruction Code 중에서 현재 실행 중인 Instruction이 있는 위치를 저장, 판
단문이나 Loop 구문을 실행할 때는 PC가 급격하게 변경될 수 있음
- IR: 현재 실행 중 혹은 실행할 Instruction 자체를 저장하여, CPU Machine Cycle에 필요
한 Instruction을 제공
2. 64-bit CPU란 용어에서 64-bit이 의미하는 바를 3가지 이상 쓰시오. (15)
- CPU 내에 있는 단일 Register를 구성하는 Bit 수가 64
- CPU가 접근하는 Memory 주소가 64-bit으로 구성
- CPU가 사용할 수 있는 Instruction 개수가 최대 264
- ALU의 이진수 연산이 사용할 수 있는 Bit 수가 64
3. 전원(Battery까지 포함)이 없더라도 정보를 안정적으로 저장할 수 있는 Memory 혹은
Storage를 3개 이상 쓰고, 저장 가능한 이유를 간단히 설명하시오. (15)
- Flash Memory: 정보가 개방된 Floating Gate에 저장되어 누설되지 않음
- EEPROM: Flash Memory와 유사하게 Floating Gate를 사용하므로 무전원 상태에서 정
보 저장 가능
- HDD: 자성체의 N극과 S극을 사용하여 이진수를 표현하므로 무전원 정보 저장 가능
- SSD: Flash Memory를 HDD와 유사하게 구성했으므로 무전원 정보 저장 가능
- CD-ROM: 이진수 표현을 위해 얇은 금속면에 높낮이 차이를 형성했음
4. 옆의 CPU Architecture에서 Instruction Decoder가 하는 역할을 Machine Cycle 관점으
로 설명하시오. (10)
Instruction Decoder는 CPU Machine Cycle에서 Decode를 담당한다. 즉 IR(Instruction
Register)에 저장된 Instruction을 읽어와 CPU가 처리할 연산을 해독한 후, 연산 처리를
위한 ALU, Register, PC(Program Counter) 등을 설정하기 위한 기초 신호를 발생한다.
5. Arduino Sketch 언어를 이용해 다음 작업을 Programming하시오. Code는 짧을수록
가산점 부여. (40)
1) Half Adder 함수를 이용해 Full Adder 함수 정의; void addHalf(boolean & sum,
boolean & carry, boolean A, boolean B) 함수는 이미 있다고 가정(20)
void addFull(boolean & sum, boolean & carry, boolean A, boolean B, boolean C) {
boolean sum1, carry1, sum2, carry2;
addHalf(sum1, carry1, A, B);
addHalf(sum2, carry2, sum1, C);
sum = sum2, carry = carry1 | carry2;
}
2) 사용자에게 두 단어를 Keyboard로 입력 받아 이 단어를 붙인 후 Monitor에 출력; 예
를 들면 “abc”와 “1234”를 붙어 “abc1234”를 출력; 여기서 Serial Port의 연결 속도는
9600 [bps], class StringTok이 있다고 가정; 반드시 setup()과 loop() 함수를 사용할 것
(20)
#include <StringTok.h>
void setup() {
Serial.begin(9600);
}
void loop() {
StringTok sInput1, sInput2;
while (sInput1.isEmpty()) { delay(1000); sInput1.inputSerial(); }
while (sInput2.isEmpty()) { delay(1000); sInput2.inputSerial(); }
Serial.println(sInput1.toString() + sInput2.toString());
}

TestBCD2017-1(answer)

  • 1.
    2017 Mid-term Examination(100) Basic Computer Design Date: 2017-10-18 1. CPU 내부에 존재하는 Register 중에서 Program Counter(PC)와 Instruction Register(IR) 가 하는 역할을 쓰시오. (20) - PC: 전체 Instruction Code 중에서 현재 실행 중인 Instruction이 있는 위치를 저장, 판 단문이나 Loop 구문을 실행할 때는 PC가 급격하게 변경될 수 있음 - IR: 현재 실행 중 혹은 실행할 Instruction 자체를 저장하여, CPU Machine Cycle에 필요 한 Instruction을 제공 2. 64-bit CPU란 용어에서 64-bit이 의미하는 바를 3가지 이상 쓰시오. (15) - CPU 내에 있는 단일 Register를 구성하는 Bit 수가 64 - CPU가 접근하는 Memory 주소가 64-bit으로 구성 - CPU가 사용할 수 있는 Instruction 개수가 최대 264 - ALU의 이진수 연산이 사용할 수 있는 Bit 수가 64 3. 전원(Battery까지 포함)이 없더라도 정보를 안정적으로 저장할 수 있는 Memory 혹은 Storage를 3개 이상 쓰고, 저장 가능한 이유를 간단히 설명하시오. (15) - Flash Memory: 정보가 개방된 Floating Gate에 저장되어 누설되지 않음 - EEPROM: Flash Memory와 유사하게 Floating Gate를 사용하므로 무전원 상태에서 정 보 저장 가능 - HDD: 자성체의 N극과 S극을 사용하여 이진수를 표현하므로 무전원 정보 저장 가능 - SSD: Flash Memory를 HDD와 유사하게 구성했으므로 무전원 정보 저장 가능 - CD-ROM: 이진수 표현을 위해 얇은 금속면에 높낮이 차이를 형성했음
  • 2.
    4. 옆의 CPUArchitecture에서 Instruction Decoder가 하는 역할을 Machine Cycle 관점으 로 설명하시오. (10) Instruction Decoder는 CPU Machine Cycle에서 Decode를 담당한다. 즉 IR(Instruction Register)에 저장된 Instruction을 읽어와 CPU가 처리할 연산을 해독한 후, 연산 처리를 위한 ALU, Register, PC(Program Counter) 등을 설정하기 위한 기초 신호를 발생한다. 5. Arduino Sketch 언어를 이용해 다음 작업을 Programming하시오. Code는 짧을수록 가산점 부여. (40) 1) Half Adder 함수를 이용해 Full Adder 함수 정의; void addHalf(boolean & sum, boolean & carry, boolean A, boolean B) 함수는 이미 있다고 가정(20) void addFull(boolean & sum, boolean & carry, boolean A, boolean B, boolean C) { boolean sum1, carry1, sum2, carry2; addHalf(sum1, carry1, A, B); addHalf(sum2, carry2, sum1, C); sum = sum2, carry = carry1 | carry2; } 2) 사용자에게 두 단어를 Keyboard로 입력 받아 이 단어를 붙인 후 Monitor에 출력; 예 를 들면 “abc”와 “1234”를 붙어 “abc1234”를 출력; 여기서 Serial Port의 연결 속도는 9600 [bps], class StringTok이 있다고 가정; 반드시 setup()과 loop() 함수를 사용할 것 (20)
  • 3.
    #include <StringTok.h> void setup(){ Serial.begin(9600); } void loop() { StringTok sInput1, sInput2; while (sInput1.isEmpty()) { delay(1000); sInput1.inputSerial(); } while (sInput2.isEmpty()) { delay(1000); sInput2.inputSerial(); } Serial.println(sInput1.toString() + sInput2.toString()); }