|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
09.03.2010, 21:04 | #1 |
Пользователь
Регистрация: 15.12.2009
Сообщений: 49
|
Команда леа
Всем доброго времени суток. Имеется код программы под Fasm, в котором я не понимаю как работает: lea eax,[_otvets-IDYES*5+eax+eax*4]. Изучать начал недавно, поэтому пинать не надо.
Вот код: Код:
|
09.03.2010, 21:17 | #2 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
совмещение двух обработчиков в одном.(для IDNO и IDYES)
если в eax IDYES то мы получим адрес сообщения "Нет!" иначе сообщения "Да!"(IDNO-IDYES=1 что при умножении на 5 и выдаст смещение к букве Д относительно _otvets) Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
10.03.2010, 00:44 | #3 |
Форумчанин
Регистрация: 08.01.2010
Сообщений: 165
|
Как я понял, тебе нужно объяснить смысл команды lea.
В данном случае эта команда просто выполняет арифметические действия: умножает eax на пять (eax+eax*4) и прибавляет значение (_otvets-IDYES*5) (которое вычисляется ещё на стадии ассемблирования). Результат этих действий помещается в регистр EAX Для того, чтобы понять вообще,что делает lea нужно вникнуть в такую штуку, как косвенная адресация (и различные её разновидности). В кратце: Прямая адресация - это когда мы напрямую указываем адрес, с которого нужно взять данные. Пример: Код:
Код:
по базе со сдвигом: Код:
Код:
Команда lea позволяет вычислить адрес, указанный таким способом и сохранить вычисленное значение в регистре. Иногда lea используют для быстрых арифметических вычислений - эта команда занимает мало байт, быстро работает и в отличии от ADD не изменяет флаги процессора. Все способы косвенной адресации и условия их применения описаны, к примеру, в книге Зубкова "Ассемблер для DOS, Windows и Unix". Там буквально несколько страничек прочесть нужно. Если у тебя нет этой книги - пиши в личку,я пришлю её тебе в электронном виде. Впрочем, найти её не проблема - CHM версия лежит в интернете буквально на каждом шагу |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Linux (1 команда) | werser | Помощь студентам | 2 | 02.12.2009 19:51 |
Команда AutoLispa | ИВэТэшка | Помощь студентам | 7 | 23.04.2009 20:54 |
команда MOV, проблемы | fermat_c | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 2 | 18.04.2008 19:19 |