x86 cheatsheet
(All examples are in Intel syntax.)
Registers and memory
// r1 := r2
mov r1, r2
// r1 := mem[r2]
mov r1, [r2]
// mem[r1] := r2
mov [r1], r2
// r1 := mem[r2 + r3 * m + n]
mov r1, [r2+r3*m+n]
// push r1 to stack
push r1
// pop r1 from stack
pop r1
// r1 := r2 + r3 * m + n
lea r1, [r2+r3*m+n]
Arithmetic
// r1 += r2
add r1, r2
// r1 -= r2
sub r1, r2
// r1 *= r2
imul r1, r2
// r1 += 1
inc r1
// r1 -= 1
dec r1
// flip sign of r1 (two's complement)
neg r1
Bitwise
// invert every bit of r1
not r1
// r1 := r1 & r2
and r1, r2
// r1 := r1 | r2
or r1, r2
// r1 := r1 ^ r2
xor r1, r2
Branching
// call a function (pushes RIP to stack and jumps)
call f
// return froma function (pops RIP from stack)
ret
// unconditional jump
jmp
// comparison (sets flags for r1 - r2)
cmp r1, r2
// comparison (sets flags for r1 & r2)
test r1, r2
// conditional jumps
jz lbl
je lbl
jne lbl
jl lbl
jle lbl
jg lbl
jge lbl
Links
- "Stack frame layout on x86-64" (Eli Bendersky, 2011)