home blog portfolio Ian Fisher

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

See also