Помощь - Поиск - Пользователи - Календарь
Полная версия: Вывод строк. Равносильные команды?
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ассемблер
Altair
чем отличается
lea dx, DATA
от
mov dx,offset DATA

При выводе строк надо адрес строки разместить в dx, я пробовал двумя способами, вроде одно и то-же. Это действительно одинаковые команды???
BlackShadow
А ты откомпиль оба варианта, а затем открой в дебугере.
Что он выдаёт???
lol.gif
FreeMan
Вроде как mov reg,offset data круче!
NetAnton
могу точно подтвердить - LEA и MOV OFFSET являются эквивалентными командами. насколько помню, в книжке рекомендуется использовать LEA по причине, которую я не помню. а я добавлю - код генерируется на байт меньше :D, скорость выполнения по-моему тоже быстрее, да и писать меньше!
BlackShadow
Это зависит от компилятора. У меня Tasm 5.0 с дериктивой SMART весь тупёжь записывает в NULL, а код в exe-шник smile.gif
NetAnton
у меня TASM 5.1 и ему пофиг, что компилить :D
Altair
Ну да, lea код меньшего размера
Acidrain
komanda LEA oznatchaet "Load Effective Address" chto perevoditsja kak "Zagrushi effektivnyi adres" on pomeshaet segment data tak skazat v nailuchee mesto v registre!
ja v poslednie vrenmja ispolzuju evo bolshe smile.gif
xds
В "lea dx,DATA" в качестве DATA может выступать операнд с любым видом адресации. Например "lea dx,[bx+3]" (3 байта) эквивалентно "mov dx,bx; add dx,3" (5 байт), но ощутимо экономит место. В то же время "mov dx,offset DATA" - всего лишь загрузка константы в dx.
xds
Кстати, LEA можно использовать как трехадресную команду сложения ;) При этом одно слогаемое должно быть размещено в BX или BP, а второе - в SI или DI. Результат можно поместить в любой регистр общего назначения. Команды такого вида занимают в памяти 2 байта :P

Например: "lea ax,[bx+si]" <=> "mov ax,bx; add ax,si"
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.