Семантический анализ структуры EXE файла и дисассемблер (с примерами и исходниками), вирусология
Категория реферата: Рефераты по информатике, программированию
Теги реферата: бесплатные рефераты скачать бесплатно, товар реферат
Добавил(а) на сайт: Gorev.
Предыдущая страница реферата | 2 3 4 5 6 7 8 9 10 11 12 | Следующая страница реферата
(Jump if condition)
(Jump if CX=Zero/ Jump if ECX=Zero)
Переход, если выполнено условие
Переход, если CX/ECX равен нулю
|Схема команды: |jcc метка |
| |jcxz метка |
| |jecxz метка |
Назначение: переход внутри текущего сегмента команд в зависимости от
некоторого условия.
Алгоритм работы команд (кроме jcxz/jecxz):
Проверка состояния флагов в зависимости от кода операции (оно отражает проверяемое условие):
. если проверяемое условие истинно, то перейти к ячейке, обозначенной операндом;
. если проверяемое условие ложно, то передать управление следующей команде.
Алгоритм работы команды jcxz/jecxz:
Проверка условия равенства нулю содержимого регистра ecx/cx:
. если проверяемое условие истинно, то есть содержимое ecx/cx равно 0, то перейти к ячейке, обозначенной операндом метка;
. если проверяемое условие ложно, то есть содержимое ecx/cx не равно 0, то передать управление следующей за jcxz/jecxz команде программы.
Состояние флагов после выполнения команды:
|JA |CF = 0 и ZF = 0 |если выше |
|JAE |CF = 0 |если выше или равно |
|JB |CF = 1 |если ниже |
|JBE |CF = 1 или ZF = 1 |если ниже или равно |
|JC |CF = 1 |если перенос |
|JE |ZF = 1 |если равно |
|JZ |ZF = 1 |если 0 |
|JG |ZF = 0 и SF = OF |если больше |
|JGE |SF = OF |если больше или равно |
|JL |SF OF |если меньше |
|JLE |ZF=1 или SF OF |если меньше или равно |
|JNA |CF = 1 и ZF = 1 |если не выше |
|JNAE |CF = 1 |если не выше или равно |
|JNB |CF = 0 |если не ниже |
|JNBE |CF=0 и ZF=0 |если не ниже или равно |
|JNC |CF = 0 |если нет переноса |
|JNE |ZF = 0 |если не равно |
|JNG |ZF = 1 или SF OF |если не больше |
|JNGE |SF OF |если не больше или равно |
|JNL |SF = OF |если не меньше |
|JNLE |ZF=0 и SF=OF |если не меньше или равно |
|JNO |OF=0 |если нет переполнения |
|JNP |PF = 0 |если количество единичных битов результата |
| | |нечетно (нечетный паритет) |
|JNS |SF = 0 |если знак плюс (знаковый (старший) бит |
| | |результата равен 0) |
|JNZ |ZF = 0 |если нет нуля |
|JO |OF = 1 |если переполнение |
|JP |PF = 1 |если количество единичных битов результата |
| | |четно (четный паритет) |
|JPE |PF = 1 |то же, что и JP, то есть четный паритет |
|JPO |PF = 0 |то же, что и JNP |
|JS |SF = 1 |если знак минус (знаковый (старший) бит |
| | |результата равен 1) |
|JZ |ZF = 1 |если ноль |
Логические условия "больше" и "меньше" относятся к сравнениям целочисленных
значений со знаком, а "выше и "ниже" — к сравнениям целочисленных значений
без знака. Если внимательно посмотреть, то у многих команд можно заметить
одинаковые значения флагов для перехода. Это объясняется наличием
нескольких ситуаций, которые могут вызвать одинаковое состояние флагов. В
этом случае с целью удобства ассемблер допускает несколько различных
мнемонических обозначений одной и той же машинной команды условного
перехода. Эти команды ассемблера по действию абсолютно равнозначны, так как
это одна и та же машинная команда. Изначально в микропроцессоре i8086
команды условного перехода могли осуществлять только короткие переходы в
пределах -128...+127 байт, считая от следующей команды. Начиная с
микропроцессора i386, эти команды уже могли выполнять любые переходы в
пределах текущего сегмента команд. Это стало возможным за счет введения в
систему команд микропроцессора дополнительных машинных команд. Для
реализации межсегментных переходов необходимо комбинировать команды
условного перехода и команду безусловного перехода jmp. При этом можно
воспользоваться тем, что практически все команды условного перехода парные, то есть имеют команды, проверяющие обратные условия.
Применение jcxz/jecxz:
|Команд|Состояние флагов в |Условие перехода|
|а |eflags/flags | |
|JCXZ |не влияет |если регистр |
| | |CX=0 |
|JECXZ |не влияет |если регистр |
| | |ECX=0 |
Команду jcxz/jecxz удобно использовать со всеми командами, использующими
регистр ecx/cx для своей работы. Это команды организации цикла и цепочечные
команды. Очень важно отметить то, что команда jcxz/jecxz, в отличие от
других команд перехода, может выполнять только близкие переходы в пределах
-128...+127 байт, считая от следующей команды. Поэтому для нее особенно
актуальна проблема передачи управления далее чем в указанном диапазоне. Для
этого можно привлечь команду безусловного перехода jmp. Например, команду
jcxz/jecxz можно использовать для предварительной проверки счетчика цикла в
регистре cx для обхода цикла, если его счетчик нулевой.
JMP
(JuMP)
Переход безусловный
|Схема команды: |jmp метка |
Назначение: используется в программе для организации безусловного перехода
как внутри текущего сегмента команд, так и за его пределы. При определенных
условиях в защищенном режиме работы команда jmp может использоваться для
переключения задач.
Алгоритм работы:
Команда jmp в зависимости от типа своего операнда изменяет содержимое либо только одного регистра eip, либо обоих регистров cs и eip:
. если операнд в команде jmp — метка в текущем сегменте команд (a8, 16,
32), то ассемблер формирует машинную команду, операнд которой является значением со знаком, являющимся смещением перехода относительно следующей за jmp команды. При этом виде перехода изменяется только регистр eip/ip;
. если операнд в команде jmp — символический идентификатор ячейки памяти
(m16, 32, 48), то ассемблер предполагает, что в ней находится адрес, по которому необходимо передать управление. Этот адрес может быть трех видов: o значением абсолютного смещения метки перехода относительно начала сегмента кода. Размер этого смещения может быть 16 или 32 бит в зависимости от режима адресации; o дальним указателем на метку перехода в реальном и защищенном режимах, содержащим два компонента адреса — сегментный и смещение. Размеры этих компонентов также зависят от установленного режима адресации (use16 или use32). Если текущим режимом является use16, то адрес сегмента и смещение занимают по
16 бит, причем смещение располагается в младшем слове двойного слова, отводимого под этот полный адрес метки перехода. Если текущим режимом является use32, то адрес сегмента и смещение занимают, соответственно, 16 и 32 бит, — в младшем двойном слове находится смещение, в старшем — адрес сегмента; o адресом в одном из 16 или 32-разрядных регистров — этот адрес представляет собой абсолютное смещение метки, на которую необходимо передать управление, относительно начала сегмента команд.
Рекомендуем скачать другие рефераты по теме: реферат менеджмент, вопросы и ответы.
Предыдущая страница реферата | 2 3 4 5 6 7 8 9 10 11 12 | Следующая страница реферата