Win32 в машинных кодах


Главная функция окна - часть 4


Отдельные поля (биты) регистра EFLAGS служат в качетве своего рода переключателей, используемых другими инструкциями (в частности, инструкциями условных переходов) для запуска тех или иных действий. Широко используются т.н. флаги состояния, которые приведены на следующем рисунке.

Инструкция сравнения в зависимости от полученного результата операции изменяет все эти 6 флагов. В данном случае нас интересует состояние одного флага, а именно: флага нуля. Если сравниваемые величины равны, этот флаг будет установлен (1), если нет - сброшен (0).

Изменить ход выполнения программы в зависимости от значений флагов состояния позволяют инструкции условного перехода, имеющие следующий общий формат:

0111 ttt n &lt1 байт смещения&gt

Где ttt является кодом состояния определенных флагов (условием), а n указывает, нужно использовать само условие (при n = 0) или его отрицание (при n = 1). При выполнении условия (или его отрицания, если n = 1) к значению EIP прибавляется (с учетом знака) следующий за опкодом 1 байт смещения. В результате осуществляется переход на исполнение команд в другом месте. Если условие не выполняется - ничего не происходит, выполнение продолжается со следующей инструкции (как будто команды условного перехода не было).

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

КодФлагиУсловие

000OF=1Переполнение

001CF=1Перенос

010ZF=1Нулевой результат

011CF=1 или ZF=1Нулевой результат или перенос

100SF=1Отрицательный результат

101PF=1Четный паритет в младших 8 битах

110SF != OFСравнение со знаком: меньше

111ZF=0 или SF != OFСравнение со знаком: меньше или равно

Таблица отражает работу команды на низком уровне. Использование состояния различных флагов, их комбинаций и создаваемые этим условия мы будем изучать по мере необходимости. Сейчас не будем углубляться в детали, рассмотрим лишь конкретный пример.




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



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