Консультация № 31941
21.12.2005, 13:12
0.00 руб.
0 5 2
Здравствуйте уважаемые эксперты. Помогите разобраться со следующей заморочкой:
- команда lea dx,mem эквивалентна mov dx,offset mem
так вот, как понять такую команду:
lea eax,[ecx+edx]
эту команду я подсмотрел при отладке в делфи на view cpu
сделал функцию с двумя параметрами типа integer и собственно функция возращает результат их суммы. Как бы логика понятна, но выглядит это как косвенная адресация чтоли...
странно все это...

Обсуждение

давно
Советник
419
1012
21.12.2005, 13:25
общий
это ответ
Здравствуйте, Solodov Evgeniy Vladimirovich!
LEA - вычисление эффективного адреса. Она не загружает ниоткуда никаких значений из памяти :)
давно
Посетитель
7438
7205
21.12.2005, 14:46
общий
это ответ
Здравствуйте, Solodov Evgeniy Vladimirovich
Начну с того, что lea dx,mem не эквивалентна mov dx,ofset mem.
У них только результат работы одинаков!
mov загружает непосредственный опеанд в регистр.
lea загружает эффективный адрес в регистр, в данном случае просто адрес переменной mem.
В случае lea eax,[ecx+edx], вычисляется эффективный адрес выражения [ecx+edx],
как сумма значений указанных регистров, и результат присваивается eax.
Это не только выглядит как косвенная адресация, это она и есть. :)
Так что, ничего странного тут нет.
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
21.12.2005, 14:50
общий
Я немного неправ, косвенная адресация - это при обращении к памяти, в данном случае, lea - просто вычисление эффективного адреса.
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
21.12.2005, 15:22
общий
вопрос наверняка глупый, но всеже ...кто такой эффективный адрес?
давно
Посетитель
7438
7205
21.12.2005, 16:09
общий
Эффективный адрес чего-то - это как бы адрес этого чего-то, при этом не происходит никакого обращения к памяти. Ну вот так его назвали...Кстати, командой LEA легко убыстрить умножение,например, lea eax,[eax+4*eax] даст умножение на 5
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа