The general syntax for a memory operand (dereference) in AT&T x86/x64 mnemonics is offset(base, index, scale)
, which is the same as [base + index * scale + offset]
in Intel syntax (which is almost the same as the pseudo-C syntax you used).
Specifically, your first instruction
mov 0xc(%r12,%r11,8), %r11d
is the same as
mov r11d, DWORD PTR [r12+r11*8+0xc]
in Intel mnemonics, and approximately the same as
r11d = *(r12 + r11 * 8 + 0xc)
in the pseudo-C syntax.
Note that the scale is encoded using only 2 bits in the instruction, and is always a power-of-two, so only values of 1, 2, 4, and 8 are permitted.