20110913

Пятый урок, товарищи, пятый урок!

Сразу же, с большого-большого разбега, [ссылка]!
Видео пришлось разбить на две части из-за врождённого рака мозга создателей органичения длины ютубного видео в 15 (!) минут - но ДЕЛАТЬ НЕЧЕГО, поделиться-то очень хотелось. ^^
В этом уроке мы познакомимся с шайтан-вещью - отладчиком - чуть поближе, ну и ещё пару клёвых штуковин:

1. Если код игры управляет вашим здоровьем - он может управлять и вражеским, ноп'ить (деактивировать) такой код будет бессмысленно - это даст бессмертие не только вам, но и вражине! В видео показан пример такой ситуации. ;)

2. Если мы меняем код игры, то нужно следить, чтобы длина старых инструкций совпадала с длиной новых, нами написанных. Иначе игра вас не поймёт и умрёт не совсем храброй смертью - придётся всё делать сначала. В видео это объяснено, но я постараюсь остановиться на этом подробнее в следующих уроках.

Ещё мы познакомимся с несколькими новыми ассемблерными командами:

1. push [что-то] - "толкнуть в стек". Про стек советую почитать подробнее в статьях\книгах по ассемблеру, но попытаюсь и объяснить:

Представьте себе стопку монеток. Можно положить сверху ещё одну ("толкнуть" в "стопку монет"), а можно:

2. pop [что-то] - "вытолкнуть из стека".

...взять монетку сверху - "вытолкнуть" из "стопки монет" обратно. Мы не можем засунуть монетку в середину или вытащить нижнюю - стопка зашатается и упадёт (не комильфо), так что принцип будет такой:

Толкаем:
Рубль, пять, два, десять

Выталкиваем:
Десять, два, пять, рубль

То есть, выталкивается всегда в обратном порядке. Часто этот процесс описывается как "Первый пришёл - последним уйдёшь". Заумная штука, да, но понимание придёт. Со временем. :)

Ещё пара команд:

3. jmp [адрес] - "прыжок" (англ. jump), переход на какой-то адрес. Важно - работает всегда, не смотря ни на какие условия и ни на что не обращая внимание.

4. cmp [первое],[второе] - сравнить первое со вторым. Операция сравнения, от английского to compare - сравнивать. Этой команде чаще всего следуют:

5. je\jne [адрес] - "прыгнуть, если" (англ. Jump if Equal \ Jump if Not Equal - "Прыгнуть, если равно \ Прыгнуть, если не равно") - такой же прыжок, как и jmp, но с условием - в первом случае прыгаем, если результат предыдущей команды (почти всегда это cmp - сравнение) положительный (первое равно второму), во втором - если отрицательный (не равно, кто бы мо г подумать!).

Ещё в этом уроке попалась такая инструкция, как lea [куда-то],[что-то] - "load effective address" - "загрузить эффективный адрес". Не буду вдаваться в подробности, скажу попроще: команда загружает значение "что-то" в "куда-то". Под "куда-то" чаще всего подразумевается какой-то из регистров процессора. Команда эта используется вместо команды mov (о ней - чуть ниже), потому что последняя плохо работает с копированием адресов в регистры. Так-то!


Ну и последняя (на этот раз, хе-хе):


mov [куда],[что] - англ. "move" - "переместить" - на самом деле, не перемещает, а копирует содержимое "что" в "куда". Например: 



mov eax, 123456 //Копирует "123456" в регистр eax
mov edx, eax //Копирует содержимое eax в edx


После выполнения команды число "123456" будет находиться И в eax И в edx. Одна из самых распостранённых команд, да. ^^




Думаю, пока всё, а то теории опять на неделю вдумчивых прочтений - перегружать не хочется. :)

PS: Если команды не хотят запоминаться - не переживайте, их знать понадобится порядка 10-15 штук, не больше. Если не понимаете значения той или иной команды (или просто забыли) - то идём в гугл и вводим запрос "assembler команда" или "ассемблер команда", где "команда" - это то самое буквосочетание из отладчика, что вас так смущает. :D


2 комментария:

  1. keng ознакомь нас пожалуйста еще с несколькими командами)) Всё-таки C# - это хорошо, легко и просто, но ассемблер тащит :D А по твоим урокам учиться - одно удовольствие ))))

    ОтветитьУдалить
    Ответы
    1. Окей, найду что-нибудь интересное. Вообще, в окне отладчика CE между окном дизассемблера (там, где команды) и дампом памяти (чуть ниже, где много цифр) есть строчка, в которой пишется описание команды. К тому же, описание любой команды можно нагуглить, например "fstp ассемблер".

      Удалить

Не люблю мат и низкий уровень грамотности. Чем конкретнее поставите свой вопрос и чем лучше он будет выглядеть - тем большая вероятность на мой ответ. :)