Перейти к содержанию

Рекомендуемые сообщения

Смотрел на днях старое видео Кенга под номером 9 про телепорт в Crimsonland. Там присутствовал следующий отрывок кода:
 

Спойлер
mov ecx,2
lea esi,[eax+0048E5B4]
lea edi,[coords]
repe movsd

 

В видео сказано, что эта часть отвечает за запись "текущих координат" XY в coords. Адреса текущих XY: eax+0048E5B4, eax+0048E5B8 соответственно.
Как я понял, mov ecx,2 задает количество итераций цикла и repe movsd начинает гонять область кода с lea, пока регистр ecx не будет равен нулю. Одно понять не могу: каким образом записывается тогда Y координата? В моем понимании этот участок кода два раза скопирует X координату, ведь lea esi,[eax+0048E5B4].

Ссылка на комментарий
Поделиться на другие сайты

 

11 часов назад, Monkee сказал:

Как я понял, mov ecx,2 задает количество итераций цикла и repe movsd начинает гонять область кода с lea, пока регистр ecx не будет равен нулю

Неправильно ты понял. Рекомендую внимательно читать документацию 
movsd помещает 4 байта из источника (esi) в приемник (edi). repe повторяет действие своего операнда, при каждом повторе добавляя смещение к источник и приемнику, и уменьшая счетчик ecx. Это повторяется до достижения счетчиком нуля.

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

9 часов назад, Xipho сказал:

при каждом повторе добавляя смещение к источник и приемнику

Именно в этом была непонятка. Спасибо большое! Да, документацию курю, но с трудом (слишком хорошо описывают, что, порой, бывает не сразу понятно что к чему).

  • Смешно 1
Ссылка на комментарий
Поделиться на другие сайты

24 минуты назад, Monkee сказал:

документацию курю

курить вредно :)))
нужно

 

10 часов назад, Xipho сказал:

внимательно читать

 

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.