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

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