EDX is multiplied by four, added to EAX, a 4 byte value is read from memory at that address, and placed into ECX.
MOV, in general, doesn't perform arithmetic, unless it's address calculation.
In your particular case: edx = 3
, eax = 0x100
, temporary_address_in_CPU_during_mov = eax + edx * 4 = 0x100 + 3*4 = 0x10C
. Value in memory at address 0x10C
is 0x11
.
This address arithmetic can be used itself through lea
instruction, when the CPU will do the address math, but instead of loading value from memory it will just store the calculated address, so:
leal (%eax, %edx, 4), %ecx
will load ecx
with value 0x10C
(without accessing memory). This is sometimes "tricked" for doing simple arithmetic, like eax = 5*eax
: lea (eax,eax,4),eax
(may be faster than imul
and doesn't change flag register, sometimes handy).