23,423 views

Consider the following program segment for a hypothetical CPU having three user registers $R_1, R_2$ and $R_3.$ $$\begin{array}{|l|l|c|} \hline \text {Instruction} & \text{Operation }& \text{Instruction size} \\&& \text{(in words)} \\\hline \text{MOV R_1,5000} & \text{R_1} \leftarrow \text{Memory[5000]}& \text{2} \\\hline\text{MOV R2,(R1)} & \text{R2} \leftarrow \text{Memory[(R_1)]}& \text{1} \\\hline \text{ADD R_2,R_3} & \text{R2} \leftarrow \text{R_2 + R_3} & \text{1} \\\hline \text{MOV 6000,R_2} & \text{Memory[6000]} \leftarrow \text{R_2} & \text{2} \\\hline \text{HALT} & \text{Machine Halts} & \text{1} \\\hline \end{array}$$Consider that the memory is byte addressable with size $32$ bits, and the program has been loaded starting from memory location $1000$ (decimal). If an interrupt occurs while the CPU has been halted after executing the HALT instruction, the return address (in decimal) saved in the stack will be

1. $1007$
2. $1020$
3. $1024$
4. $1028$

HALT – It is a machine control instruction. It invokes unconditional jump with starting address of HALT as Target Address.

ex:- L1 : JMP L1

While execution of this instruction CPU enters into a infinite loop so reset operation required to run the new program.

I1 : 1000 – 1007

I2: 1008 – 1011

I3: 1012 – 1015

I4: 1016 – 1023

I5: 1024 – 1027

So, as we can see by diagram 1024 will be pushed onto the stack.

Consider that the memory is byte addressable with size 32 bits

Why are we considering the CPU WORD SIZE to be 32 bits from this above statement?

The term “WORD SIZE 32 bits” is nowhere mentioned.

We could have just thought of these 32 bits to be address bits of the memory.

Is the language used in the question standard?

Moreover it is said that the memory is said to be byte addressable.

The above quoted sentence simply does not convey the complete meaning to me.

Question has a word missing – “Consider that the memory is byte addressable with ‘word’ size 32 bits”.

Option is D.

Word size is $32$ $bits$ ($4$ $bytes$). Interrupt occurs after execution of HALT instruction NOT during,  So address of next instruction will be saved on to the stack which is $1028$.

(We have $5$ instructions starting from address $1000$, each of size $2, 1, 1, 2, 1$ totaling $7$ words $= 7 *4 =28$ $bytes$).

$1000+ 28 = 1028$,

$1028$ is the starting address of NEXT Instruction .

After HALT instruction CPU enters a HALT state and if an interrupt happens the return address will be that of the instruction after the HALT.

References :

https://x86.puri.sm/html/file_module_x86_id_134.html

In this link, Instruction resumes is the sense of executing interrupt service routine, which is not in the actual instruction sequence or program.after servicing interrupt service routine, it will come back again at halt instruction.

we're wrongly interpreting the Instruction resumes term.

ans should be 1024.

I have a doubt. Memory starting address is given in decimal and size of total instruction is in bytes,then how decimal and bytes addition is taking place?
answer should be 1024 because consider the case where halt statement is succeeded by some AlU instructions now if you'll store the next intruction as the return address when an interrupt occur while executing halt then in that case after executing the interrupt program will execute those alu instruction which should not happen as program is already halted

True it is a valid case.

@Sneha negi Ma'am, I understood from your answer that after HALT is executed no other instruction should be executed. But the below statement in the question

after executing the HALT instruction, the return address will be...

Doesn’t it means now HALT has been executed and now its time for another instruction ?

It is clearly mentioned that HALT instruction has executed completely.

Now some other instruction just began its fetch at 1028, interrupt came, so it is bit OBVIOUS that 1028 will be the answer,

1007, 1020 are useless options

by

### 1 comment

No, HALT instruction changes the Program counter value to 1024, so that program remains halted until it is restarted again, so the PC value will remain 1024 which will be pushed onto the stack

### Working of HALT:

HALT instruction stops the execution of a program by changing the PC value to the current instruction program counter value (1028 is replaced with 1024 in this case) so when the HLT instruction is completed, the CPU fetches the instruction from the location specified in PC (PC contains 1024, ie HLT instruction) and increments the PC value to 1028 and does the same thing.

Now the fetched HALT instruction does the same thing again and again ( ie Changing the PC value to 1024 from 1028). It halts the program only from the user point of view, but HALT is simply busy waiting from the CPU point of view.

So ans is 1024

PS: From Chottu’s comment "Interrupt comes during the halt instruction" and "Interrupt comes after halt instruction", both are the same. Because interrupt is served only after execution of current instruction.

by