X86-64 Reference Sheet
X86-64 Reference Sheet I

https://www.cs.cmu.edu/afs/cs/academic/class/15213-s20/www/recitations/x86-cheat-sheet.pdf
X86-64 Reference Sheet II
Registers
|
Register |
Purpose |
Saved across calls |
|
%rax |
temp register; return value |
No |
|
%rbx |
callee-saved |
Yes |
|
%rcx |
used to pass 4th argument to functions |
No |
|
%rdx |
used to pass 3rd argument to functions |
No |
|
%rsp |
stack pointer |
Yes |
|
%rbp |
callee-saved; base pointer |
Yes |
|
%rsi |
used to pass 2nd argument to functions |
No |
|
%rdi |
used to pass 1st argument to functions |
No |
|
%r8 |
used to pass 5th argument to functions |
No |
|
%r9 |
used to pass 6th argument to functions |
No |
|
%r10-r11 |
temporary |
No |
|
%r12-r15 |
callee-saved registers |
Yes |
Stack Organization
|
Position |
Contents |
Frame |
|
8n+16(%rbp) |
argument n |
Previous |
|
... |
... |
|
|
16(%rbp) |
argument 7 |
|
|
8(%rbp) |
return address |
Current |
|
0(%rbp) |
previous %rbp value |
|
|
-8(%rbp) |
locals and temps |
|
|
... |
||
|
0(%rsp) |
Prologue:
// call -> pushs %rip onto stack
push %ebp
mov %esp, %ebp
Epilogue:
mov %ebp, %esp
pop %ebp
// ret -> pops %rip from stack
SIMD: MMX, SSE, AVX
|
512-bit |
256-bit |
128-bit |
Preserved |
Usage |
|
zmm0 |
ymm0 |
xmm0 |
arg1, return |
|
|
zmm1 |
ymm1 |
xmm1 |
arg2 |
|
|
⋮ |
⋮ |
|||
|
zmm7 |
ymm7 |
xmm7 |
arg8 |
|
|
zmm8 |
ymm8 |
xmm8 |
||
|
⋮ |
||||
|
zmm15 |
ymm15 |
xmm15 |
||
Example:
double foo(double x, int y) {
return x + (double) y;
}
_Z3foodi:
cvtsi2sd %edi, %xmm1
addsd %xmm1, %xmm0
ret

浙公网安备 33010602011771号