Why can we write this:
mov rax, [array + 2*rcx]
and cannot this:
mov rax, [array + rcx*rcx]
Why can we do complex calculations in addition to main instruction (mov) in first case and cannot do only slightly more complex ones in second? And why can we add to memory:
add [array], 1
What is happening under the hood?