Я не понимаю, что делает эта инструкция по сборке. Каков его эффект и почему?Агрессивные языки Целочисленные регистры
imull $16, (%eax, %edx,4)
Начальные значения регистров
%eax= 0x100x
%edx= 0x3
Я не понимаю, что делает эта инструкция по сборке. Каков его эффект и почему?Агрессивные языки Целочисленные регистры
imull $16, (%eax, %edx,4)
Начальные значения регистров
%eax= 0x100x
%edx= 0x3
Я предполагаю, что вы пытаетесь понять, как интерпретировать инструкцию по сборке стилей 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
.
Как бы я решил? Я не вижу проблемы в первую очередь. Вы спрашиваете, каков будет результат? – Flexo