Pointer Dereferencing
Take this C code as example:
Generated assembly code:
Comments on generated assembly code:
// 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)