Basic syntax & instructions in Intel syntax assembly.

mov dest, src                   ; dest = src (if src is a register)
lea dest, [src]                 ; dest = src (load the address stored in src register into dest register)
test a, b                       ; performs a AND b and sets the FLAGS registers accordingly
cmp a, b                        ; performs a MINUS b and sets the FLAGS registers accordingly

Align stack to 16-bit for certain library calls

push ebp
mov ebp, esp
and esp, 0xfffffff0
; ...
mov esp, ebp
pop ebp
  • Save EBP value on stack
  • Save ESP value into EBP
  • Now:
    • EBP points to top of stack
    • ESP points to top of stack
  • Truncate ESP bottom 4 bits for alignment (this makes sure the address is a multiple of 16; since stack grows towards 0, no data will be overwritten)
  • Now:
    • EBP points to original top-of-stack
    • ESP points to newly aligned top-of-stack
  • Do stuff with library calls
  • Restore ESP from EBP register
  • Restore EBP from stack

x86 leave instruction

mov esp, ebp   ; restore caller ESP from EBP
pop ebp        ; restore caller EBP at ESP