Move with Calculated Address
x86 allows very flexible addressing:
Offset from Register
movl %eax,-32(%rbp) # %eax -> i
Offset from Two Registers
movsd %xmm0,-1296(%rbp,%rax) # ac[]The offset and contents of the two registers are added to form the effective address.
Offset from Two Registers with Multiplier
movsd %xmm0,-1296(%rbp,%rax,8) # x[]In this case, the second register is multiplied by 2, 4, or 8 (using an internal shift) before being added. This can allow many aref expressions to be done in a single instruction.