Win32asm обучение


Урок 7 - Условные переходы


        Win32Asm Tutorial

       

назад 7- Условные переходы вперед

7.0 - Условные переходы

В секции кода, вы также можете использовать метки, как здесь:

.code

mov eax, edx

sub eax, ecx

cmp eax, 2

jz loc1

xor eax, eax

jmp loc2

loc1:

xor eax, eax

inc eax

loc2:


(xor eax, eax означает: eax = 0.)

Давайте исследуем код:

mov eax, edx : поместить edx в eax

sub eax, ecx : вычесть ecx из eax

cmp eax, 2

Это новая команда: cmp. Команда Cmp производит сравнение двух операндов. Она сравнивает два значения (регист, память, непосредственное значение) и устанавливает флаг нуля Z (zeroflag) если они равны. Флаг нуля, так же, как флаг переноса, находится во внутреннем флаговом регистре.

jz loc1

Это также новая команда - условный переход. Jz = (jump if zero) переход если ноль. То есть переход, если флаг нуля установлен. Loc1 это метка для смещения в памяти, на команды 'xor eax, eax | inc eax'. Значит jz loc1 = переход на команды после метки loc1 если флаг нуля установлен.

cmp eax, 2 : устанавливает флаг нуля, если eax=2

jz loc1 : переход, если флаг нуля установлен

=

Переход на команды после метки loc1, если eax равно 2

Далее здесь стоит jmp loc2. Это тоже переход, но безусловный: т.е. всегда переходит. Что именно делает вышеприведенный код:

if ((edx-ecx)==2)

{

eax = 1;

}

else

{

eax = 0;

}

или BASIC версия:

IF (edx-ecx)=2 THEN

EAX = 1

ELSE

EAX = 0

END IF

7.1 - Регистр флагов

Регистр флага имеет набор флагов, которые устанавливаются или сбрасываются в зависимости от вычислений или других событий. Я не буду расказывать о всех, а только о некоторых важных:

ZF (Zero flag) Флаг нуля

Этот флаг устанавливается, когда результат вычисления нулевой (чтобы сравнить - фактически substraction без того, чтобы сохранить(экономить) результаты, но устанавливать флажки только). This flag is set when the result of a calculation is zero (сравнение это фактически вычитание без сохранения результата, и установка соответствующих флагов).



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



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