Questa
codice:
    movl %ebx(,%edi,4), %edx
non è un'istruzione valida. La sintassi AT&T per gli operandi è
codice:
segment:displacement(base register, offset register, scalar multiplier)
Probabilmente intendi:
codice:
    movl (%ebx, %edi, 4), %edx
(anche se personalmente eviterei la sintassi AT&T, è atroce; in sintassi Intel sarebbe più semplicemente:
codice:
mov edx, dword ptr[ebx + edi*4]
)