Some Intel Assembler Instructions

The following is a subset of gcc-supported Intel instructions. There is a larger list on page 388 of our text.

If an instruction below ends with a *, then the true instruction name ends with a l, w, or b depending on the size of its operands. Here's the rule:

  • "long" - 4 byte operands, instruction ends in 'l'
  • "word" - 2 byte operands, instruction ends in 'w'
  •  "byte" - 1 byte operands, instruction ends in 'b'

1. Data movement instructions

Instructions that shuffle data around.

Instruction Description Example(s)
mov* src, dest Move a value from memory to/from a register

dest = src

movl $17, %eax
xchg* src, dest Exchange values

dest = src

src = dest

 
push* src Push a value on the stack

mem[stack] = src

decrease %esp

pushl %edx
pop* dest Pop a value from the stack

dest = mem[stack]

increase %esp

pop %ebp

2. Arithmetic instructions

For the instructions below, * can be substituted with l, w, or b depending on the size of your operands.

Instruction Description Example(s)
add* src, dest Add

dest = dest + src

addl $4, %esp
sub* src, dest Subtract

dest = dest - src

subl $8, %esp
imul* src, dest Integer multiply

dest = dest * src

 
idiv* src, dest Integer division

dest = dest / src

 
inc* dest Increment

dest++

 
dec* dest Decrement

dest--

 

3. Logical/Boolean instructions

These instructions perform a bitwise Boolean operations.

Instruction Description Example(s)
and* src, dest Boolean and

dest = dest AND src

 
or* src, dest Boolean or

dest = dest OR src

 
xor* src, dest Boolean exclusive-or

dest = dest XOR src

 
not* dest Boolean inversion

dest = NOT dest

 

4. Comparison and Jumps

These instructions simulate subtracting the source from the destination and set the flags in the eflags register.

Instruction Description Example(s)
cmp* src, dest Compare two values

dest - src ==> set eflags reg

 
jmp addr Unconditionally jump to an address  
jz addr Jump if eflags is "zero"  
jnz addr Jump if eflags is "not zero"  
je addr Jump is eflags is "equal"  
jne addr Jump if eflags is "not equal"  
jl addr Jump if eflags is "less than"  
jle addr Jump if eflags is "less than or equal"  
jg addr Jump if eflags is "greater than"  
jge addr Jump if eflags is "greater than or equal"  

5. Function-related instructions

Instructions related to handling function calls.

Instruction Description Example(s)
call func Call function; pushes return address onto stack call _printf
ret Return from function; pops the return address that must be on the stack ret
leave Prepares for ret instruction; equivalent to

   movl%ebp, %esp

   popl %ebp

leave

ret