Win32asm обучение


Урок 9 - Еще о кодах операций


        Win32Asm Tutorial

       

назад 9- Еще об опкодах вперед

9.0 - Еще об опкодах

Здесь я расскажу еще о нескольких опкодах.

TEST

Команда Test выполняет операцию AND (логическое И) с двумя операндами и в зависимости от результата устанавливает или сбрасывает соответствующие флаги. Результат не сохраняется. Test используется для проверки бит, например в регистре:

test eax, 100b ; (суффикс 'b' означает двоичное число)

jnz смещение

Команда jnz выполнит переход, если в регистре eax третий бит справа - установлен. Очень часто комманду test используют для проверки, равен ли регистр нулю:

test ecx, ecx

jz смещение

Команда jz выполнит переход, если ecx = 0.

Стековые операции

Перед тем, как рассказать вам о стековых операциях, я сначала попытаюсь объяснить, что такое стек. Стек это область в памяти, на которую указывает регистр стека esp. Стек это место для хранения временных значений. Есть две команды, для размещения значения в стеке и извлечения его из стека: push и pop. Команда push размещает значение в стеке, а pop извлекает. Значение помещенное в стек последним, извлекается первым. При помещении значения в стек, указатель стека уменьшается, а при извлечении - увеличивается. Рассмотрим пример:

(1) mov ecx, 100

(2) mov eax, 200

(3) push ecx ; сохранение ecx

(4) push eax

(5) xor ecx, eax

(6) add ecx, 400

(7) mov edx, ecx

(8) pop ebx

(9) pop ecx

Анализ:

1: поместить 100 в ecx

2: поместить 200 в eax

3: разместить значение из ecx (=100) в стеке (размещается первым)

4: разместить значение из eax (=200) в стеке (размещается последним)

5/6/7: выполнение операций над ecx, значение в ecx изменяется

8: извлечение значения из стека в ebx: ebx станет 200 (последнее размещение, первое извлечение)

9: извлечение значения из стека в ecx: ecx снова станет 100 (первое размещение, последнее извлечение)

Чтобы узнать, что происходит в памяти, при размещении и извлечении значений в стеке, см. на рисунок ниже:




- Начало -  - Назад -  - Вперед -



Книжный магазин