Take this C code as example:
// this is defined globally.
int globalVar;
// These lines of code are part of some function
int b;
int * ptr;
ptr = &globalVar;
*ptr = 100;
b = *ptr;
Generated assembly code:
movl $globalVar, -4(%ebp)
movl -4(%ebp), %eax
movl $100, (%eax)
movl -4(%ebp), %eax
movl (%eax), %eax
movl %eax, -8(%ebp)
Location of local variables of the stack (local variables are explained
here)
ptr => -4(%ebp)
b => -8(%ebp)
The use of registers as temporary memory is described
here Comments on generated assembly code:
# ptr = &globarVar
movl $globalVar, -4(%ebp)
# tmp = ptr
movl -4(%ebp), %eax
# *tmp = 100
movl $100, (%eax)
# tmp = ptr
movl -4(%ebp), %eax
# tmp = *tmp
movl (%eax), %eax
# b = tmp
movl %eax, -8(%ebp)