The Gateway to Computer Science Excellence
First time here? Checkout the FAQ!
+21 votes

Consider the following program segment. Here $\text{R1, R2}$ and $\text{R3}$ are the general purpose registers.

$$\begin{array}{|l|l|l|c|} \hline & \text {Instruction} & \text{Operation }& \text{Instruction Size} \\ & & & \text{(no. of words)}\\\hline & \text{MOV R1,(3000)} & \text{R1} \leftarrow \text{M[3000]} & \text{$2$} \\\hline \text{LOOP:}& \text{MOV R2,(R3)} & \text{R2} \leftarrow \text{M[R3]} & \text{$1$} \\\hline & \text{ADD R2,R1} & \text{R2} \leftarrow \text{R1 + R2} & \text{$1$} \\\hline & \text{MOV (R3),R2} & \text{M[R3]} \leftarrow \text{R2} & \text{$1$} \\\hline& \text{INC R3} &\text{R3} \leftarrow \text{R3 + 1} & \text{$1$} \\\hline & \text{DEC R1} &\text{R1} \leftarrow \text{R1 – 1} & \text{$1$} \\\hline& \text{BNZ LOOP} & \text{Branch on not zero} & \text{$2$} \\\hline & \text{HALT} & \text{Stop} & \text{$1$} \\\hline\end{array}$$

Assume that the content of memory location $3000$ is $10$ and the content of the register $\text{R3}$ is $2000.$ The content of each of the memory locations from $2000$ to $2010$ is $100.$ The program is loaded from the memory location $1000.$ All the numbers are in decimal.

Assume that the memory is byte addressable and the word size is $32$ bits. If an interrupt occurs during the execution  of the instruction “INC R3”, what return address will be pushed on to the stack?

  1. $1005$
  2. $1020$
  3. $1024$
  4. $1040$
asked in CO & Architecture by Veteran (116k points)
edited by | 2.9k views

3 Answers

+24 votes
Best answer

An interrupt is checked for after the execution of the current instruction and the contents of PC
(address of next instruction to be executed) is pushed on to stack.
Here, address of INC, R3 $= 1000 +\dfrac{ (2 + 1 + 1 + 1) \times 32}{8} = 1020$ and
next instruction address $= 1020 + 4 = 1024$  which is pushed on to stack. 

Correct Answer: $C$

answered by Active (5k points)
edited by
I have one doubt , when it return back what will be R3 value , will it be incremented by 1 before getting interrupted ?
yes it will be incremented
@Mansingh yes R3 will be incremented. When interrupt comes cpu will first complete the instruction which is running, then will go for Interrupt Service Routine..
+21 votes

If memory is byte addressable so for each instruction it requires 1 word that is equal to 4 bytes which require 4 addresses

Instruction Word location
MOV R1,3000 2 1000-1007
MOV R2,R1 1 1008-1011
ADD R2,R1 1 1012-1015
MOV(R3),R2 1 1016-1019
INC R3 1 1020-1023
DEC R1 1 1024-1027

Interrupt occur during execution of instruction INC R3. So CPU will complete the execution of this instruction and push the next address 1024 in the stack. So after interrupt service program can be resumed for next instruction.

So (C) is correct option.

answered by Active (4.7k points)
Jio madhobi
–1 vote
answered by

Related questions

Quick search syntax
tags tag:apple
author user:martin
title title:apple
content content:apple
exclude -tag:apple
force match +apple
views views:100
score score:10
answers answers:2
is accepted isaccepted:true
is closed isclosed:true
49,434 questions
53,630 answers
70,899 users