A student writes with a lot of good questions. I will handle these in line.
Hello Dr. Patt I'm a student in your EE306. I was read a Ch 9 and I had a few questions about some things. 1) On pg 227-228, you explained the code for the HALT service routine (TRAP x25) then you asked the question "What instruction (or trap service routine) can be used to start theh clock? At first I thought the answer is None since I remember that question before when you asked what instructin can restart the clock and no instruction could since the clock needs to be running for an instruction to be carried out.
So I thought the same reasoning would apply in this case but then when I looked at the code in Figure 9.6 of TRAP x25, after the HALT is carried out, R1, R0, and R7 are restored and then a return is executed so I thought how can anything be done after the HALT service routine is executed?
Nothing can until someone pushes a button somewhere (like on the front panel, for example) to restart the clock. Until then, yup, the machine has halted. Now, then, when someone does push a button, what would you like the trap routine to do? You might want it to restore the registers and return to the routine that asked for the machine to halt in the first place. As in, suppose you were performing some maintenance function on the computer, perhaps under program control. ...and you needed to stop the machine at some point to examine the hardware before moving on. TRAP x25 in your maintenance program could stop the computer, you carry out the task, then push the button, the clock restarts, restores the registers, and returns to the maintenance routine. A subtlety for sure, ...but you asked! Not something I am likely to ask about on the exam.
That must mean there' s got to be a way for instructions to be carried out after a HALT service routine. But unfortunately I couldn't figure out how? So my question how is it be done? (just a hint would be appreciated) 2) Also I was reading pg 233 -235 and it's explaining the TRAP routine for character Input but this time in terms of small subroutines within the TRAP so that got me wondering, is a TRAP service routine made up of different subroutines fragments put together to accomplish that specific TRAP service?
TRAP routines are written by people. ...smart people, usually, but people none the less. So, the answer is it depends on the person writing the routine. Either way. Depends on the person, depends on the task the routine is to carry out. It is a matter of individual style.
Also is a TRAP service routine ALWAYS a callee save since the TRAP takes care of saving registers before overwriting them and then restoring them?
I am always careful when I hear the word always, particularly when written as ALWAYS. Best answer is to ask you a question: How does the caller know which gprs the trap routine will need to carry out the work. Answer: it does not. Therefore, much easier for the callee to do it.
3) Also on pg 236 Figure 9.9 line 05, R7 is saved and in line 19 it is restored, why is it saved and restored if its not used in that specific trap routine which writes a NULL-terminated string to the console. I know that R7 in a trap is used to store the incremented PC pointing to the next instruction in the user's program so after the TRAP service routine is done it can later load that value back into the PC so it can keep going with the program normally but in this example R7 is stored in a memory location, why isn't the PC stored into R7 and then at the end of the service routine, why isn't R7 loaded back into the PC?
One thing I was trying to do when I wrote a lot of those trap routines (awhile ago, actually) was to automatically store R7 immediately just in case there was a nested TRAP or subroutine inside, or in case I needed R7 in the service routine. One can reasonably argue (as you are doing) that if none of the above, I should have not wasted the two instructions.
4) I'm not 100% clear on the difference between a TRAP service routine and a subroutine. My understanding of it is that they're pretty much the same except that a TRAP service routine asks the operating system to do something for you and the code for that trap vector is in memory but a subroutine call uses code that you the programmer wrote once in your program or one that's in another module and you link it to your module to use it. Is my understanding right and is it complete?
That "except" you mentioned is a pretty important except! But your understanding seems pretty good to me.
Sorry for the long email and if my questions seem confusing, I guess it's because I'm confused. Hopefully it will all connect before the test. Thank you.
I think you are doing fine. All good questions.
A Confused 306 Student << name withheld to protect one who claims to be confused >>