Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Ассемблер? Это просто! Учимся программировать


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler (Ассемблер)

Выпуск № 732
от 25.04.2007, 07:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 380, Экспертов: 40
В номере:Вопросов: 1, Ответов: 4


Вопрос № 83304: добрый день. подскажите чем отличается запись: lea dx, text от записи: mov dx, offset text точнее что меняется если я использую lea вместо offcet и наоборот. text это строка ascii символов....

Вопрос № 83.304
добрый день. подскажите чем отличается запись:
lea dx, text
от записи:
mov dx, offset text
точнее что меняется если я использую lea вместо offcet и наоборот.
text это строка ascii символов.
Отправлен: 19.04.2007, 16:53
Вопрос задал: Biggle (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Dr.Alex
Здравствуйте, Biggle!
Ничего не меняется. И той и другой командой ты в регистр dx загружаешь смещение на блок данных. Более того, некоторые ассемблеры транслируют первую запись во вторую.
Просто в первом варианте меньше пальцами набивать. :)
Ответ отправил: Dr.Alex (статус: 10-ый класс)
Ответ отправлен: 19.04.2007, 17:18

Отвечает: Лысков Игорь Витальевич
Здравствуйте, Biggle!
Команда mov dx, offset text
запишет в dx непосредственный операнд, авляющийся адресом строки text
А команда lea dx, text
запишет "эффективный адрес" аргумента в dx, в данном случае это будет адрес строки text.
Т.о., в данном случае, результат один и тот же, хотя операции производятся разные

Чтобы уяснить, почему так получается, надо вникнуть в смысл "эффективного адреса".
Под которым понимается вычисленный адрес некоторого выражения.
При этом обращения к памяти не происходит.
Это можно, например, использовать для быстрого вычисления адреса чего-либо:
lea dx, text[bx+si+1]
Или, для 32-битных регистров, можно быстро умножить,например, на 5
lea EAX, [eax+eax*4]

---------
Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: Практикант)
Ответ отправлен: 19.04.2007, 17:20

Отвечает: Пашка
Здравствуйте, Biggle!

Суть одна у них. Пример.
char cW = 'W';
void main(){
_asm{
lea eax,cW
mov eax,offset cW
}
}

Но вот выдоваемый код разный:

00401006 |. 8D05 30504000 LEA EAX,DWORD PTR DS:[405030]
0040100C |. B8 30504000 MOV EAX,ICEP.00405030 ; ASCII "WN"

Как видно дело в размере команд. Но исходя из того что запись MOV EAX,ICEP.00405030 не даёт нам понять 405030 это число или это смещение. А вот при использовании lea мы прекрасно понимае что к чему. Хотя не факт что lea может работать только со смещениями:
lea eax,DWORD PTR DS:[1] ; eax == 1
Какаю команду использовать решать вам. Некоторые компиляторы даже если вы явно используете lea всё равно вставляют mov. Плюс исходный код будет выглядить лакончино сами посмотрите:
lea ax,L1
mov ex, offset L1 ;бяка
Да и ещё [] - взять что-то по адресу находящимся в этих скобках, НО! посмотрите на это:
LEA EAX,DWORD PTR DS:[405030] ; eax будет равен 405030, а не тому что будет находиться по адресу 405030. Хотя если выпить не много пиво, а видемо инженеры так и делали, можно понять.
Ответ отправил: Пашка (статус: 2-ой класс)
Ответ отправлен: 19.04.2007, 18:07

Отвечает: An42
Здравствуйте, Biggle!
Вашем случае ни чем, в регистр dx будет занесен адрес смещения относительно начала сегмента данных.

Удачи
Ответ отправил: An42 (статус: 2-ой класс)
Ответ отправлен: 20.04.2007, 10:55


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.50 (beta) от 15.04.2007
Яндекс Rambler's Top100

В избранное