Команда CMP


Ассемблер для Windows Ассемблер для Windows

Рассмотрены необходимые сведения для программирования Windows-приложений на ассемблерах MASM и TASM: разработка оконных и консольных приложений; создание динамических библиотек; многозадачное программирование; программирование в локальной сети, в том числе и с использованием сокетов; создание драйверов, работающих в режиме ядра; простые методы исследования программ и др. Подробнее...

Команда CMP процессоров семейства i80x86 используется для сравнения двух операндов. Говоря проще, эта команда сравнивает два числа, то есть проверяет, равны эти два числа или НЕ равны.

Синтаксис команды CMP:

CMP ЧИСЛО1, ЧИСЛО2

ЧИСЛО1 может быть одним из следующих:

  • Область памяти (MEM)
  • Регистр общего назначения (REG)

ЧИСЛО2 может быть одним из следующих:

  • Область памяти (MEM)
  • Регистр общего назначения (REG)
  • Непосредственное значение (например, число) (IMM)

Таким образом, комбинации ЧИСЛО1-ЧИСЛО2 могут быть следующими:

REG, MEM
MEM, REG
REG, REG
MEM, IMM
REG, IMM

Сравнение чисел в Ассемблере

Сравнение чисел в Ассемблере с помощью инструкции CMP выполняется по следующему алгоритму:

  1. Из ЧИСЛА1 вычитается ЧИСЛО2 (ЧИСЛО1 - ЧИСЛО2)
  2. Если результат равен нулю, то ЧИСЛО1 = ЧИСЛО2
  3. Если числа равны, то есть результат равен 0, то устанавливается флаг ZF

Остальные флаги также устанавливаются или сбрасываются в зависимости от результата.

Но нас больше всего интересует флаг ZF.

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

  1. Выполнить команду CPM
  2. Прочитать флаг ZF
  3. Если ZF = 1, то числа равны
  4. Если ZF = 0, то числа НЕ равны

Ну а дальше, в зависимости от результата, мы можем выполнить переход на какую-то метку в программе. В статье об использовании инструкции JMP я рассказывал о метках и о безусловном переходе.

Для того, чтобы выполнить переход после сравнения чисел, требуется использовать одну из команд условного перехода. Но об этих команда будет рассказано в соответствующих статьях.

Пример участка программы сравнения чисел на Ассемблере приведён ниже:

MOV AL, 5      ; AL = 5
MOV AH, 5      ; AH = 5
CMP AL, AH     ; AL = AH, ZF = 1
	
CMP AL, 6      ; AL <> 6, ZF = 0

Здесь мы сначала помещаем в регистры AL и AH два одинаковых числа (5), а затем выполняем команду CMP - сравниваем значения в регистрах AL и AH.

Так как эти значения равны, то после выполнения команды CMP флаг ZF будет установлен, то есть равен 1.

Затем мы сравниваем содержимое регистра AL с число 6. Так как в регистре AL у нас осталось число 5, то после выполнения команды CMP флаг ZF будет сброшен (то есть равен 0), так как сравниваемые значения НЕ равны.

В конце как обычно расскажу, почему эта команда ассемблера называется CMP. Это сокращение от английского слова COMPARE, которое можно перевести как “сравнить”.



Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su

Яндекс.Метрика