Я предполагаю, что вы пытаетесь понять, как интерпретировать эту инструкцию по сборке в стиле AT & T, в частности адресную часть. Я уверен, что вам не нужна помощь в понимании того, что делает часть imull $16
- она просто выполняет умножение со знаком, последнее l
означает long
слово.
(%eax, %edx, 4)
- это форма адресации, где у вас есть базовый адрес, смещение определенного количества элементов и масштаб / множитель для умножения количества элементов на размер каждого: (base, offset, offset scale/multiplier)
.
В результате вы получите (base + (offset * multiplier)
, поэтому в этом случае это будет:
(%eax + (%edx * 4))
(0x100 + (0x3 * 4))
(0x100 + 0xC)
(0x10C)
Поэтому инструкция imull $16, (%eax, %edx,4)
выполняет умножение со знаком 16
на значение длинного слова по адресу 0x10C
.