12 KiB
title | TARGET DECK | FILE TAGS | tags | |
---|---|---|---|---|
Procedures | Obsidian::STEM | x86-64 |
|
Overview
The x86-64 stack grows towards lower addresses. When a procedure is invoked, more spack on the top of the stack is allocated for that procedure to make use of. This portion of the stack is called a frame. The general shape of the stack looks as follows:
Note parts of this diagram are omitted when possible. For instance, a stack frame may not exist at all if all arguments to a leaf procedure can be passed through registers. A leaf procedure is a function that does not call another function.
%%ANKII Basic What ADT is used internally in procedure-calling mechanisms? Back: A stack. Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016. END%%
%%ANKII Cloze The x86-64 stack grows towards {lower} addresses. Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016. END%%
%%ANKI Basic What is a frame w.r.t. the x86-64 stack? Back: A region of the stack dedicated to a particular function call. Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016.
END%%
%%ANKI
Basic
What instructions are used to store and retrieve from the x86-64 stack?
Back: pushq
and popq
.
Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016.
END%%
%%ANKI
Basic
What does the "stack pointer" refer to w.r.t. the x86-64 stack?
Back: Register %rsp
.
Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016.
END%%
%%ANKI
Basic
How is the stack pointer manipulated to allocate space on the x86-64 stack?
Back: By decrementing %rsp
by an appropriate amount.
Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016.
END%%
%%ANKI
Basic
How is the stack pointer manipulated to deallocate space on the x86-64 stack?
Back: By incrementing %rsp
by an appropriate amount.
Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016.
END%%
%%ANKI
Basic
Suppose procedure P
calls Q
. What data sits at the end of P
's frame?
Back: A return address.
Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016.
END%%
%%ANKI Cloze A {leaf} procedure is a function that {does not call another function}. Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016.
END%%
%%ANKI
Basic
Suppose procedure P
calls Q
. The return address belongs to who's frame?
Back: P
Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016.
END%%
%%ANKI
Basic
Suppose procedure P
calls Q
. Why is the return address considered to be in P
's frame?
Back: It is state relevant to P
.
Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016.
END%%
Control Transfer
Like conditions#JMP instructions, call
allows specifying a direct or indirect operand. call
pushes the address of the instruction following it onto the stack and updates the PC to the operand. ret
reverts these steps.
Instruction | Operands | Description |
---|---|---|
call |
Label | Procedure call |
call |
*Operand | Procedure call |
ret |
Return from call |
%%ANKI
Cloze
The {call
} instruction is the counterpart to the {ret
} instruction.
Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016.
END%%
%%ANKI
Basic
What two things does the call
instruction do?
Back: It pushes the return address on the stack and updates the PC.
Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016.
END%%
%%ANKI
Basic
What two things does the ret
instruction do?
Back: It pops the return address off the stack and updates the PC.
Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016.
END%%
%%ANKI
Basic
The operand forms of call
mirror what other instruction class?
Back: JMP
Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016.
END%%
%%ANKI
Basic
A call
instruction pushes what address onto the stack?
Back: That of the instruction following the call
instruction.
Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016.
END%%
%%ANKI
Basic
What return address is pushed onto the stack after call
is run?
1: ...
2: callq .L1
3: ...
Back: 3
Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016.
END%%
%%ANKI
Basic
What address is the PC updated to after call
is run?
1: ...
2: callq .L1
3: ...
Back: That corresponding to label .L1
.
Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016.
END%%
%%ANKI
Basic
Which register(s) does a call
instruction update?
Back: %rsp
and %rip
.
Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016.
END%%
%%ANKI
Basic
Which register(s) does a ret
instruction update?
Back: %rsp
and %rip
.
Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016.
END%%
Data Transfer
The 6 registers used for passing integral arguments are highlighted registers#Integral Arguments. If more than 6 integral arguments are specified to a procedure, the surplus are placed onto the stack in the caller's frame.
The 7th argument is placed closer to the top of the stack (i.e. with lower address) than subsequent arguments.
%%ANKI Basic Which frame contains the 7th argument?
void P() {
...
Q(1, 2, 3, 4, 5, 6, 7);
...
}
Back: P
's frame.
Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016.
Tags: c17
END%%
%%ANKI Basic Which frame contains the return address?
void P() {
...
Q(1, 2, 3);
...
}
Back: P
's frame.
Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016.
Tags: c17
END%%
%%ANKI Basic Which of the 7th or 8th argument has lower address?
void P() {
...
Q(1, 2, 3, 4, 5, 6, 7, 8);
...
}
Back: The 7th argument. Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016. Tags: c17
END%%
%%ANKI Basic Which of the 7th or 8th argument is nearer the stack's top?
void P() {
...
Q(1, 2, 3, 4, 5, 6, 7, 8);
...
}
Back: The 7th argument. Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016. Tags: c17
END%%
%%ANKI Basic Which arguments are placed onto the stack?
void P() {
...
Q(1, 2, 3, 4, 5, 6, 7, 8);
...
}
Back: Arguments 7 and 8. Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016. Tags: c17
END%%
%%ANKI Basic Which of the 6th or 7th argument is nearer the stack's top?
void P() {
...
Q(1, 2, 3, 4, 5, 6, 7);
...
}
Back: N/A. Argument 6 isn't placed onto the stack at all. Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016. Tags: c17
END%%
%%ANKI Basic Which of the 7th argument or the return address is nearer the stack's top?
void P() {
...
Q(1, 2, 3, 4, 5, 6, 7);
...
}
Back: The return address. Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016. Tags: c17
END%%
In some cases, integral values still need to be placed onto the stack. For example, operator &
is applied to a local variable and hence we must be able to generate an address for it.
%%ANKI
Cloze
In the following, P
is the {caller} and Q
is the {callee}.
int P() { Q(); }
Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016. Tags: c17
END%%
%%ANKI
Basic
Why doesn't P
have to allocate any local variables on the stack?
void P() {
int a = 100;
Q(a);
}
Back: A register can be set to immediate $100
for Q
to access.
Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016.
Tags: c17
END%%
%%ANKI
Basic
Why doesn't P
have to allocate any local variables on the stack?
void P() {
int a = 100;
Q(&a);
}
Back: N/A. It does since we need an address for a
to supply to Q
.
Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016.
Tags: c17
END%%
%%ANKI
Basic
Is P
's local stack variables or arguments to Q
nearer the stack's top?
void P() {
...
Q(1, 2, 3, 4, 5, 6);
...
}
Back: N/A. P
does not have any arguments passed to Q
on the stack.
Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016.
Tags: c17
END%%
%%ANKI
Basic
Is P
's local stack variables or arguments to Q
nearer the stack's top?
void P() {
...
Q(1, 2, 3, 4, 5, 6, 7);
...
}
Back: The arguments to Q
.
Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016.
Tags: c17
END%%
Bibliography
- Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016.