There are a handful of different ways to notate assembly code. Luckily, I stumbled on what appears to be the same one. https://www.cs.virginia.edu/~evans/cs216/guides/x86.html#memory Some examples of mov instructions using address computations are: mov eax, [ebx] ; Move the 4 bytes in memory at the address contained in EBX into EAX mov [var], ebx ; Move the contents of EBX into the 4 bytes at memory address var. (Note, var is a 32-bit constant). mov eax, [esi-4] ; Move 4 bytes at memory address ESI + (-4) into EAX mov [esi+eax], cl ; Move the contents of CL into the byte at address ESI+EAX mov edx, [esi+4*ebx] ; Move the 4 bytes of data at address ESI+4*EBX into EDX So, [var] treats var as the memory address to read from or write to, and the MOV statements above are not dereferencing the pointer, but rather adjusting where it is pointing.