lexical level 5 (D[5]). Suppose the variable is 6 words away from the base of lexical level 2. It is thus represented by the address couple (2, 6). If we don't have D registers, we have to look at the control word at the base of the D[5] frame, which points to the frame containing the D[4] environment. We then look at the control word at the base of this environment to find the D[3] environment, and continue in this fashion until we have followed all the links back to the required lexical level. This is not the same path as the return path back through the procedures which have been called in order to get to this point. (The architecture keeps both the data stack and the call stack in the same structure, but uses control words to tell them apart.) As you can see, this is quite inefficient just to access a variable. With D registers, the D[2] register points at the base of the lexical level 2 environment, and all we need to do to generate the address of the variable is to add its offset from the stack frame base to the frame base address in the D register. (There is an efficient linked list search operator LLLU, which could search the stack in the above fashion, but the D register approach is still going to be faster.) With D registers, access to entities in outer and global environments is just as efficient as local variable access. D Tag Data — Address couple, Comments register | 0 | n | (4, 1) The integer n (declared on entry to a block, not a procedure) |-----------------------| | D[4]==>3 | MSCW | (4, 0) The Mark Stack Control Word containing the link to D[3]. |=======================| | 0 | r2 | (3, 5) The real r2 |-----------------------| | 0 | r1 | (3, 4) The real r1 |-----------------------| | 1 | p2 | (3, 3) A SIRW reference to g at (2,6) |-----------------------| | 0 | p1 | (3, 2) The parameter p1 from value of f |-----------------------| | 3 | RCW | (3, 1) A return control word |-----------------------| | D[3]==>3 | MSCW | (3, 0) The Mark Stack Control Word containing the link to D[2]. |=======================| | 1 | a | (2, 7) The array a ======>[ten word memory block] |-----------------------| | 0 | g | (2,