The application programmer is probably most interested in the more deeply stacked information that is out of scope at the point where interactive debugging is currently concentrated; such information was presumably deposited by program modules higher up through a calling tree that resulted in the current program state. This is also primarily the case if a system program crashes, but there could be some value in inspecting "high-water" depositions on the stack, just as a geologist only learns about large ancient floods by looking at the eroded high banks of a river.
A2:
Zero would be a valid digit value, but a negative value could be used as the flag and be easily tested. How?
A3:
Register r11 serves as the pointer for the user stack. Do you only need to fix up instructions referencing register r11?
A5:
520.
A6:
Consider hardware or software management, fixed or flexible allocations, etc.
A7:
a. None; b. No contents from before calls are guaranteed to be there after calls.
A9:
Among other things, consider carefully what should be stored into stacked register out0.
A10:
Hints for 32-bit Unix: just over p x 107 seconds per year; largest positive signed 32-bit integer (Table 2-1). Hints for OpenVMS: just over p x 1016 nanoseconds per year; largest positive signed 64-bit integer (Table 2-1).
A12:
You might consider two carefully constructed range checks and five specific comparisons.