В целях тестирования я написал код сборки x86:
lea ebx, [esi]
Я изменил строку и написал:
mov ebx, esi
и программа делает то же самое. Почему?
В esi хранится адрес строки. В первой строке я сохранил адрес адреса строки, верно? А во 2 строке он должен хранить только адрес строки.
Здесь Амит Сингх Томар написал, что
mov eax ,var == lea eax [var]
и когда я прочитал и применил это к моему делу, я был немного сбит с толку.
редактировать: я также пытаюсь перевести эти две строки выше в код псевдо-C, и это выглядит так (я предполагаю, что ebx и esi являются указателями):
(1st line with lea):
unknownType *ebx = &(*esi) // since the brackets mean dereferencing,
// I use the dereferencing operator *
// and since lea is equal to the
// address of operator, I came to this result
(2nd line with mov):
unknownType *ebx;
ebx = esi ; // in the second case, ebx would point also
// to the address of the string
Но это было бы не то же самое, верно?
&
съедает*
, так что&*esi
это всего лишьesi
. - person Jester   schedule 18.12.2015LEA
вместоMOV
, заключается в том, что вы можете выполнять некоторые арифметические функции, используяLEA
, которые потребуют дополнительных инструкций, используяMOV
. - person David Hoelzer   schedule 18.12.2015