-
[문제해설] 어느 프로그램 중 0123번지에 CALL A 명령이 있다. 이 CALL A를 수행한 후 PC에 기억된 값은?(단, 명령어의 길이는 8비트이다.)전자계산기조직응용기사/필기 기출문제 해설 2022. 6. 2. 18:22반응형
전자계산기조직응용기사 필기 기출문제 해설(5과목 마이크로 전자계산기-서브루틴과 스택) - 2015년1회, 2018년3회
어느 프로그램 중 0123번지에 CALL A 명령이 있다. 이 CALL A를 수행한 후 PC에 기억된 값은?(단, 명령어의 길이는 8비트이다.)
① 0123 ② 0124
③ 0131 ④ 1300
- 문제 해설 -
본문제는 CALL 명령어에 의한 서브루틴 호출 마이크로 동작의 이해를 묻는 문제입니다.
기본 개념 설명은 아래의 유사 문제 해설(2003년 기출)을 참고하세요.(필독!!)
본문제는 CFG(Control Flow Graph)가 간소화되었지만, 2003년에 기출 된 문제와 거의 흡사합니다.
하지만, 결론부터 말씀드리자면 이 문제는 오류입니다.
물론 그 오류의 원인을 정확하게는 알 수 없습니다. 실제 시험에서 오류로 출제되었지만 발견이 안되었는지, 아니면 복원(시험지를 문서 파일로 만드는 과정) 중에 오타가 발생한 것인지는 알 수 없습니다. 필자는 후자라고 생각됩니다. 처음 잘못 복원된 문제가 이후 재출제 되면 복원 문제는 처음 복원 그대로 복사되어 배포됩니다. 이런 문제가 많으니깐 공부하실 때 주의해야 됩니다.
오류 문제라도, 이 문제가 왜 오류라는 것을 이해하는 것은 공부에 큰 도움이 됩니다.
본 문제에서의 CALL 명령어의 RTL(Register Transfer Language)을 살펴보겠습니다.
SP ← SP + 1 ;스택 포인터를 하나 증가시킨다. M[SP] ← PC ;PC의 내용을 스택에 놓는다. PC ← 유효 주소 ;서브루틴으로 프로그램이 수행되게 한다.
본문제에서 묻는 것은 'CALL A' 명령어 수행 후의 PC(Program Counter)의 값입니다.
위의 RTL 대로 수행했을 때, PC에는 유효 주소 A의 값이 들어가게 됩니다. A는 서브루틴 A의 시작 주소를 의미하므로, 문제에서 주어진 CFG를 참고하면 정답은 1234가 됩니다.
그런데 보기에는.... 1234가 없네요...^^ 문제의 정답은 2번이라고 하니, 보기 2번의 0124가 오타일 가능성이 큽니다.
만약, 보기 2번이 오타가 아닌 정답이라면, 문제를 다음과 같이 수정해야 합니다.
어느 프로그램 중 0123번지에 CALL A 명령이 있다. Sub Routine A를 수행한 후 PC에 기억된 값은? 위와 같이 'CALL A 명령을 수행한 후'를 'Sub Routine A를 수행한 후'로 바꾸어보면, 서브루틴 작업 완료 후의 PC의 값을 구하면 됩니다. 모든 서브루틴의 마지막 동작은 아래와 같습니다.
PC ← M[SP] ;스택의 top의 값을 PC에 넣는다. SP ← SP - 1 ;SP를 하나 감소시킨다.
위에서 첫 번째 라인의 스택의 top의 값은 서브루틴이 호출될 때 저장된 PC의 값입니다. 복귀 주소인 그 값은 'CALL A' 명령 후 1 증가된 '0124'입니다.
위의 설명들을 보기 쉽게 CFG에 표기하면 다음과 같습니다.
https://youtube.com/playlist?list=PLboXycXmAIDuukQ2A6EvMZI-x1IMy3Xc-
반응형'전자계산기조직응용기사 > 필기 기출문제 해설' 카테고리의 다른 글
다음회로의 명칭은? (0) 2023.01.07 [문제해설] 어느 프로그램 중 0123번지에 CALL A 명령이 있다. 이 CALL A를 수행한 후 stack에 기억된 값은? (0) 2022.06.13 [문제해설] 그림과 같은 어느 프로그램 중 0123번지에 CALL A 명령이 있다. 이 CALL A를 수행한 후 PC에 기억된 값은?(단, 모든 명령문은 1바이트라 하자.) (0) 2022.05.31 2020년1,2회 통합 조직응용기사 필기 [3과목 전자계산기구조] 기출문제 풀이 (0) 2022.02.11 [문제해설] Byte Multiplexer Channel과 관련한 설명으로 틀린 것은? (0) 2021.12.13