Я только начал с сборки; извините, если это вопрос noob.Умножающие указатели в сборе x86
Итак, мне дается i, из другой функции, которая является указателем на int. Мне нужно умножить 5 на это, но все, что я пробовал, дает мне ошибки.
lea (i), $ebp
lea (i), $ebx
addl %ebx, %ebx #error: no such instruction: `add1 %ebp,%ebp'
add1 %ebx, %ebx
addl %ebx, %ebp
movl %ebp,(i)
поэтому, я попробовал это по-другому. Не удалось заставить его работать. Я продолжал менять синтаксис на второй лиге и, вероятно, делал это хуже.
lea (i),$ebp
lea $ebp, $ebp + $ebp * 4
movl %ebp,(i)
обновление: Я сделал исправление, предложенное Мичелем. Теперь я получаю "Ошибка: суффикс или операнды недопустим для` LEA»"
'no such instruction: 'add1% ebp,% ebp'' Это потому, что вы написали цифру' 1' вместо буквы 'l'. – Michael
Вы пытаетесь загрузить адрес эффекта указателя (получить «указатель на указатель»)? Код должен в основном быть «mov» (для загрузки указателя из стека в регистр EAX), а затем один «lea» (% eax,% eax, 4),% eax', чтобы умножить его на 5 (обратите внимание: это гораздо яснее в синтаксисе Intel - например, 'lea eax, [eax * 4 + eax]'). – Brendan
Умножающие указатели не имеют смысла. Как вы увеличиваете свой домашний адрес на 5? Типичный доступ к массиву будет иметь базовый адрес ** плюс ** index * sizeof (type) –