Команда CMP


Лучшие книги по Ассемблеру Лучшие книги по Ассемблеру

Сделал подборку не новых, но проверенных книг по программированию на языке ассемблера. Если вы также как и я любите погружаться на низкий уровень, в те закоулки мира программирования, куда не всем путь открыт, то посмотрите. Возможно, что-то вам понравится. Подробнее...

Команда 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