ar db "Defference $"
Между чем различие
mov dx,offset ar
и
lea dx,ar
Я думаю, что оба делают ту же работу, но каково различие между этими двумя
В этом примере 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]
, с другой стороны, никак не изменяет флаги, поскольку не считается арифметической инструкцией.
Это иногда полезно, если вы хотите сохранить флаги при выполнении некоторых простых вычислений (вычисления адресов встречаются очень часто). Сохранение и восстановление регистра флагов возможно, но это медленная операция.