Инструкция lea
( "загружаемый эффективный адрес" ) берет адрес памяти первого значения и добавляет его ко второму значению, которое может быть умножено. Затем он загружает этот адрес памяти в заданный регистр.
Позвольте мне привести пример, чтобы прояснить мою путаницу:
eax = 2
leal (%eax, %eax, 4), %edx
Я считаю, что результатом этого является то, что edx
будет иметь значение 10
внутри него (2 + 2 * 4 == 10
). Но почему эта инструкция для адресов памяти, если она просто выполняет арифметику по целым числам?
Я прочитал другие ответы, но все они говорят о том, что адреса памяти являются единственными. Может кто-нибудь помочь мне понять, что делает leal
?