Различие между lea и смещением

ar db "Defference $"

Между чем различие

mov dx,offset ar

и

lea dx,ar

Я думаю, что оба делают ту же работу, но каково различие между этими двумя

12
задан Michael Petch 17 April 2018 в 01:54
поделиться

1 ответ

В этом примере LEA и MOV делают одно и то же. LEA мощнее MOV, если вы хотите вычислить адрес более сложным способом.

Например, допустим, вы хотите получить адрес n-го символа в вашем массиве, а n хранится в bx. С MOV вам придется написать две следующие инструкции:

Mov dx, offset ar
add dx, bx

С lea вы можете сделать это с помощью всего одной инструкции:

lea dx, [ar + bx]

Еще один момент, который следует учесть: инструкция add dx,bx изменит флаги состояния процессора. Сложение, выполняемое в инструкции lea dx, [ar + bx], с другой стороны, никак не изменяет флаги, поскольку не считается арифметической инструкцией.

Это иногда полезно, если вы хотите сохранить флаги при выполнении некоторых простых вычислений (вычисления адресов встречаются очень часто). Сохранение и восстановление регистра флагов возможно, но это медленная операция.

15
ответ дан 2 December 2019 в 20:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: