[보기] PC, AC, IR, MAR, MBR
__(a)__
: PC에 저장된 명령어 주소가 시스템 주소 버스로 출력되기 전에 일시적으로 저장되는 레지스터__(b)__
: 가장 최근에 인출된 명령어가 저장되어 있는 레지스터__(c)__
: 기억장치에 저장될 데이터 혹은 기억장치로부터 읽혀진 데이터가 일시적으로 저장되는 레지스터__(d)__
: 데이터를 일시적으로 저장하는 레지스터__(e)__
: 다음에 인출될 명령어의 주소를 가지고 있는 레지스터
가. PC
나. MAR
다. IR
라. AC
가. 1
나. 2
다. 4
라. 32
📄 답지
[보기] PC, AC, IR, MAR, MBR
__(a)__
: PC에 저장된 명령어 주소가 시스템 주소 버스로 출력되기 전에 일시적으로 저장되는 레지스터__(b)__
: 가장 최근에 인출된 명령어가 저장되어 있는 레지스터__(c)__
: 기억장치에 저장될 데이터 혹은 기억장치로부터 읽혀진 데이터가 일시적으로 저장되는 레지스터__(d)__
: 데이터를 일시적으로 저장하는 레지스터__(e)__
: 다음에 인출될 명령어의 주소를 가지고 있는 레지스터
정답 (58p 참고)
(a) : 기억장치 주소 레지스터 (Memory Address Register:
MAR
)(b) : 명령어 레지스터 (Instruction Register:
IR
)(c) : 기억장치 버퍼 레지스터 (Memory Buffer Register:
MBR
)(d) : 누산기(Accumulator:
AC
)(e) : 프로그램 카운터(Program Counter:
PC
)
가. PC
나. MAR
다. IR
라. AC
정답 : 다
인출 사이클의 마지막 클록에서 수행하는 작업은 IR <- MBR. 즉 기억장치로부터 인출된 명령어는 MBR을 경유하여 IR에 저장되며, 실행 사이클 때 제어 유니트로 보내져 해독된다.
가. 1
나. 2
다. 4
라. 32
정답 : 다
위 환경에서는 한 명령어(32비트)가 주소(8비트) 네 개에 걸쳐 저장되기 때문에 PC는 4씩 증가한다.
인출 사이클(fetch cycle): CPU가 기억장치의 지정된 위치(PC가 가리키는)로부터 명렁어를 읽어오는 과정.
그림 2-4는 인출 사이클 동안에 주소와 명령어 코드가 이동하는 과정을 보여주고 있다. 그림에서 원으로 표시된 기호들은 각 동작이 발생하는 클록의 주기를 나타낸다.
- t0 : MAR <- PC
- 현재 PC의 명령어 주소가 MAR을 통해 기억장치로 전송된다.
- t1 : MBR <- M[MAR], PC <- PC+1
- 기억장치의 해당 주소로부터 읽혀진 명령어 코드가 MBR에 적재된다.
- 동시에 PC는 1 증가시켜 다음 명령어 주소를 가리키게 한다.
- t2 : IR <- MBR
- 명령어 레지스터 IR로 명령어 코드가 전송된다.
보기: 데이터 처리, 프로그램 제어, 데이터 이동, 데이터 저장
__(a)__
: CPU와 기억장치 간 혹은 CPU와 I/O 장치 간에 데이터를 불러온다.__(b)__
: 데이터에 대하여 산술 혹은 논리 연산을 수행한다.__(c)__
: 연산결과 데이터 혹은 입력장치로부터 읽어들인 데이터를 기억장치에 쓴다.__(d)__
: 프로그램의 실행순서를 결정한다.
- t0 :
__(a)__
<- IR(addr) - t1 :
__(b)__
<- M[MAR] - t2 :
__(c)__
<- MBR
- t0 :
__(a)__
<- IR(addr) - t1 :
__(b)__
<- AC - t2 :
__(c)__
<- MBR
📄 답지
보기: 데이터 처리, 프로그램 제어, 데이터 이동, 데이터 저장
__(a)__
: CPU와 기억장치 간 혹은 CPU와 I/O 장치 간에 데이터를 불러온다.__(b)__
: 데이터에 대하여 산술 혹은 논리 연산을 수행한다.__(c)__
: 연산결과 데이터 혹은 입력장치로부터 읽어들인 데이터를 기억장치에 쓴다.__(d)__
: 프로그램의 실행순서를 결정한다.
-> a: 데이터 이동, b: 데이터 처리, c: 데이터 저장, d: 프로그램 제어
- t0 :
__(a)__
<- IR(addr) - t1 :
__(b)__
<- M[MAR] - t2 :
__(c)__
<- MBR
-> a: MAR, b: MBR, c: AC
설명:
첫 번째 주기인 t0에서 명령어 레지스터인 IR에 저장된 주소 addr을 메모리 주소 레지스터인 MAR에 불러오게 되구요.
두 번째 주기인 t1에서 MAR의 데이터를 인출하여 메모리 버퍼 레지스터인 MBR에 저장하게 됩니다.
세 번째 주기인 t2에서 MBR에 저장 된 데이터가 누산기인 AC에 들어가며 데이터를 불러오게 됨으로서 LOAD 명령어의 실행이 완료됩니다.
- t0 :
__(a)__
<- IR(addr) - t1 :
__(b)__
<- AC - t2 :
__(c)__
<- MBR
-> a: MAR, b: MBR, c: M[MAR]
설명:
첫 번째 주기인 t0에서 명령어 레지스터인 IR에 저장된 주소 addr을 메모리 주소 레지스터인 MAR에 불러오게 되구요.
두 번째 주기인 t1에서 누산기의 결과인 AC의 값을 메모리 버퍼 레지스터인 MBR에 저장시키구요.
세 번째 주기인 t2에서 MBR에 저장 된 데이터를 메모리 주소 레지스터인 MAR의 데이터 저장공간에 저장하게 됨으로서 STA 명령어가 끝나게 됩니다.
가. 복귀할 주소를 스택에 저장한다.
나. ISR의 시작 주소를 PC에 적재한다.
다. 인터럽트 요구 신호를 검사한다.
라. 인터럽트 플래그를 세트한다.
- 이 프로그램이 순차적으로 실행되는 경우를 고려해 아래 표를 완성해보세요. 기억장치 300번지에는 9가, 301번지에는 5가 저장되어 있습니다.
- 위의 프로그램에서
SUB 301
명령을 실행중인데 개발자secho
가 프로세스를 백그라운드로 보내기 위해ctrl-z
를 눌렀고, 이 인터럽트 요구는 받아들여졌습니다. 인터럽트 사이클이 종료된 직후, CPU 레지스터들(PC, AC, IR, SP)에는 각각 어떤 값이 저장되어 있나요? (단, ISR의 시작 주소는 450번지, SP의 초기값은 999라고 가정합니다.)
인터럽트 사이클은 다음과 같습니다.
t0 : MBR ← PC (인터럽트 처리 완료 후에 복귀할 곳을 저장하기 위해, 현재의 PC내용을 스택에 저장한다.)
t1 : MAR ← SP, PC ← ISR의 시작 주소 (스택 포인터가 MAR을 가리키게 한다. 인터럽트 처리 루틴의 시작 주소를 PC에 담는다.)
t2 : M[MAR] ← MBR, SP ← SP - 1 (메모리의 MAR번지에 MBR의 값을 저장하고, 스택 포인터가 한 칸 위로 올라간다.)
PC
:____
AC
:____
IR
:____
SP
:____
- 그 값이 저장되는 기억장치의 주소는 몇번지일까?
____
- SP의 내용은 어떤 값으로 변경되는가?
____
📄 답지
인터럽트. 특정 인스트럭션을 수행하다가 생기는 것이 아니기 때문이다.
나머지는 지금의 인스트럭션을 실행한 결과로 동기적으로 일어난다.
Trap은 의도적인 예외 상황, Fault는 정정 가능성이 있는 오류, Abort는 복구 불가한 치명적인 오류가 있을 때 발생한다.
가. 복귀할 주소를 스택에 저장한다. >>> 예) MBR ← PC : 인터럽트 처리 완료 후에 복귀할 곳을 저장하기 위해, 현재의 PC내용을 스택에 저장한다.
나. ISR의 시작 주소를 PC에 적재한다. >>> 예) PC ← ISR의 시작 주소 : 인터럽트 처리 루틴의 시작 주소를 PC에 담는다.
다. 인터럽트 요구 신호를 검사한다. >>> 인터럽트 요구가 있는지 확인하고, Interrupt enabled이면 실행한다.
라. 인터럽트 플래그를 세트한다. >>> (X) 사이클 내에 항상 이루어질 필요는 없으며, 필요에 따라 삽입한다.
현재 인터럽트 서비스 루틴의 수행을 계속한다.
-
이 프로그램이 순차적으로 실행되는 경우를 고려해 아래 표를 완성해보세요. 기억장치 300번지에는 9가, 301번지에는 5가 저장되어 있습니다.
-
위의 프로그램에서
SUB 301
명령을 실행중인데 개발자secho
가 프로세스를 백그라운드로 보내기 위해ctrl-z
를 눌렀고, 이 인터럽트 요구는 받아들여졌습니다. 인터럽트 사이클이 종료된 직후, CPU 레지스터들(PC, AC, IR, SP)에는 각각 어떤 값이 저장되어 있나요? (단, ISR의 시작 주소는 450번지, SP의 초기값은 999라고 가정합니다.)
인터럽트 사이클은 다음과 같습니다.
t0 : MBR ← PC (인터럽트 처리 완료 후에 복귀할 곳을 저장하기 위해, 현재의 PC내용을 스택에 저장한다.)
t1 : MAR ← SP, PC ← ISR의 시작 주소 (스택 포인터가 MAR을 가리키게 한다. 인터럽트 처리 루틴의 시작 주소를 PC에 담는다.)
t2 : M[MAR] ← MBR, SP ← SP - 1 (메모리의 MAR번지에 MBR의 값을 저장하고, 스택 포인터가 한 칸 위로 올라간다.)
PC
:0450
t1에서 넣은 ISR의 시작 주소AC
:0004
실행중이던 명령은 마치고 ISR 하므로, SUB 301의 결과가 들어있다.IR
:6301
가장 최근에 인출된 명령어SP
:0998
SP - 1의 결과
- 그 값이 저장되는 기억장치의 주소는 몇번지일까?
0998
(현재 스택 포인터가 가리키는 곳이 0998이므로) - SP의 내용은 어떤 값으로 변경되는가?
0997
(SP ← SP - 1 수행)
인터럽트 서비스 루틴을 시작할 때 인터럽트 disabled를 켜고, 루틴을 종료할 때 enabled로 바꾼다.
[보기] 직접 주소지정 방식, 간접 주소지정 방식, 명령어 사이클, 인출 사이클, 실행 사이클, 인터럽트 사이클
- 간접 사이클은 명령어에 포함되어 있는 주소정보를 이용하여, 실제 명령어 실행에 필요한 데이터 주소를 인출하는 사이클로서,
1)____
에서 사용되며,2)____
과3)____
중간에 실행된다.
가. 기억장치로부터 데이터를 인출한다.
나. 기억장치로부터 데이터의 주소를 인출한다.
다. 기억장치로부터 명령어를 인출한다.
라. 기억장치로부터 명령어의 주소를 인출한다.
- t0 : MAR <- IR(addr)
- t1 : MBR <- M[MAR]
- t2 :
____________
📄 답지
[보기] 직접 주소지정 방식, 간접 주소지정 방식, 명령어 사이클, 인출 사이클, 실행 사이클, 인터럽트 사이클
- 간접 사이클은 명령어에 포함되어 있는 주소정보를 이용하여, 실제 명령어 실행에 필요한 데이터 주소를 인출하는 사이클로서,
1)간접 주소지정 방식
에서 사용되며,2)인출 사이클
과3)실행 사이클
중간에 실행된다.
가. 기억장치로부터 데이터를 인출한다.
나. 기억장치로부터 데이터의 주소를 인출한다. (정답!!!)
다. 기억장치로부터 명령어를 인출한다.
라. 기억장치로부터 명령어의 주소를 인출한다.
명령어에서 포함하고 있는 주소가 '데이터의 주소'가 아닌 '데이터의 주소가 저장된 기억 장소의 주소'일때(I 비트가 1일때),
데이터의 실제 주소를 얻기 위한 목적으로 간접 사이클이 수행된다. 따라서 기억장치로부터 데이터의 실제 주소를 읽어오는 과정이 수행되어야한다.
명령어 내의 특정 비트(I비트)가 1로 세트된 경우에 간접 사이클이 수행된다.
- t0 : MAR <- IR(addr)
- t1 : MBR <- M[MAR]
- t2 :
IR(addr) <- MBR
t0 : MAR <- IR(addr) : IR에 있는 주소(addr)정보를 MAR에 저장한다. ( IR(addr)에는 데이터의 주소가 담겨있는 기억 장소의 주소가 있다. )
t1 : MBR <- M[MAR] : 기억장치에서 MAR위치에 있는 정보(실제 데이터의 주소)를 MBR에 저장한다.
t2 : IR(addr) <- MBR : IR의 주소(addr)정보를 MBR에 저장된 실제 데이터의 주소로 변경한다.