26 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%%
%%ANKI
Basic
Q
is about to call another procedure. What is the highlighted portion of its stack frame for?
!
Back: Callee-saved registers.
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
Q
is about to call another procedure. What is the highlighted portion of its stack frame for?
!
Back: Local variables.
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
Q
is about to call another procedure. What is the highlighted portion of its stack frame for?
!
Back: Additional integral arguments.
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 must still be added to the stack before Q
passes control to another procedure?
!
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.
END%%
Local Variables
x86-64 employs 6 registers for passing integral (i.e. integer and pointer) arguments between caller and callee.
Bits | Arg 1 | Arg2 | Arg3 | Arg4 | Arg5 | Arg6 |
---|---|---|---|---|---|---|
64 | %rdi |
%rsi |
%rdx |
%rcx |
%r8 |
%r9 |
32 | %edi |
%esi |
%edx |
%ecx |
%r8d |
%r9d |
16 | %di |
%si |
%dx |
%cx |
%r8w |
%r9w |
8 | %dil |
%sil |
%dl |
%cl |
%r8b |
%r9b |
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
How many registers are available for passing integral arguments between procedures?
Back: 6
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
By convention, register {%rdi
} is used for {the first integral argument}.
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 should the first integral argument of a procedure be placed in?
Back: %rdi
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
By convention, register {%rsi
} is used for {the second integral argument}.
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 should the second integral argument of a procedure be placed in?
Back: %rsi
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
From smallest to largest, list the four "second integral argument" registers.
Back: %sil
, %si
, %esi
, and %rsi
.
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
{1:%rdi
} is to the {2:first} integral argument whereas {2:%rsi
} is to the {1:second} integral argument.
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
By convention, register {%rdx
} is used for {the third integral argument}.
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 should the third integral argument of a procedure be placed in?
Back: %rdx
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
By convention, register {%rcx
} is used for {the fourth integral argument}.
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 should the fourth integral argument of a procedure be placed in?
Back: %rcx
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 should Q
use to access value 1
?
void P() {
Q(1, 2, 3, 4, 5, 6);
}
Back: %rdi
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 should Q
use to access value 2
?
void P() {
Q(1, 2, 3, 4, 5, 6);
}
Back: %rsi
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 should Q
use to access value 3
?
void P() {
Q(1, 2, 3, 4, 5, 6);
}
Back: %rdx
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 should Q
use to access value 4
?
void P() {
Q(1, 2, 3, 4, 5, 6);
}
Back: %rcx
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
Let S
denote %rsp
before pushing parameter int a
onto the stack. What is %rsp
now?
Back: S - 8
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
Let S
denote %rsp
before pushing parameter short a
onto the stack. What is %rsp
now?
Back: S - 8
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
Let S
denote %rsp
before pushing parameter bool a
onto the stack. What is %rsp
now?
Back: S - 8
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
After calling Q
, how much space do local parameters occupy in P
's stack frame?
void P() {
Q(1, 2, 3, 4, 5, 6);
}
Back: 0 bytes. 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
After calling Q
, how much space do local parameters occupy in P
's stack frame?
void P() {
Q(1, 2, 3, 4, 5, 6, 7, 8);
}
Back: 16 bytes. 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
After calling Q
, how much space do local parameters occupy in P
's stack frame?
void P() {
Q(1, 2, 3, 4, 5, 6, true, 8);
}
Back: 16 bytes. 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 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%%
%%ANKI
Basic
Which registers are designated for argument passing?
Back: %rdi
, %rsi
, %rdx
, %rcx
, and %r8-%r9
.
Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016.
END%%
Callee-Saved Registers
x86-64 employs 6 registers as callee-saved registers. If procedure P
calls procedure Q
, Q
must preserve the values of these registers. That is, if Q
were to modify these registers, Q
is also responsible for restoring these values before returning back to P
.
Bits | ||||||
---|---|---|---|---|---|---|
64 | %rbx |
%rbp |
%r12 |
%r13 |
%r14 |
%r15 |
32 | %ebx |
%ebp |
%r12d |
%r13d |
%r14d |
%r15d |
16 | %bx |
%bp |
%r12w |
%r13w |
%r14w |
%r15w |
8 | %bl |
%bpl |
%r12b |
%r13b |
%r14b |
%15b |
%%ANKI
Basic
Which registers are designated as callee-saved?
Back: %rbx
, %rbp
, and %r12-%r15
.
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 many registers are designated as callee-saved? Back: 6. 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 registers are designated as caller-saved?
Back: All but callee-saved registers and %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 What is a callee-saved register? Back: A register whose value must be preserved by a callee on return. 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
By convention, register %rbp
is used for {callee-saved values}.
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 P
calls Q
. Callee-saved registers are in which stack frame?
Back: Q
's.
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 P
calls Q
with 8 integral arguments. Which of P
's callee-saved values or arguments to Q
are nearer the stack's top?
Back: P
's 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.
END%%
%%ANKI
Basic
Which number-suffixed register(s) are used for passing integral arguments to procedures?
Back: %r8
and %r9
.
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 number-suffixed register(s) are conventionally designated "callee-saved"?
Back: %r12
, %13
, %r14
, and %r15
.
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 number-suffixed register(s) are conventionally designated "caller-saved"?
Back: %r10
and %r11
.
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 it mean for a register to be callee-saved? Back: The callee must ensure the register's value is unchanged by the time it returns. 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 it mean for a register to be caller-saved? Back: Any procedure can modify the register's value. 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 Why are caller-saved registers named the way they are? Back: It's up to the caller to preserve their value before a procedure 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 misnomer does designating %r10
and %r11
as caller-saved registers introduce?
Back: This seems to imply there are no other caller-saved registers.
Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016.
END%%
Frame Pointer
The frame pointer, also known as the base pointer, marks the start of a variable-sized frame. %rbp
is pushed onto the stack (since it is caller-saved) and its value updated to the new value of %rsp
. Relative offsets are then computed according to it.
%%ANKI
Basic
Why is register %rbp
named the way it is?
Back: It stands for base pointer.
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
{1:%rsp
} is to {2:fixed}-sized frames whereas {2:%rbp
} is to {1:variable}-sized frames.
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
When is the %rbp
register used?
Back: When working with variable-sized frames.
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 In fixed-sized frames, what is the first callee-saved register on the stack? Back: Indeterminate. 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
In variable-sized frames, what is the first callee-saved register on the stack?
Back: %rbp
.
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 typically the ultimate instruction of a fixed-sized frame?
Back: ret
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 typically the penultimate instruction of a fixed-sized frame? Back: Indeterminate. 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 typically the ultimate instruction of a variable-sized frame?
Back: ret
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 typically the penultimate instruction of a variable-sized frame?
Back: leave
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
Assume frame Q
starts at address S
. If applicable, what address is its frame pointer set to?
Back: S + 8
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
Assume frame Q
starts at address S
. When applicable, why is %rbp
set to S + 8
?
Back: It's the value of %rsp
after pushing the previous value of %rbp
.
Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016.
END%%
Bibliography
- Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016.