-
[문제해설] 어느 프로그램 중 0123번지에 CALL A 명령이 있다. 이 CALL A를 수행한 후 stack에 기억된 값은?전자계산기조직응용기사/필기 기출문제 해설 2022. 6. 13. 23:01반응형
전자계산기조직응용기사 필기 기출문제 해설(5과목 마이크로 전자계산기-서브루틴과 스택) - 2016년1회
어느 프로그램 중 0123번지에 CALL A 명령이 있다. 이 CALL A를 수행한 후 stack에 기억된 값은?
① 0123 ② 0125
③ 1234 ④ 1300
- 문제 해설 -
본문제의 기본 개념은 아래의 유사문제 풀이를 꼭 참고하세요.
https://fishbone-s-present.tistory.com/128
본문제에서 가장 중요한 것은 '어떤 레지스터의 값을 묻는가'입니다.
기본적으로 CALL, JUMP, BRANCH 등과 같이 서브루틴을 호출하는 명령어는 PC(프로그램 카운터)와 스택을 사용합니다.
SP ← SP + 1 ;스택 포인터를 하나 증가시킨다. M[SP] ← PC ;PC의 내용을 스택에 놓는다. PC ← 유효 주소 ;서브루틴으로 프로그램이 수행되게 한다.
위의 RTL은 서브루틴을 호출하는 명령어들의 동작을 보여줍니다.
CALL 명령어가 실행이 되면, 우선 SP(스택 포인터)를 1 증가시키면서 스택에 PC의 값을 저장합니다. 그 이유는 서브루틴 실행 후 복귀할 주소를 기억하기 위해서입니다. 그 후 PC(프로그램 카운터)에는 CALL 명령어의 오퍼랜드인 서브루틴의 시작 주소, 즉 유효 주소를 저장합니다. PC는 다음 실행할 명령어의 위치를 기억하는 레지스터이기에 CPU가 다음에 처리할 명령어는 서브루틴의 시작부가 됩니다. 이것이 서브 루틴을 호출하는 간단한 원리입니다.
본문제에서는 CALL A 명령어 수행 후의 stack의 값을 묻고 있습니다.
앞서 본 CALL 명령어의 RTL을 통해, CALL A 명령이 실행되면서 스택에는 PC(프로그램 카운터)의 값이 저장되는 것을 알 수 있습니다. 이는 서브루틴 A를 수행한 후에 복귀할 주소입니다. 그래서 문제에서 주어진 CFG(Control Flow Graph)를 통해 스택에 저장된 값은 0125라는 것을 알 수 있습니다. 정답은 2번입니다.
만약에 stack의 값이 아닌 PC의 값을 물었다면, CALL A 명령어를 수행하면서 PC에는 서브루틴 A의 시작 주소가 저장되므로 PC의 값은 1234입니다.
참고로, 깊게 공부하시는 분들은 PC의 값은 명령어를 읽으면서 1씩 증가되는데, 본문제의 CFG에서는 0123 후에 0124가 아닌 0125가 나오는 것을 궁금해하실 수 있습니다. 사실 실제 많은 시스템에선 명령어의 크기가 DWORD(Double Word;더블 워드)입니다. 하나의 DWORD 명령어는 CPU가 FETCH(인출)을 두 번하면서 PC의 증가가 두번 이루어집니다. 그래서 0123 이후의 명령어 주소가 0125인 것은 흔한 사례입니다.
https://youtube.com/playlist?list=PLboXycXmAIDuukQ2A6EvMZI-x1IMy3Xc-
반응형'전자계산기조직응용기사 > 필기 기출문제 해설' 카테고리의 다른 글
다음회로의 명칭은? (0) 2023.01.07 [문제해설] 어느 프로그램 중 0123번지에 CALL A 명령이 있다. 이 CALL A를 수행한 후 PC에 기억된 값은?(단, 명령어의 길이는 8비트이다.) (0) 2022.06.02 [문제해설] 그림과 같은 어느 프로그램 중 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